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