| 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;
|
| +}
|
| +
|
|
|