| /* |
| * 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" |
| #include "SkString.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 SkGLContext; |
| |
| /** |
| * 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(SkGLContext* gl = nullptr); |
| |
| 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; |
| }; |
| |
| SkString HumanizeMs(double); |
| |
| #endif |