| /* | |
| * 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) || defined(SK_BUILD_FOR_IOS) | |
| #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 |