diff options
Diffstat (limited to 'tools/timer/Timer.h')
-rw-r--r-- | tools/timer/Timer.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/timer/Timer.h b/tools/timer/Timer.h new file mode 100644 index 0000000000..7a91ac6e53 --- /dev/null +++ b/tools/timer/Timer.h @@ -0,0 +1,73 @@ +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef Timer_DEFINED +#define Timer_DEFINED + +#include "SkTypes.h" + +#if defined(SK_BUILD_FOR_WIN32) + #include "SysTimer_windows.h" +#elif defined(SK_BUILD_FOR_MAC) + #include "SysTimer_mach.h" +#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) + #include "SysTimer_posix.h" +#endif + +#if SK_SUPPORT_GPU + #include "GpuTimer.h" +#endif + +class SkGLContextHelper; + +/** + * SysTimers and GpuTimers are implemented orthogonally. + * This class combines 2 SysTimers and a GpuTimer into one single, + * platform specific Timer with a simple interface. The truncated + * timer doesn't include the time required for the GPU to finish + * its rendering. It should always be <= the un-truncated system + * times and (for GPU configurations) can be used to roughly (very + * roughly) gauge the GPU load/backlog. + */ +class Timer { +public: + explicit Timer(SkGLContextHelper* gl = NULL); + + void start(); + void truncatedEnd(); + void end(); + + // All times in milliseconds. + double fCpu; + double fWall; + double fTruncatedCpu; + double fTruncatedWall; + double fGpu; + +private: + SysTimer fSysTimer; + SysTimer fTruncatedSysTimer; +#if SK_SUPPORT_GPU + GpuTimer fGpuTimer; +#endif +}; + +// Same as Timer above, supporting only fWall but with much lower overhead. +// (Typically, ~30ns instead of Timer's ~1us.) +class WallTimer { +public: + WallTimer(); + + void start(); + void end(); + + double fWall; // Milliseconds. + +private: + SysTimer fSysTimer; +}; + +#endif |