|  | /* | 
|  | * Copyright 2012 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #ifndef BenchLogger_DEFINED | 
|  | #define BenchLogger_DEFINED | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include "SkString.h" | 
|  | #include "SkTypes.h" | 
|  |  | 
|  | class SkFILEWStream; | 
|  |  | 
|  | /** | 
|  | * Class that allows logging to a file while simultaneously logging to stdout/stderr. | 
|  | */ | 
|  | class BenchLogger { | 
|  | public: | 
|  | BenchLogger(); | 
|  |  | 
|  | /** | 
|  | * Not virtual, since this class is not intended to be subclassed. | 
|  | */ | 
|  | ~BenchLogger(); | 
|  |  | 
|  | /** | 
|  | * Specify a file to write progress logs to. Unless this is called with a valid file path, | 
|  | * BenchLogger will only write to stdout/stderr. | 
|  | */ | 
|  | bool SetLogFile(const char file[]); | 
|  |  | 
|  | /** | 
|  | * Log an error to stderr, taking a C style string as input. | 
|  | */ | 
|  | void logError(const char msg[]) { this->nativeLogError(msg); } | 
|  |  | 
|  | /** | 
|  | * Log an error to stderr, taking an SkString as input. | 
|  | */ | 
|  | void logError(const SkString& str) { this->nativeLogError(str.c_str()); } | 
|  |  | 
|  | /** | 
|  | * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, | 
|  | * if any, taking a C style string as input. | 
|  | */ | 
|  | void logProgress(const char msg[]) { | 
|  | this->nativeLogProgress(msg); | 
|  | this->fileWrite(msg, strlen(msg)); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, | 
|  | * if any, taking an SkString as input. | 
|  | */ | 
|  | void logProgress(const SkString& str) { | 
|  | this->nativeLogProgress(str.c_str()); | 
|  | this->fileWrite(str.c_str(), str.size()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | #ifdef SK_BUILD_FOR_ANDROID | 
|  | void nativeLogError(const char msg[]) { SkDebugf("%s", msg); } | 
|  | #else | 
|  | void nativeLogError(const char msg[]) { fprintf(stderr, "%s", msg); } | 
|  | #endif | 
|  | void nativeLogProgress(const char msg[]) { SkDebugf("%s", msg); } | 
|  |  | 
|  | void fileWrite(const char msg[], size_t size); | 
|  |  | 
|  | SkFILEWStream* fFileStream; | 
|  | }; | 
|  |  | 
|  | #endif // BenchLogger_DEFINED |