aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/timer/Timer.h
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2015-10-22 13:03:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-10-22 13:03:02 -0700
commit6ae30fbbafe9aa9596922ac96ecaae0278b7be65 (patch)
treec2944e2bc22e8b64ad07dc9b6e9275a0c52dedf6 /tools/timer/Timer.h
parent70084cbc16ee8162649f2601377feb6e49de0217 (diff)
Revert of SkTime::GetNSecs() (patchset #9 id:160001 of https://codereview.chromium.org/1422513003/ )
Reason for revert: broke chromeos Original issue's description: > SkTime::GetNSecs() > > - Move high-precision wall timers from tools/timer to SkTime. > - Implement SkTime::GetMSecs() in terms of SkTime::GetNSecs(). > - Delete unused tools/timer code. > > I have no idea what's going on there in src/animator. > I don't intend to investigate. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/70084cbc16ee8162649f2601377feb6e49de0217 TBR=reed@google.com,mtklein@google.com,mtklein@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1420923003
Diffstat (limited to 'tools/timer/Timer.h')
-rw-r--r--tools/timer/Timer.h60
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);