1 /* 2 * Copyright 2012 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef BenchLogger_DEFINED 9 #define BenchLogger_DEFINED 10 11 #include <stdio.h> 12 #include "SkString.h" 13 #include "SkTypes.h" 14 15 class SkFILEWStream; 16 17 /** 18 * Class that allows logging to a file while simultaneously logging to stdout/stderr. 19 */ 20 class BenchLogger { 21 public: 22 BenchLogger(); 23 24 /** 25 * Not virtual, since this class is not intended to be subclassed. 26 */ 27 ~BenchLogger(); 28 29 /** 30 * Specify a file to write progress logs to. Unless this is called with a valid file path, 31 * BenchLogger 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 #else 67 void nativeLogError(const char msg[]) { fprintf(stderr, "%s", msg); } 68 #endif 69 void nativeLogProgress(const char msg[]) { SkDebugf("%s", msg); } 70 71 void fileWrite(const char msg[], size_t size); 72 73 SkFILEWStream* fFileStream; 74 }; 75 76 #endif // BenchLogger_DEFINED 77