Home | History | Annotate | Download | only in bench
      1 
      2 /*
      3  * Copyright 2011 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 #ifndef SkBenchTimer_DEFINED
      9 #define SkBenchTimer_DEFINED
     10 
     11 #include <SkTypes.h>
     12 
     13 
     14 class BenchSysTimer;
     15 class BenchGpuTimer;
     16 
     17 class SkGLContextHelper;
     18 
     19 /**
     20  * SysTimers and GpuTimers are implemented orthogonally.
     21  * This class combines 2 SysTimers and a GpuTimer into one single,
     22  * platform specific Timer with a simple interface. The truncated
     23  * timer doesn't include the time required for the GPU to finish
     24  * its rendering. It should always be <= the un-truncated system
     25  * times and (for GPU configurations) can be used to roughly (very
     26  * roughly) gauge the GPU load/backlog.
     27  */
     28 class BenchTimer {
     29 public:
     30     BenchTimer(SkGLContextHelper* gl = NULL);
     31     ~BenchTimer();
     32     void start(double durationScale = 1);
     33     void end();
     34     void truncatedEnd();
     35     double fCpu;
     36     double fWall;
     37     double fTruncatedCpu;
     38     double fTruncatedWall;
     39     double fGpu;
     40 
     41 private:
     42     BenchSysTimer* fSysTimer;
     43     BenchSysTimer* fTruncatedSysTimer;
     44 #if SK_SUPPORT_GPU
     45     BenchGpuTimer* fGpuTimer;
     46 #endif
     47     double fDurationScale;  // for this start/end session
     48 };
     49 
     50 // Same as BenchTimer above, supporting only fWall but with much lower overhead.
     51 // (Typically, ~30ns instead of BenchTimer's ~1us.)
     52 class WallTimer {
     53 public:
     54     WallTimer();
     55     ~WallTimer();
     56 
     57     void start(double durationScale = 1);
     58     void end();
     59 
     60     double fWall;
     61 
     62 private:
     63     BenchSysTimer* fSysTimer;
     64     double fDurationScale;
     65 };
     66 
     67 #endif
     68