19a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com/* 29a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Copyright 2012 Google Inc. 39a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * 49a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Use of this source code is governed by a BSD-style license that can be 59a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * found in the LICENSE file. 69a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 79a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#ifndef BenchLogger_DEFINED 9f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#define BenchLogger_DEFINED 109a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 11fab44db294846ff05d837b9cf0bf97a073891da7bungeman@google.com#include <stdio.h> 12f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkString.h" 13f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "SkTypes.h" 149a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 159a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.comclass SkFILEWStream; 169a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 179a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com/** 189a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Class that allows logging to a file while simultaneously logging to stdout/stderr. 199a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 20f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass BenchLogger { 219a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.compublic: 22f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina BenchLogger(); 239a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 249a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 259a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Not virtual, since this class is not intended to be subclassed. 269a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 27f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina ~BenchLogger(); 289a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 299a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 309a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Specify a file to write progress logs to. Unless this is called with a valid file path, 31f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina * BenchLogger will only write to stdout/stderr. 329a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 339a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com bool SetLogFile(const char file[]); 349a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 359a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 369a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Log an error to stderr, taking a C style string as input. 379a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 389a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void logError(const char msg[]) { this->nativeLogError(msg); } 399a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 409a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 419a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Log an error to stderr, taking an SkString as input. 429a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 439a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void logError(const SkString& str) { this->nativeLogError(str.c_str()); } 449a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 459a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 469a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, 479a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * if any, taking a C style string as input. 489a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 499a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void logProgress(const char msg[]) { 509a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com this->nativeLogProgress(msg); 519a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com this->fileWrite(msg, strlen(msg)); 529a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com } 539a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 549a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com /** 559a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * Log the progress of the bench tool to both stdout and the log file specified by SetLogFile, 569a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com * if any, taking an SkString as input. 579a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com */ 589a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void logProgress(const SkString& str) { 599a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com this->nativeLogProgress(str.c_str()); 609a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com this->fileWrite(str.c_str(), str.size()); 619a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com } 629a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 639a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.comprivate: 649a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com#ifdef SK_BUILD_FOR_ANDROID 659a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void nativeLogError(const char msg[]) { SkDebugf("%s", msg); } 669a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com#else 679a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void nativeLogError(const char msg[]) { fprintf(stderr, "%s", msg); } 689a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com#endif 69aadb4d9a53d406b4bf40089a10ef94302d21b6bbcommit-bot@chromium.org void nativeLogProgress(const char msg[]) { SkDebugf("%s", msg); } 709a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 719a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com void fileWrite(const char msg[], size_t size); 729a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 739a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com SkFILEWStream* fFileStream; 749a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com}; 759a4125283ad56cea3b986337cb669dde14bf0ed8scroggo@google.com 76f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#endif // BenchLogger_DEFINED 77