1a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com/*
2a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com * Copyright 2013 Google Inc.
3a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com *
4a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com * Use of this source code is governed by a BSD-style license that can be
5a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com * found in the LICENSE file.
6a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com */
778dd91d1afab51dd7cae870d4864410ced839b4bcommit-bot@chromium.org
8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h"
9a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#include "SkCanvas.h"
10a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#include "SkPaint.h"
11a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#include "SkRandom.h"
12a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#include "SkShader.h"
13a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#include "SkString.h"
14a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
15a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comenum Flags {
16a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    kBig_Flag = 1 << 0,
17a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    kAA_Flag = 1 << 1
18a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
19a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
20a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#define FLAGS00 Flags(0)
21a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#define FLAGS01 Flags(kBig_Flag)
22a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#define FLAGS10 Flags(kAA_Flag)
23a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com#define FLAGS11 Flags(kBig_Flag | kAA_Flag)
24a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
25a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comstatic const int points[] = {
26a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    10, 10, 15, 5, 20, 20,
27a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    30, 5, 25, 20, 15, 12,
28a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    21, 21, 30, 30, 12, 4,
29a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    32, 28, 20, 18, 12, 10
30a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
31a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
32a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comstatic const int kMaxPathSize = 10;
33a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
34f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass HairlinePathBench : public Benchmark {
35a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.compublic:
36410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    HairlinePathBench(Flags flags) : fFlags(flags) {
37a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        fPaint.setStyle(SkPaint::kStroke_Style);
38a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        fPaint.setStrokeWidth(SkIntToScalar(0));
39a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
40a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
41a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    virtual void appendName(SkString*) = 0;
42a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    virtual void makePath(SkPath*) = 0;
43a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
44a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprotected:
4536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const char* onGetName() override {
46a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        fName.printf("path_hairline_%s_%s_",
47a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                     fFlags & kBig_Flag ? "big" : "small",
48a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                     fFlags & kAA_Flag ? "AA" : "noAA");
49a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        this->appendName(&fName);
50a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        return fName.c_str();
51a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
52a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
5336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(const int loops, SkCanvas* canvas) override {
54a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        SkPaint paint(fPaint);
55a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        this->setupPaint(&paint);
56a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
57a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        paint.setAntiAlias(fFlags & kAA_Flag ? true : false);
58f7d01ce1849aa029743e9e0b810a8f955ad99f28skia.committer@gmail.com
59a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        SkPath path;
60a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        this->makePath(&path);
61a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        if (fFlags & kBig_Flag) {
621d24b8dfe9aac9cadaf3914b8574a4ff6e9bc19drobertphillips            const SkMatrix m = SkMatrix::MakeScale(SkIntToScalar(3), SkIntToScalar(3));
63a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path.transform(m);
64a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
65a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
663361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org        for (int i = 0; i < loops; i++) {
679645ce17cdc451435877e60693aa0ef22110eee2reed            for (int j = 0; j < 100; ++j) {
689645ce17cdc451435877e60693aa0ef22110eee2reed                canvas->drawPath(path, paint);
699645ce17cdc451435877e60693aa0ef22110eee2reed            }
70a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
71a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
72a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
73a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprivate:
74a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    SkPaint     fPaint;
75a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    SkString    fName;
76a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    Flags       fFlags;
77f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
78a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
79a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
80a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comclass LinePathBench : public HairlinePathBench {
81a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.compublic:
82410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    LinePathBench(Flags flags) : INHERITED(flags) {}
83a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
8436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void appendName(SkString* name) override {
85a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        name->append("line");
86a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
8736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void makePath(SkPath* path) override {
88e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
89a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int size = SK_ARRAY_COUNT(points);
90a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int hSize = size / 2;
91a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        for (int i = 0; i < kMaxPathSize; ++i) {
92a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int xTrans = 10 + 40 * (i%(kMaxPathSize/2));
93a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int yTrans = 0;
94a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            if (i > kMaxPathSize/2 - 1) {
95a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                yTrans = 40;
96a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            }
97a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base1 = 2 * rand.nextULessThan(hSize);
98a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base2 = 2 * rand.nextULessThan(hSize);
99a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base3 = 2 * rand.nextULessThan(hSize);
100a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->moveTo(SkIntToScalar(points[base1] + xTrans),
101a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base1+1] + yTrans));
102a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->lineTo(SkIntToScalar(points[base2] + xTrans),
103a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base2+1] + yTrans));
104a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->lineTo(SkIntToScalar(points[base3] + xTrans),
105a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3+1] + yTrans));
106a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
107a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
108a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprivate:
109a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    typedef HairlinePathBench INHERITED;
110a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
111a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
112a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comclass QuadPathBench : public HairlinePathBench {
113a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.compublic:
114410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    QuadPathBench(Flags flags) : INHERITED(flags) {}
115a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
11636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void appendName(SkString* name) override {
117a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        name->append("quad");
118a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
11936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void makePath(SkPath* path) override {
120e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
121a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int size = SK_ARRAY_COUNT(points);
122a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int hSize = size / 2;
123a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        for (int i = 0; i < kMaxPathSize; ++i) {
124a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int xTrans = 10 + 40 * (i%(kMaxPathSize/2));
125a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int yTrans = 0;
126a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            if (i > kMaxPathSize/2 - 1) {
127a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                yTrans = 40;
128a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            }
129a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base1 = 2 * rand.nextULessThan(hSize);
130a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base2 = 2 * rand.nextULessThan(hSize);
131a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base3 = 2 * rand.nextULessThan(hSize);
132a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->moveTo(SkIntToScalar(points[base1] + xTrans),
133a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base1+1] + yTrans));
134a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->quadTo(SkIntToScalar(points[base2] + xTrans),
135a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base2+1] + yTrans),
136a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3] + xTrans),
137a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3+1] + yTrans));
138a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
139a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
140a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprivate:
141a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    typedef HairlinePathBench INHERITED;
142a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
143a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
144a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comclass ConicPathBench : public HairlinePathBench {
145a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.compublic:
146410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    ConicPathBench(Flags flags) : INHERITED(flags) {}
147a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
14836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void appendName(SkString* name) override {
149a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        name->append("conic");
150a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
15136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void makePath(SkPath* path) override {
152e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
153e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom randWeight;
154a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int size = SK_ARRAY_COUNT(points);
155a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int hSize = size / 2;
156a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        for (int i = 0; i < kMaxPathSize; ++i) {
157a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int xTrans = 10 + 40 * (i%(kMaxPathSize/2));
158a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int yTrans = 0;
159a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            if (i > kMaxPathSize/2 - 1) {
160a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                yTrans = 40;
161a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            }
162a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base1 = 2 * rand.nextULessThan(hSize);
163a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base2 = 2 * rand.nextULessThan(hSize);
164a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base3 = 2 * rand.nextULessThan(hSize);
165a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            float weight = randWeight.nextRangeF(0.0f, 2.0f);
166a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->moveTo(SkIntToScalar(points[base1] + xTrans),
167a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base1+1] + yTrans));
168a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->conicTo(SkIntToScalar(points[base2] + xTrans),
169a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                          SkIntToScalar(points[base2+1] + yTrans),
170a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3] + xTrans),
171a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3+1] + yTrans),
172a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         weight);
173a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
174a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
17578dd91d1afab51dd7cae870d4864410ced839b4bcommit-bot@chromium.org
176a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprivate:
177a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    typedef HairlinePathBench INHERITED;
178a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
179a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
180a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comclass CubicPathBench : public HairlinePathBench {
181a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.compublic:
182410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com    CubicPathBench(Flags flags) : INHERITED(flags) {}
183a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
18436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void appendName(SkString* name) override {
185a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        name->append("cubic");
186a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
18736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void makePath(SkPath* path) override {
188e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
189a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int size = SK_ARRAY_COUNT(points);
190a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        int hSize = size / 2;
191a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        for (int i = 0; i < kMaxPathSize; ++i) {
192a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int xTrans = 10 + 40 * (i%(kMaxPathSize/2));
193a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int yTrans = 0;
194a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            if (i > kMaxPathSize/2 - 1) {
195a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                yTrans = 40;
196a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            }
197a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base1 = 2 * rand.nextULessThan(hSize);
198a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base2 = 2 * rand.nextULessThan(hSize);
199a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base3 = 2 * rand.nextULessThan(hSize);
200a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            int base4 = 2 * rand.nextULessThan(hSize);
201a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->moveTo(SkIntToScalar(points[base1] + xTrans),
202a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base1+1] + yTrans));
203a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com            path->cubicTo(SkIntToScalar(points[base2] + xTrans),
204a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base2+1] + yTrans),
205a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3] + xTrans),
206a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base3+1] + yTrans),
207a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base4] + xTrans),
208a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com                         SkIntToScalar(points[base4+1] + yTrans));
209a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com        }
210a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    }
211a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.comprivate:
212a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com    typedef HairlinePathBench INHERITED;
213a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com};
214a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
215a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com// FLAG00 - no AA, small
216a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com// FLAG01 - no AA, small
217a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com// FLAG10 - AA, big
218a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com// FLAG11 - AA, big
219a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
220410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new LinePathBench(FLAGS00); )
221410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new LinePathBench(FLAGS01); )
222410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new LinePathBench(FLAGS10); )
223410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new LinePathBench(FLAGS11); )
224a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
225410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new QuadPathBench(FLAGS00); )
226410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new QuadPathBench(FLAGS01); )
227410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new QuadPathBench(FLAGS10); )
228410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new QuadPathBench(FLAGS11); )
229a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com
230a308883003e36cbff4d1c4c2d2e7fceb3eea95b1egdaniel@google.com// Don't have default path renderer for conics yet on GPU, so must use AA
231410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com// DEF_BENCH( return new ConicPathBench(FLAGS00); )
232410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com// DEF_BENCH( return new ConicPathBench(FLAGS01); )
233410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ConicPathBench(FLAGS10); )
234410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ConicPathBench(FLAGS11); )
235410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com
236410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new CubicPathBench(FLAGS00); )
237410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new CubicPathBench(FLAGS01); )
238410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new CubicPathBench(FLAGS10); )
239410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new CubicPathBench(FLAGS11); )
240