11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
87cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkBenchmark.h"
97cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkPaint.h"
1032a0e74681142badb9efd90be3558bd9a943755eMike Reed#include "SkParse.h"
117cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
127cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedtemplate BenchRegistry* BenchRegistry::gHead;
137cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
1457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike ReedSkBenchmark::SkBenchmark(void* defineDict) {
1557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    fDict = reinterpret_cast<const SkTDict<const char*>*>(defineDict);
167cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    fForceAlpha = 0xFF;
177cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    fForceAA = true;
1854e0f955c21365271661cd92a29d06a847a18554Mike Reed    fDither = SkTriState::kDefault;
194c1037238c8ebcef8c75b5d43730ed308a11102cMike Reed    fHasStrokeWidth = false;
207cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
217cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
227cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedconst char* SkBenchmark::getName() {
237cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    return this->onGetName();
247cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
257cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
267cc0a6ac7b817b217dd614cba96fc533b32d505dMike ReedSkIPoint SkBenchmark::getSize() {
277cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    return this->onGetSize();
287cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
297cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
307cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkBenchmark::draw(SkCanvas* canvas) {
317cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    this->onDraw(canvas);
327cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
337cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
347cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkBenchmark::setupPaint(SkPaint* paint) {
357cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    paint->setAlpha(fForceAlpha);
367cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    paint->setAntiAlias(fForceAA);
377cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed    paint->setFilterBitmap(fForceFilter);
3854e0f955c21365271661cd92a29d06a847a18554Mike Reed
3954e0f955c21365271661cd92a29d06a847a18554Mike Reed    if (SkTriState::kDefault != fDither) {
4054e0f955c21365271661cd92a29d06a847a18554Mike Reed        paint->setDither(SkTriState::kTrue == fDither);
4154e0f955c21365271661cd92a29d06a847a18554Mike Reed    }
427cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
437cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
4457382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reedconst char* SkBenchmark::findDefine(const char* key) const {
4557382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    if (fDict) {
4657382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed        const char* value;
4757382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed        if (fDict->find(key, &value)) {
4857382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed            return value;
4957382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed        }
5057382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    }
5157382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed    return NULL;
5257382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed}
5357382d688c1d6928b1d9bbbaf27188d54dd9e002Mike Reed
5432a0e74681142badb9efd90be3558bd9a943755eMike Reedbool SkBenchmark::findDefine32(const char* key, int32_t* value) const {
5532a0e74681142badb9efd90be3558bd9a943755eMike Reed    const char* valueStr = this->findDefine(key);
5632a0e74681142badb9efd90be3558bd9a943755eMike Reed    if (valueStr) {
5732a0e74681142badb9efd90be3558bd9a943755eMike Reed        SkParse::FindS32(valueStr, value);
5832a0e74681142badb9efd90be3558bd9a943755eMike Reed        return true;
5932a0e74681142badb9efd90be3558bd9a943755eMike Reed    }
6032a0e74681142badb9efd90be3558bd9a943755eMike Reed    return false;
6132a0e74681142badb9efd90be3558bd9a943755eMike Reed}
6232a0e74681142badb9efd90be3558bd9a943755eMike Reed
6332a0e74681142badb9efd90be3558bd9a943755eMike Reedbool SkBenchmark::findDefineScalar(const char* key, SkScalar* value) const {
6432a0e74681142badb9efd90be3558bd9a943755eMike Reed    const char* valueStr = this->findDefine(key);
6532a0e74681142badb9efd90be3558bd9a943755eMike Reed    if (valueStr) {
6632a0e74681142badb9efd90be3558bd9a943755eMike Reed        SkParse::FindScalar(valueStr, value);
6732a0e74681142badb9efd90be3558bd9a943755eMike Reed        return true;
6832a0e74681142badb9efd90be3558bd9a943755eMike Reed    }
6932a0e74681142badb9efd90be3558bd9a943755eMike Reed    return false;
7032a0e74681142badb9efd90be3558bd9a943755eMike Reed}
7132a0e74681142badb9efd90be3558bd9a943755eMike Reed
727cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed///////////////////////////////////////////////////////////////////////////////
737cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed
747cc0a6ac7b817b217dd614cba96fc533b32d505dMike ReedSkIPoint SkBenchmark::onGetSize() {
7532a0e74681142badb9efd90be3558bd9a943755eMike Reed    return SkIPoint::Make(640, 480);
767cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}
77