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