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 */ 887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkBenchmark.h" 987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkBitmap.h" 1087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkCanvas.h" 1187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkColorPriv.h" 1287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkPaint.h" 131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkRandom.h" 1487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkShader.h" 1587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkString.h" 1687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerenum Flags { 1887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger kStroke_Flag = 1 << 0, 1987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger kBig_Flag = 1 << 1 2087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 2187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define FLAGS00 Flags(0) 2387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define FLAGS01 Flags(kStroke_Flag) 2487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define FLAGS10 Flags(kBig_Flag) 2587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define FLAGS11 Flags(kStroke_Flag | kBig_Flag) 2687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass PathBench : public SkBenchmark { 2887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkPaint fPaint; 2987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkString fName; 3087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger Flags fFlags; 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger enum { N = SkBENCHLOOP(1000) }; 3287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 3387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger PathBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) { 3487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fPaint.setStyle(flags & kStroke_Flag ? SkPaint::kStroke_Style : 3587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkPaint::kFill_Style); 3687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fPaint.setStrokeWidth(SkIntToScalar(5)); 3787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fPaint.setStrokeJoin(SkPaint::kBevel_Join); 3887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 3987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void appendName(SkString*) = 0; 4187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void makePath(SkPath*) = 0; 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual int complexity() { return 0; } 4387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprotected: 4587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual const char* onGetName() { 4687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fName.printf("path_%s_%s_", 4787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fFlags & kStroke_Flag ? "stroke" : "fill", 4887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger fFlags & kBig_Flag ? "big" : "small"); 4987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger this->appendName(&fName); 5087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger return fName.c_str(); 5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void onDraw(SkCanvas* canvas) { 5487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkPaint paint(fPaint); 5587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger this->setupPaint(&paint); 5687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkPath path; 5887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger this->makePath(&path); 5987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger if (fFlags & kBig_Flag) { 6087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMatrix m; 6187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m.setScale(SkIntToScalar(10), SkIntToScalar(10)); 6287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path.transform(m); 6387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 6487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 6587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int count = N; 6687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger if (fFlags & kBig_Flag) { 6787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger count >>= 2; 6887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger count >>= (3 * complexity()); 7087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 7187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger for (int i = 0; i < count; i++) { 7287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger canvas->drawPath(path, paint); 7387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 7487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 7587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 7687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 7787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef SkBenchmark INHERITED; 7887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 7987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 8087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass TrianglePathBench : public PathBench { 8187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 8287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger TrianglePathBench(void* param, Flags flags) : INHERITED(param, flags) {} 8387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 8487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void appendName(SkString* name) { 8587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger name->append("triangle"); 8687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 8787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void makePath(SkPath* path) { 8887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger static const int gCoord[] = { 8987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10, 10, 15, 5, 20, 20 9087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger }; 9187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->moveTo(SkIntToScalar(gCoord[0]), SkIntToScalar(gCoord[1])); 9287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(SkIntToScalar(gCoord[2]), SkIntToScalar(gCoord[3])); 9387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(SkIntToScalar(gCoord[4]), SkIntToScalar(gCoord[5])); 9487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->close(); 9587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 9687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 9787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef PathBench INHERITED; 9887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 9987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass RectPathBench : public PathBench { 10187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 10287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger RectPathBench(void* param, Flags flags) : INHERITED(param, flags) {} 10387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void appendName(SkString* name) { 10587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger name->append("rect"); 10687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 10787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void makePath(SkPath* path) { 10887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkRect r = { 10, 10, 20, 20 }; 10987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->addRect(r); 11087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 11187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 11287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef PathBench INHERITED; 11387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 11487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 11587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass OvalPathBench : public PathBench { 11687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 11787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger OvalPathBench(void* param, Flags flags) : INHERITED(param, flags) {} 11887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 11987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void appendName(SkString* name) { 12087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger name->append("oval"); 12187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 12287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void makePath(SkPath* path) { 12387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkRect r = { 10, 10, 20, 20 }; 12487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->addOval(r); 12587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 12687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 12787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef PathBench INHERITED; 12887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 12987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 13087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass SawToothPathBench : public PathBench { 13187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 13287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SawToothPathBench(void* param, Flags flags) : INHERITED(param, flags) {} 13387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 13487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void appendName(SkString* name) { 13587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger name->append("sawtooth"); 13687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 13787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void makePath(SkPath* path) { 13887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkScalar x = SkIntToScalar(20); 13987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkScalar y = SkIntToScalar(20); 14087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const SkScalar x0 = x; 14187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const SkScalar dx = SK_Scalar1 * 5; 14287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const SkScalar dy = SK_Scalar1 * 10; 14387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 14487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->moveTo(x, y); 14587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger for (int i = 0; i < 32; i++) { 14687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger x += dx; 14787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(x, y - dy); 14887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger x += dx; 14987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(x, y + dy); 15087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 15187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(x, y + 2 * dy); 15287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->lineTo(x0, y + 2 * dy); 15387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger path->close(); 15487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 1551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual int complexity() { return 1; } 15687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 15787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef PathBench INHERITED; 15887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 15987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass LongCurvedPathBench : public PathBench { 1611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic: 1621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger LongCurvedPathBench(void * param, Flags flags) 1631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger : INHERITED(param, flags) { 1641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void appendName(SkString* name) { 1671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger name->append("long_curved"); 1681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void makePath(SkPath* path) { 1701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkRandom rand (12); 1711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger int i; 1721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (i = 0; i < 100; i++) { 1731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path->quadTo(SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), 1741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480)), 1751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), 1761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480))); 1771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger path->close(); 1791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual int complexity() { return 2; } 1811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate: 1821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef PathBench INHERITED; 1831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 1841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1854f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerclass LongLinePathBench : public PathBench { 1864f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerpublic: 1874f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger LongLinePathBench(void * param, Flags flags) 1884f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger : INHERITED(param, flags) { 1894f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger } 1904f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 1914f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger virtual void appendName(SkString* name) { 1924f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger name->append("long_line"); 1934f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger } 1944f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger virtual void makePath(SkPath* path) { 1954f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger SkRandom rand; 1964f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger path->moveTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); 1974f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger for (size_t i = 1; i < 100; i++) { 1984f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger path->lineTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); 1994f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger } 2004f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger } 2014f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger virtual int complexity() { return 2; } 2024f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerprivate: 2034f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger typedef PathBench INHERITED; 2044f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger}; 2051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactT00(void* p) { return new TrianglePathBench(p, FLAGS00); } 20887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactT01(void* p) { return new TrianglePathBench(p, FLAGS01); } 20987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactT10(void* p) { return new TrianglePathBench(p, FLAGS10); } 21087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactT11(void* p) { return new TrianglePathBench(p, FLAGS11); } 21187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 21287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactR00(void* p) { return new RectPathBench(p, FLAGS00); } 21387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactR01(void* p) { return new RectPathBench(p, FLAGS01); } 21487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactR10(void* p) { return new RectPathBench(p, FLAGS10); } 21587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactR11(void* p) { return new RectPathBench(p, FLAGS11); } 21687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 21787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactO00(void* p) { return new OvalPathBench(p, FLAGS00); } 21887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactO01(void* p) { return new OvalPathBench(p, FLAGS01); } 21987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactO10(void* p) { return new OvalPathBench(p, FLAGS10); } 22087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactO11(void* p) { return new OvalPathBench(p, FLAGS11); } 22187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 22287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactS00(void* p) { return new SawToothPathBench(p, FLAGS00); } 22387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic SkBenchmark* FactS01(void* p) { return new SawToothPathBench(p, FLAGS01); } 22487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* FactLC00(void* p) { 2261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return new LongCurvedPathBench(p, FLAGS00); 2271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic SkBenchmark* FactLC01(void* p) { 2291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return new LongCurvedPathBench(p, FLAGS01); 2301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2324f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic SkBenchmark* FactLL00(void* p) { 2334f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger return new LongLinePathBench(p, FLAGS00); 2344f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger} 2354f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 2364f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic SkBenchmark* FactLL01(void* p) { 2374f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger return new LongLinePathBench(p, FLAGS01); 2384f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger} 2394f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 24087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegT00(FactT00); 24187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegT01(FactT01); 24287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegT10(FactT10); 24387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegT11(FactT11); 24487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 24587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegR00(FactR00); 24687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegR01(FactR01); 24787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegR10(FactR10); 24887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegR11(FactR11); 24987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 25087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegO00(FactO00); 25187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegO01(FactO01); 25287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegO10(FactO10); 25387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegO11(FactO11); 25487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 25587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegS00(FactS00); 25687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic BenchRegistry gRegS01(FactS01); 25787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gRegLC00(FactLC00); 2591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic BenchRegistry gRegLC01(FactLC01); 2601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2614f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic BenchRegistry gRegLL00(FactLL00); 2624f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerstatic BenchRegistry gRegLL01(FactLL01); 2634f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 264