DashBench.cpp revision fbfcd5602128ec010c82cb733c9cdc0a3254f9f3
14aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
24aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com/*
34aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com * Copyright 2011 Google Inc.
44aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *
54aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com * Use of this source code is governed by a BSD-style license that can be
64aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com * found in the LICENSE file.
74aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com */
84aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkBenchmark.h"
94aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkBitmap.h"
104aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkCanvas.h"
114aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkDashPathEffect.h"
124aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkPaint.h"
134aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkPath.h"
144aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkRandom.h"
154aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkString.h"
164aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#include "SkTDArray.h"
174aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
18ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com
194aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com/*
204aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *  Cases to consider:
214aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *
224aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *  1. antialiasing on/off (esp. width <= 1)
234aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *  2. strokewidth == 0, 1, 2
244aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *  3. hline, vline, diagonal, rect, oval
254aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com *  4. dots [1,1] ([N,N] where N=strokeWidth?) or arbitrary (e.g. [2,1] or [1,2,3,2])
264aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com */
274aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comstatic void path_hline(SkPath* path) {
284aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    path->moveTo(SkIntToScalar(10), SkIntToScalar(10));
294aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    path->lineTo(SkIntToScalar(600), SkIntToScalar(10));
304aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com}
314aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
324aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comclass DashBench : public SkBenchmark {
33ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comprotected:
3499a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org    SkString            fName;
354aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    SkTDArray<SkScalar> fIntervals;
3699a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org    int                 fWidth;
37a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com    SkPoint             fPts[2];
38a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com    bool                fDoClip;
394aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
404aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    enum {
414aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        N = SkBENCHLOOP(100)
424aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    };
434aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.compublic:
444ad22753504828342e47627b12210c2c47e7290areed@google.com    DashBench(void* param, const SkScalar intervals[], int count, int width,
454ad22753504828342e47627b12210c2c47e7290areed@google.com              bool doClip = false) : INHERITED(param) {
464aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        fIntervals.append(count, intervals);
4799a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org        for (int i = 0; i < count; ++i) {
4899a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org            fIntervals[i] *= width;
4999a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org        }
5099a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org        fWidth = width;
514ad22753504828342e47627b12210c2c47e7290areed@google.com        fName.printf("dash_%d_%s", width, doClip ? "clipped" : "noclip");
524ad22753504828342e47627b12210c2c47e7290areed@google.com        fDoClip = doClip;
53fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
54a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com        fPts[0].set(SkIntToScalar(10), SkIntToScalar(10));
55a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com        fPts[1].set(SkIntToScalar(600), SkIntToScalar(10));
564aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    }
574aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
584aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    virtual void makePath(SkPath* path) {
594aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        path_hline(path);
604aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    }
614aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
624aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comprotected:
634aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    virtual const char* onGetName() SK_OVERRIDE {
6499a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org        return fName.c_str();
654aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    }
664aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
674aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
684aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        SkPaint paint;
694aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        this->setupPaint(&paint);
704aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        paint.setStyle(SkPaint::kStroke_Style);
7199a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org        paint.setStrokeWidth(SkIntToScalar(fWidth));
724aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        paint.setAntiAlias(false);
734aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
744aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        SkPath path;
754aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        this->makePath(&path);
764aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
774aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        paint.setPathEffect(new SkDashPathEffect(fIntervals.begin(),
784aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com                                                 fIntervals.count(), 0))->unref();
794ad22753504828342e47627b12210c2c47e7290areed@google.com
804ad22753504828342e47627b12210c2c47e7290areed@google.com        if (fDoClip) {
814ad22753504828342e47627b12210c2c47e7290areed@google.com            SkRect r = path.getBounds();
824ad22753504828342e47627b12210c2c47e7290areed@google.com            r.inset(-SkIntToScalar(20), -SkIntToScalar(20));
834ad22753504828342e47627b12210c2c47e7290areed@google.com            // now move it so we don't intersect
844ad22753504828342e47627b12210c2c47e7290areed@google.com            r.offset(0, r.height() * 3 / 2);
854ad22753504828342e47627b12210c2c47e7290areed@google.com            canvas->clipRect(r);
864ad22753504828342e47627b12210c2c47e7290areed@google.com        }
874ad22753504828342e47627b12210c2c47e7290areed@google.com
88ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        this->handlePath(canvas, path, paint, N);
89ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    }
90ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com
91ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    virtual void handlePath(SkCanvas* canvas, const SkPath& path,
92ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                            const SkPaint& paint, int N) {
934aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        for (int i = 0; i < N; ++i) {
94a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com//            canvas->drawPoints(SkCanvas::kLines_PointMode, 2, fPts, paint);
954aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com            canvas->drawPath(path, paint);
964aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com        }
974aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    }
984aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
994aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comprivate:
1004aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com    typedef SkBenchmark INHERITED;
1014aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com};
1024aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
103ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comclass RectDashBench : public DashBench {
104ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.compublic:
1054ad22753504828342e47627b12210c2c47e7290areed@google.com    RectDashBench(void* param, const SkScalar intervals[], int count, int width, bool doClip = false)
106ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    : INHERITED(param, intervals, count, width) {
107ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        fName.append("_rect");
108ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    }
109fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
110ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comprotected:
111ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    virtual void handlePath(SkCanvas* canvas, const SkPath& path,
112ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                            const SkPaint& paint, int N) SK_OVERRIDE {
113ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        SkPoint pts[2];
114ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        if (!path.isLine(pts) || pts[0].fY != pts[1].fY) {
115ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            this->INHERITED::handlePath(canvas, path, paint, N);
116ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        } else {
117ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            SkRect rect;
118ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            rect.fLeft = pts[0].fX;
119ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            rect.fTop = pts[0].fY - paint.getStrokeWidth() / 2;
120ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            rect.fRight = rect.fLeft + SkIntToScalar(fWidth);
121ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            rect.fBottom = rect.fTop + paint.getStrokeWidth();
122fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
123ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            SkPaint p(paint);
124ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            p.setStyle(SkPaint::kFill_Style);
125ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            p.setPathEffect(NULL);
126fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
127ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            int count = SkScalarRoundToInt((pts[1].fX - pts[0].fX) / (2*fWidth));
128ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            SkScalar dx = SkIntToScalar(2 * fWidth);
129fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
130ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            for (int i = 0; i < N*10; ++i) {
131ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                SkRect r = rect;
132ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                for (int j = 0; j < count; ++j) {
133ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                    canvas->drawRect(r, p);
134ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                    r.offset(dx, 0);
135ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com                }
136ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com            }
137ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com        }
138ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    }
139fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
140ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comprivate:
141ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com    typedef DashBench INHERITED;
142ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com};
143ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com
144ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_unit_star(SkPath* path, int n) {
145ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkScalar rad = -SK_ScalarPI / 2;
146ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    const SkScalar drad = (n >> 1) * SK_ScalarPI * 2 / n;
147fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
148ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->moveTo(0, -SK_Scalar1);
149ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    for (int i = 1; i < n; i++) {
150ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        rad += drad;
151ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        SkScalar cosV, sinV = SkScalarSinCos(rad, &cosV);
152ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        path->lineTo(cosV, sinV);
153ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    }
154ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->close();
155ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}
156ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
157ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_poly(SkPath* path) {
158ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    make_unit_star(path, 9);
159ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkMatrix matrix;
160ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    matrix.setScale(SkIntToScalar(100), SkIntToScalar(100));
161ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->transform(matrix);
162ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}
163ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
164ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_quad(SkPath* path) {
165ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkScalar x0 = SkIntToScalar(10);
166ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkScalar y0 = SkIntToScalar(10);
167ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->moveTo(x0, y0);
168ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->quadTo(x0,                    y0 + 400 * SK_Scalar1,
169ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com                 x0 + 600 * SK_Scalar1, y0 + 400 * SK_Scalar1);
170ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}
171ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
172ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_cubic(SkPath* path) {
173ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkScalar x0 = SkIntToScalar(10);
174ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkScalar y0 = SkIntToScalar(10);
175ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->moveTo(x0, y0);
176ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    path->cubicTo(x0,                    y0 + 400 * SK_Scalar1,
177ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com                  x0 + 600 * SK_Scalar1, y0 + 400 * SK_Scalar1,
178ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com                  x0 + 600 * SK_Scalar1, y0);
179ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}
180ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
181ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comclass MakeDashBench : public SkBenchmark {
182ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkString fName;
183ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkPath   fPath;
184ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    SkAutoTUnref<SkPathEffect> fPE;
185ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
186ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    enum {
187ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        N = SkBENCHLOOP(400)
188ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    };
189ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
190ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.compublic:
191ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    MakeDashBench(void* param, void (*proc)(SkPath*), const char name[]) : INHERITED(param) {
192ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        fName.printf("makedash_%s", name);
193ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        proc(&fPath);
194fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
195ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        SkScalar vals[] = { SkIntToScalar(4), SkIntToScalar(4) };
196ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        fPE.reset(new SkDashPathEffect(vals, 2, 0));
197ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    }
198ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
199ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprotected:
200ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    virtual const char* onGetName() SK_OVERRIDE {
201ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        return fName.c_str();
202ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    }
203fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
204ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
205ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        SkPath dst;
206ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        for (int i = 0; i < N; ++i) {
207fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com            SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle);
208fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
209fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com            fPE->filterPath(&dst, fPath, &rec);
210ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com            dst.rewind();
211ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com        }
212ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    }
213fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
214ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprivate:
215ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com    typedef SkBenchmark INHERITED;
216ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com};
217ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com
2184aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com///////////////////////////////////////////////////////////////////////////////
2194aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
2204aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comstatic const SkScalar gDots[] = { SK_Scalar1, SK_Scalar1 };
2214aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
2224aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#define PARAM(array)    array, SK_ARRAY_COUNT(array)
2234aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
22499a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.orgstatic SkBenchmark* gF0(void* p) { return new DashBench(p, PARAM(gDots), 0); }
22599a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.orgstatic SkBenchmark* gF1(void* p) { return new DashBench(p, PARAM(gDots), 1); }
2264ad22753504828342e47627b12210c2c47e7290areed@google.comstatic SkBenchmark* gF2(void* p) { return new DashBench(p, PARAM(gDots), 1, true); }
2274ad22753504828342e47627b12210c2c47e7290areed@google.comstatic SkBenchmark* gF3(void* p) { return new DashBench(p, PARAM(gDots), 4); }
228ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic SkBenchmark* gF4(void* p) { return new MakeDashBench(p, make_poly, "poly"); }
229ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic SkBenchmark* gF5(void* p) { return new MakeDashBench(p, make_quad, "quad"); }
230ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic SkBenchmark* gF6(void* p) { return new MakeDashBench(p, make_cubic, "cubic"); }
2314aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com
2324aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comstatic BenchRegistry gR0(gF0);
23399a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.orgstatic BenchRegistry gR1(gF1);
23499a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.orgstatic BenchRegistry gR2(gF2);
235ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comstatic BenchRegistry gR3(gF3);
2364ad22753504828342e47627b12210c2c47e7290areed@google.comstatic BenchRegistry gR4(gF4);
237ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic BenchRegistry gR5(gF5);
238ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic BenchRegistry gR6(gF6);
239