1 2 /* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #ifndef SkBenchLogger_DEFINED 10 #define SkBenchLogger_DEFINED 11 12 #include "SkTypes.h" 13 #include "SkString.h" 14 15 class SkFILEWStream; 16 17 /** 18 * Class that allows logging to a file while simultaneously logging to stdout/stderr. 19 */ 20 class SkBenchLogger { 21 public: 22 SkBenchLogger(); 23 24 /** 25 * Not virtual, since this class is not intended to be subclassed. 26 */ 27 ~SkBenchLogger(); 28 29 /** 30 * Specify a file to write progress logs to. Unless this is called with a valid file path, 31 * SkBenchLogger will only write to stdout/stderr. 32 */ 33 bool SetLogFile(const char file[]); 34 35 /** 36 * Log an error to stderr, taking a C style string as input. 37 */ 38 void logError(const char msg[]) { this->nativeLogError(msg); } 39 40 /** 41 * Log an error to stderr, taking an SkString as input. 42 */ 43 void logError(const SkString& str) { this->nativeLogError(str.c_str()); } 44 45 /** 46 * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, 47 * if any, taking a C style string as input. 48 */ 49 void logProgress(const char msg[]) { 50 this->nativeLogProgress(msg); 51 this->fileWrite(msg, strlen(msg)); 52 } 53 54 /** 55 * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, 56 * if any, taking an SkString as input. 57 */ 58 void logProgress(const SkString& str) { 59 this->nativeLogProgress(str.c_str()); 60 this->fileWrite(str.c_str(), str.size()); 61 } 62 63 private: 64 #ifdef SK_BUILD_FOR_ANDROID 65 void nativeLogError(const char msg[]) { SkDebugf("%s", msg); } 66 void nativeLogProgress(const char msg[]) { SkDebugf("%s", msg); } 67 #else 68 void nativeLogError(const char msg[]) { fprintf(stderr, "%s", msg); } 69 void nativeLogProgress(const char msg[]) { printf("%s", msg); } 70 #endif 71 72 void fileWrite(const char msg[], size_t size); 73 74 SkFILEWStream* fFileStream; 75 }; 76 77 #endif // SkBenchLogger_DEFINED 78