/* * 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