skia2/bench/BenchTimer.cpp
reed@google.com ef77ec2104 extend SkBenchmark to allow a bench to return a durationScale, which allows it to perform fewer actual interations, but report a scale factor to account for that. Thus a very slow bench can be compared head-to-head with a faster one, w/o actually forcing the tool to run for the full duration of the slower test.
Extend BitmapBench to time bicubic filtering, and use this durationScale for it.

Extend SkBenchmark to have setBitmapFlags(or, clear), allowing it to request a set of paint flags to be cleared, and set to be set.

BUG=
R=robertphillips@google.com

Review URL: https://codereview.chromium.org/16069010

git-svn-id: http://skia.googlecode.com/svn/trunk@9315 2bbb7eff-a529-9590-31e7-b0007b416f81
2013-05-29 15:39:54 +00:00

79 lines
1.8 KiB
C++

/*
* 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;
}