Home | History | Annotate | Download | only in bench
      1 
      2 /*
      3  * Copyright 2012 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #ifndef SkBenchLogger_DEFINED
     10 #define SkBenchLogger_DEFINED
     11 
     12 #include "SkTypes.h"
     13 #include "SkString.h"
     14 
     15 class SkFILEWStream;
     16 
     17 /**
     18  * Class that allows logging to a file while simultaneously logging to stdout/stderr.
     19  */
     20 class SkBenchLogger {
     21 public:
     22     SkBenchLogger();
     23 
     24     /**
     25      * Not virtual, since this class is not intended to be subclassed.
     26      */
     27     ~SkBenchLogger();
     28 
     29     /**
     30      * Specify a file to write progress logs to. Unless this is called with a valid file path,
     31      * SkBenchLogger 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     void nativeLogProgress(const char msg[]) { SkDebugf("%s", msg); }
     67 #else
     68     void nativeLogError(const char msg[]) { fprintf(stderr, "%s", msg); }
     69     void nativeLogProgress(const char msg[]) { printf("%s", msg); }
     70 #endif
     71 
     72     void fileWrite(const char msg[], size_t size);
     73 
     74     SkFILEWStream* fFileStream;
     75 };
     76 
     77 #endif // SkBenchLogger_DEFINED
     78