Index: bench/BenchTimer.cpp |
diff --git a/bench/BenchTimer.cpp b/bench/BenchTimer.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f3e8e3b0ec69483f3d298bf3772eb668cd421988 |
--- /dev/null |
+++ b/bench/BenchTimer.cpp |
@@ -0,0 +1,94 @@ |
+ |
+/* |
+ * Copyright 2011 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+#include "BenchTimer.h" |
+#if defined(SK_BUILD_FOR_WIN32) |
+ #include "BenchSysTimer_windows.h" |
+#elif defined(SK_BUILD_FOR_MAC) |
+ #include "BenchSysTimer_mach.h" |
+#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_ANDROID) |
+ #include "BenchSysTimer_posix.h" |
+#else |
+ #include "BenchSysTimer_c.h" |
+#endif |
+ |
+#if SK_SUPPORT_GPU |
+#include "BenchGpuTimer_gl.h" |
+#endif |
+ |
+BenchTimer::BenchTimer(SkGLContextHelper* gl) |
+ : fCpu(-1.0) |
+ , fWall(-1.0) |
+ , fTruncatedCpu(-1.0) |
+ , fTruncatedWall(-1.0) |
+ , fGpu(-1.0) |
+{ |
+ fSysTimer = new BenchSysTimer(); |
+ fTruncatedSysTimer = new BenchSysTimer(); |
+#if SK_SUPPORT_GPU |
+ if (gl) { |
+ fGpuTimer = new BenchGpuTimer(gl); |
+ } else { |
+ fGpuTimer = NULL; |
+ } |
+#endif |
+} |
+ |
+BenchTimer::~BenchTimer() { |
+ delete fSysTimer; |
+ delete fTruncatedSysTimer; |
+#if SK_SUPPORT_GPU |
+ delete fGpuTimer; |
+#endif |
+} |
+ |
+void BenchTimer::start(double durationScale) { |
+ fDurationScale = durationScale; |
+ |
+ fSysTimer->startWall(); |
+ fTruncatedSysTimer->startWall(); |
+#if SK_SUPPORT_GPU |
+ if (fGpuTimer) { |
+ fGpuTimer->startGpu(); |
+ } |
+#endif |
+ fSysTimer->startCpu(); |
+ fTruncatedSysTimer->startCpu(); |
+} |
+ |
+void BenchTimer::end() { |
+ fCpu = fSysTimer->endCpu() * fDurationScale; |
+#if SK_SUPPORT_GPU |
+ //It is important to stop the cpu clocks first, |
+ //as the following will cpu wait for the gpu to finish. |
+ if (fGpuTimer) { |
+ fGpu = fGpuTimer->endGpu() * fDurationScale; |
+ } |
+#endif |
+ fWall = fSysTimer->endWall() * fDurationScale; |
+} |
+ |
+void BenchTimer::truncatedEnd() { |
+ fTruncatedCpu = fTruncatedSysTimer->endCpu() * fDurationScale; |
+ fTruncatedWall = fTruncatedSysTimer->endWall() * fDurationScale; |
+} |
+ |
+WallTimer::WallTimer() : fWall(-1.0), fSysTimer(new BenchSysTimer) {} |
+ |
+WallTimer::~WallTimer() { |
+ delete fSysTimer; |
+} |
+ |
+void WallTimer::start(double durationScale) { |
+ fDurationScale = durationScale; |
+ fSysTimer->startWall(); |
+} |
+ |
+void WallTimer::end() { |
+ fWall = fSysTimer->endWall() * fDurationScale; |
+} |
+ |