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