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 15class SkFILEWStream; 16 17/** 18 * Class that allows logging to a file while simultaneously logging to stdout/stderr. 19 */ 20class BenchLogger { 21public: 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 63private: 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