diff options
Diffstat (limited to 'tools/timer/Timer.h')
-rw-r--r-- | tools/timer/Timer.h | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/tools/timer/Timer.h b/tools/timer/Timer.h index 446eb254fd..9557596248 100644 --- a/tools/timer/Timer.h +++ b/tools/timer/Timer.h @@ -7,18 +7,68 @@ #ifndef Timer_DEFINED #define Timer_DEFINED -#include "SkString.h" -#include "SkTime.h" #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() : fWall(-1) {} + WallTimer(); - void start() { fWall = SkTime::GetNSecs(); } - void end() { fWall = (SkTime::GetNSecs() - fWall) * 1e-6; } + void start(); + void end(); double fWall; // Milliseconds. + +private: + SysTimer fSysTimer; }; SkString HumanizeMs(double); |