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