skia2/bench/SkBenchmark.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

91 lines
2.0 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 "SkBenchmark.h"
#include "SkPaint.h"
#include "SkParse.h"
SK_DEFINE_INST_COUNT(SkBenchmark)
template BenchRegistry* BenchRegistry::gHead;
SkBenchmark::SkBenchmark(void* defineDict) {
fDict = reinterpret_cast<const SkTDict<const char*>*>(defineDict);
fForceAlpha = 0xFF;
fForceAA = true;
fDither = SkTriState::kDefault;
fHasStrokeWidth = false;
fIsRendering = true;
fOrMask = fClearMask = 0;
}
const char* SkBenchmark::getName() {
return this->onGetName();
}
SkIPoint SkBenchmark::getSize() {
return this->onGetSize();
}
void SkBenchmark::preDraw() {
this->onPreDraw();
}
void SkBenchmark::draw(SkCanvas* canvas) {
this->onDraw(canvas);
}
void SkBenchmark::postDraw() {
this->onPostDraw();
}
void SkBenchmark::setupPaint(SkPaint* paint) {
paint->setAlpha(fForceAlpha);
paint->setAntiAlias(fForceAA);
paint->setFilterBitmap(fForceFilter);
paint->setFlags((paint->getFlags() & ~fClearMask) | fOrMask);
if (SkTriState::kDefault != fDither) {
paint->setDither(SkTriState::kTrue == fDither);
}
}
const char* SkBenchmark::findDefine(const char* key) const {
if (fDict) {
const char* value;
if (fDict->find(key, &value)) {
return value;
}
}
return NULL;
}
bool SkBenchmark::findDefine32(const char* key, int32_t* value) const {
const char* valueStr = this->findDefine(key);
if (valueStr) {
SkParse::FindS32(valueStr, value);
return true;
}
return false;
}
bool SkBenchmark::findDefineScalar(const char* key, SkScalar* value) const {
const char* valueStr = this->findDefine(key);
if (valueStr) {
SkParse::FindScalar(valueStr, value);
return true;
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
SkIPoint SkBenchmark::onGetSize() {
return SkIPoint::Make(640, 480);
}