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