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