1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "bench/Benchmark.h"
9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h"
10cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h"
11cb93a386Sopenharmony_ci#include "include/core/SkPaint.h"
12cb93a386Sopenharmony_ci#include "include/core/SkShader.h"
13cb93a386Sopenharmony_ci#include "include/core/SkString.h"
14cb93a386Sopenharmony_ci#include "include/effects/SkGradientShader.h"
15cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h"
16cb93a386Sopenharmony_ci#include "tools/flags/CommandLineFlags.h"
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_cistatic DEFINE_double(strokeWidth, -1.0, "If set, use this stroke width in RectBench.");
19cb93a386Sopenharmony_ci
20cb93a386Sopenharmony_ciclass RectBench : public Benchmark {
21cb93a386Sopenharmony_cipublic:
22cb93a386Sopenharmony_ci    int fShift, fStroke;
23cb93a386Sopenharmony_ci    enum {
24cb93a386Sopenharmony_ci        W = 640,
25cb93a386Sopenharmony_ci        H = 480,
26cb93a386Sopenharmony_ci        N = 300,
27cb93a386Sopenharmony_ci    };
28cb93a386Sopenharmony_ci    SkRect  fRects[N];
29cb93a386Sopenharmony_ci    SkColor fColors[N];
30cb93a386Sopenharmony_ci    bool    fAA;
31cb93a386Sopenharmony_ci    bool    fPerspective;
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_ci    RectBench(int shift, int stroke = 0, bool aa = true, bool perspective = false)
34cb93a386Sopenharmony_ci        : fShift(shift)
35cb93a386Sopenharmony_ci        , fStroke(stroke)
36cb93a386Sopenharmony_ci        , fAA(aa)
37cb93a386Sopenharmony_ci        , fPerspective(perspective) {}
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_ci    const char* computeName(const char root[]) {
40cb93a386Sopenharmony_ci        fBaseName.printf("%s_%d", root, fShift);
41cb93a386Sopenharmony_ci        if (fStroke > 0) {
42cb93a386Sopenharmony_ci            fBaseName.appendf("_stroke_%d", fStroke);
43cb93a386Sopenharmony_ci        }
44cb93a386Sopenharmony_ci        if (fAA) {
45cb93a386Sopenharmony_ci            fBaseName.appendf("_aa");
46cb93a386Sopenharmony_ci        } else {
47cb93a386Sopenharmony_ci            fBaseName.appendf("_bw");
48cb93a386Sopenharmony_ci        }
49cb93a386Sopenharmony_ci        if (fPerspective) {
50cb93a386Sopenharmony_ci            fBaseName.appendf("_persp");
51cb93a386Sopenharmony_ci        }
52cb93a386Sopenharmony_ci        return fBaseName.c_str();
53cb93a386Sopenharmony_ci    }
54cb93a386Sopenharmony_ci
55cb93a386Sopenharmony_ciprotected:
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_ci    virtual void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) {
58cb93a386Sopenharmony_ci        c->drawRect(r, p);
59cb93a386Sopenharmony_ci    }
60cb93a386Sopenharmony_ci
61cb93a386Sopenharmony_ci    const char* onGetName() override { return computeName("rects"); }
62cb93a386Sopenharmony_ci
63cb93a386Sopenharmony_ci    void onDelayedSetup() override {
64cb93a386Sopenharmony_ci        SkRandom rand;
65cb93a386Sopenharmony_ci        const SkScalar offset = SK_Scalar1/3;
66cb93a386Sopenharmony_ci        for (int i = 0; i < N; i++) {
67cb93a386Sopenharmony_ci            int x = rand.nextU() % W;
68cb93a386Sopenharmony_ci            int y = rand.nextU() % H;
69cb93a386Sopenharmony_ci            int w = rand.nextU() % W;
70cb93a386Sopenharmony_ci            int h = rand.nextU() % H;
71cb93a386Sopenharmony_ci            w >>= fShift;
72cb93a386Sopenharmony_ci            h >>= fShift;
73cb93a386Sopenharmony_ci            x -= w/2;
74cb93a386Sopenharmony_ci            y -= h/2;
75cb93a386Sopenharmony_ci            fRects[i].setXYWH(SkIntToScalar(x), SkIntToScalar(y),
76cb93a386Sopenharmony_ci                              SkIntToScalar(w), SkIntToScalar(h));
77cb93a386Sopenharmony_ci            fRects[i].offset(offset, offset);
78cb93a386Sopenharmony_ci            fColors[i] = rand.nextU() | 0xFF808080;
79cb93a386Sopenharmony_ci        }
80cb93a386Sopenharmony_ci    }
81cb93a386Sopenharmony_ci
82cb93a386Sopenharmony_ci    void onDraw(int loops, SkCanvas* canvas) override {
83cb93a386Sopenharmony_ci        SkPaint paint;
84cb93a386Sopenharmony_ci        if (fStroke > 0) {
85cb93a386Sopenharmony_ci            paint.setStyle(SkPaint::kStroke_Style);
86cb93a386Sopenharmony_ci            paint.setStrokeWidth(SkIntToScalar(fStroke));
87cb93a386Sopenharmony_ci        }
88cb93a386Sopenharmony_ci        if (fPerspective) {
89cb93a386Sopenharmony_ci            // Apply some fixed perspective to change how ops may draw the rects
90cb93a386Sopenharmony_ci            SkMatrix perspective;
91cb93a386Sopenharmony_ci            perspective.setIdentity();
92cb93a386Sopenharmony_ci            perspective.setPerspX(1e-4f);
93cb93a386Sopenharmony_ci            perspective.setPerspY(1e-3f);
94cb93a386Sopenharmony_ci            perspective.setSkewX(0.1f);
95cb93a386Sopenharmony_ci            canvas->concat(perspective);
96cb93a386Sopenharmony_ci        }
97cb93a386Sopenharmony_ci        for (int i = 0; i < loops; i++) {
98cb93a386Sopenharmony_ci            paint.setColor(fColors[i % N]);
99cb93a386Sopenharmony_ci            this->setupPaint(&paint);
100cb93a386Sopenharmony_ci            this->drawThisRect(canvas, fRects[i % N], paint);
101cb93a386Sopenharmony_ci        }
102cb93a386Sopenharmony_ci    }
103cb93a386Sopenharmony_ci
104cb93a386Sopenharmony_ci    void setupPaint(SkPaint* paint) override {
105cb93a386Sopenharmony_ci        this->INHERITED::setupPaint(paint);
106cb93a386Sopenharmony_ci        paint->setAntiAlias(fAA);
107cb93a386Sopenharmony_ci    }
108cb93a386Sopenharmony_ci
109cb93a386Sopenharmony_ciprivate:
110cb93a386Sopenharmony_ci    SkString fBaseName;
111cb93a386Sopenharmony_ci    using INHERITED = Benchmark;
112cb93a386Sopenharmony_ci};
113cb93a386Sopenharmony_ci
114cb93a386Sopenharmony_ciclass SrcModeRectBench : public RectBench {
115cb93a386Sopenharmony_cipublic:
116cb93a386Sopenharmony_ci    SrcModeRectBench() : INHERITED(1, 0) {
117cb93a386Sopenharmony_ci        fMode = SkBlendMode::kSrc;
118cb93a386Sopenharmony_ci    }
119cb93a386Sopenharmony_ci
120cb93a386Sopenharmony_ciprotected:
121cb93a386Sopenharmony_ci    void setupPaint(SkPaint* paint) override {
122cb93a386Sopenharmony_ci        this->INHERITED::setupPaint(paint);
123cb93a386Sopenharmony_ci        // srcmode is most interesting when we're not opaque
124cb93a386Sopenharmony_ci        paint->setAlpha(0x80);
125cb93a386Sopenharmony_ci        paint->setBlendMode(fMode);
126cb93a386Sopenharmony_ci    }
127cb93a386Sopenharmony_ci
128cb93a386Sopenharmony_ci    const char* onGetName() override {
129cb93a386Sopenharmony_ci        fName.set(this->INHERITED::onGetName());
130cb93a386Sopenharmony_ci        fName.prepend("srcmode_");
131cb93a386Sopenharmony_ci        return fName.c_str();
132cb93a386Sopenharmony_ci    }
133cb93a386Sopenharmony_ci
134cb93a386Sopenharmony_ciprivate:
135cb93a386Sopenharmony_ci    SkBlendMode fMode;
136cb93a386Sopenharmony_ci    SkString fName;
137cb93a386Sopenharmony_ci
138cb93a386Sopenharmony_ci    using INHERITED = RectBench;
139cb93a386Sopenharmony_ci};
140cb93a386Sopenharmony_ci
141cb93a386Sopenharmony_ciclass TransparentRectBench : public RectBench {
142cb93a386Sopenharmony_cipublic:
143cb93a386Sopenharmony_ci    TransparentRectBench() : INHERITED(1, 0) {}
144cb93a386Sopenharmony_ci
145cb93a386Sopenharmony_ciprotected:
146cb93a386Sopenharmony_ci    void setupPaint(SkPaint* paint) override {
147cb93a386Sopenharmony_ci        this->INHERITED::setupPaint(paint);
148cb93a386Sopenharmony_ci        // draw non opaque rect
149cb93a386Sopenharmony_ci        paint->setAlpha(0x80);
150cb93a386Sopenharmony_ci    }
151cb93a386Sopenharmony_ci
152cb93a386Sopenharmony_ci    const char* onGetName() override {
153cb93a386Sopenharmony_ci        fName.set(this->INHERITED::onGetName());
154cb93a386Sopenharmony_ci        fName.prepend("transparent_");
155cb93a386Sopenharmony_ci        return fName.c_str();
156cb93a386Sopenharmony_ci    }
157cb93a386Sopenharmony_ci
158cb93a386Sopenharmony_ciprivate:
159cb93a386Sopenharmony_ci    SkString fName;
160cb93a386Sopenharmony_ci    using INHERITED = RectBench;
161cb93a386Sopenharmony_ci};
162cb93a386Sopenharmony_ci
163cb93a386Sopenharmony_ci// Adds a shader to the paint that requires local coordinates to be used
164cb93a386Sopenharmony_ciclass LocalCoordsRectBench : public RectBench {
165cb93a386Sopenharmony_cipublic:
166cb93a386Sopenharmony_ci    LocalCoordsRectBench(bool aa, bool perspective = false) : INHERITED(1, 0, aa, perspective) { }
167cb93a386Sopenharmony_ci
168cb93a386Sopenharmony_ciprotected:
169cb93a386Sopenharmony_ci    void onDelayedSetup() override {
170cb93a386Sopenharmony_ci        this->INHERITED::onDelayedSetup();
171cb93a386Sopenharmony_ci        // Create the shader once, so that isn't included in the timing
172cb93a386Sopenharmony_ci        SkPoint pts[2] = { {0.f, 0.f}, {50.f, 50.f} };
173cb93a386Sopenharmony_ci        SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE };
174cb93a386Sopenharmony_ci        fShader = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp);
175cb93a386Sopenharmony_ci    }
176cb93a386Sopenharmony_ci
177cb93a386Sopenharmony_ci    void setupPaint(SkPaint* paint) override {
178cb93a386Sopenharmony_ci        this->INHERITED::setupPaint(paint);
179cb93a386Sopenharmony_ci        paint->setShader(fShader);
180cb93a386Sopenharmony_ci    }
181cb93a386Sopenharmony_ci
182cb93a386Sopenharmony_ci    const char* onGetName() override {
183cb93a386Sopenharmony_ci        fName.set(this->INHERITED::onGetName());
184cb93a386Sopenharmony_ci        fName.append("_localcoords");
185cb93a386Sopenharmony_ci        return fName.c_str();
186cb93a386Sopenharmony_ci    }
187cb93a386Sopenharmony_ci
188cb93a386Sopenharmony_ciprivate:
189cb93a386Sopenharmony_ci    SkString fName;
190cb93a386Sopenharmony_ci    sk_sp<SkShader> fShader;
191cb93a386Sopenharmony_ci
192cb93a386Sopenharmony_ci    using INHERITED = RectBench;
193cb93a386Sopenharmony_ci};
194cb93a386Sopenharmony_ci
195cb93a386Sopenharmony_ci
196cb93a386Sopenharmony_ciclass OvalBench : public RectBench {
197cb93a386Sopenharmony_cipublic:
198cb93a386Sopenharmony_ci    OvalBench(int shift, int stroke = 0) : RectBench(shift, stroke) {}
199cb93a386Sopenharmony_ciprotected:
200cb93a386Sopenharmony_ci    void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) override {
201cb93a386Sopenharmony_ci        c->drawOval(r, p);
202cb93a386Sopenharmony_ci    }
203cb93a386Sopenharmony_ci    const char* onGetName() override { return computeName("ovals"); }
204cb93a386Sopenharmony_ci};
205cb93a386Sopenharmony_ci
206cb93a386Sopenharmony_ciclass RRectBench : public RectBench {
207cb93a386Sopenharmony_cipublic:
208cb93a386Sopenharmony_ci    RRectBench(int shift, int stroke = 0) : RectBench(shift, stroke) {}
209cb93a386Sopenharmony_ciprotected:
210cb93a386Sopenharmony_ci    void drawThisRect(SkCanvas* c, const SkRect& r, const SkPaint& p) override {
211cb93a386Sopenharmony_ci        c->drawRoundRect(r, r.width() / 4, r.height() / 4, p);
212cb93a386Sopenharmony_ci    }
213cb93a386Sopenharmony_ci    const char* onGetName() override { return computeName("rrects"); }
214cb93a386Sopenharmony_ci};
215cb93a386Sopenharmony_ci
216cb93a386Sopenharmony_ciclass PointsBench : public RectBench {
217cb93a386Sopenharmony_cipublic:
218cb93a386Sopenharmony_ci    SkCanvas::PointMode fMode;
219cb93a386Sopenharmony_ci
220cb93a386Sopenharmony_ci    PointsBench(SkCanvas::PointMode mode, const char* name)
221cb93a386Sopenharmony_ci        : RectBench(2)
222cb93a386Sopenharmony_ci        , fMode(mode) {
223cb93a386Sopenharmony_ci        fName = name;
224cb93a386Sopenharmony_ci    }
225cb93a386Sopenharmony_ci
226cb93a386Sopenharmony_ciprotected:
227cb93a386Sopenharmony_ci    void onDraw(int loops, SkCanvas* canvas) override {
228cb93a386Sopenharmony_ci        SkScalar gSizes[] = {
229cb93a386Sopenharmony_ci            SkIntToScalar(7), 0
230cb93a386Sopenharmony_ci        };
231cb93a386Sopenharmony_ci        size_t sizes = SK_ARRAY_COUNT(gSizes);
232cb93a386Sopenharmony_ci
233cb93a386Sopenharmony_ci        if (FLAGS_strokeWidth >= 0) {
234cb93a386Sopenharmony_ci            gSizes[0] = (SkScalar)FLAGS_strokeWidth;
235cb93a386Sopenharmony_ci            sizes = 1;
236cb93a386Sopenharmony_ci        }
237cb93a386Sopenharmony_ci
238cb93a386Sopenharmony_ci        SkPaint paint;
239cb93a386Sopenharmony_ci        paint.setStrokeCap(SkPaint::kRound_Cap);
240cb93a386Sopenharmony_ci
241cb93a386Sopenharmony_ci        for (int loop = 0; loop < loops; loop++) {
242cb93a386Sopenharmony_ci            for (size_t i = 0; i < sizes; i++) {
243cb93a386Sopenharmony_ci                paint.setStrokeWidth(gSizes[i]);
244cb93a386Sopenharmony_ci                this->setupPaint(&paint);
245cb93a386Sopenharmony_ci                canvas->drawPoints(fMode, N * 2, reinterpret_cast<SkPoint*>(fRects), paint);
246cb93a386Sopenharmony_ci                paint.setColor(fColors[i % N]);
247cb93a386Sopenharmony_ci            }
248cb93a386Sopenharmony_ci        }
249cb93a386Sopenharmony_ci    }
250cb93a386Sopenharmony_ci    const char* onGetName() override { return fName.c_str(); }
251cb93a386Sopenharmony_ci
252cb93a386Sopenharmony_ciprivate:
253cb93a386Sopenharmony_ci    SkString fName;
254cb93a386Sopenharmony_ci
255cb93a386Sopenharmony_ci};
256cb93a386Sopenharmony_ci
257cb93a386Sopenharmony_ci/*******************************************************************************
258cb93a386Sopenharmony_ci * to bench BlitMask [Opaque, Black, color, shader]
259cb93a386Sopenharmony_ci *******************************************************************************/
260cb93a386Sopenharmony_ci
261cb93a386Sopenharmony_ciclass BlitMaskBench : public RectBench {
262cb93a386Sopenharmony_cipublic:
263cb93a386Sopenharmony_ci    enum kMaskType {
264cb93a386Sopenharmony_ci        kMaskOpaque = 0,
265cb93a386Sopenharmony_ci        kMaskBlack,
266cb93a386Sopenharmony_ci        kMaskColor,
267cb93a386Sopenharmony_ci        KMaskShader
268cb93a386Sopenharmony_ci    };
269cb93a386Sopenharmony_ci    SkCanvas::PointMode fMode;
270cb93a386Sopenharmony_ci
271cb93a386Sopenharmony_ci    BlitMaskBench(SkCanvas::PointMode mode,
272cb93a386Sopenharmony_ci                  BlitMaskBench::kMaskType type, const char* name) :
273cb93a386Sopenharmony_ci        RectBench(2), fMode(mode), _type(type) {
274cb93a386Sopenharmony_ci        fName = name;
275cb93a386Sopenharmony_ci    }
276cb93a386Sopenharmony_ci
277cb93a386Sopenharmony_ciprotected:
278cb93a386Sopenharmony_ci    void onDraw(int loops, SkCanvas* canvas) override {
279cb93a386Sopenharmony_ci        SkScalar gSizes[] = {
280cb93a386Sopenharmony_ci            SkIntToScalar(13), SkIntToScalar(24)
281cb93a386Sopenharmony_ci        };
282cb93a386Sopenharmony_ci        size_t sizes = SK_ARRAY_COUNT(gSizes);
283cb93a386Sopenharmony_ci
284cb93a386Sopenharmony_ci        if (FLAGS_strokeWidth >= 0) {
285cb93a386Sopenharmony_ci            gSizes[0] = (SkScalar)FLAGS_strokeWidth;
286cb93a386Sopenharmony_ci            sizes = 1;
287cb93a386Sopenharmony_ci        }
288cb93a386Sopenharmony_ci        SkRandom rand;
289cb93a386Sopenharmony_ci        SkColor color = 0xFF000000;
290cb93a386Sopenharmony_ci        U8CPU alpha = 0xFF;
291cb93a386Sopenharmony_ci        SkPaint paint;
292cb93a386Sopenharmony_ci        paint.setStrokeCap(SkPaint::kRound_Cap);
293cb93a386Sopenharmony_ci        if (_type == KMaskShader) {
294cb93a386Sopenharmony_ci            SkBitmap srcBM;
295cb93a386Sopenharmony_ci            srcBM.allocN32Pixels(10, 1);
296cb93a386Sopenharmony_ci            srcBM.eraseColor(0xFF00FF00);
297cb93a386Sopenharmony_ci
298cb93a386Sopenharmony_ci            paint.setShader(srcBM.makeShader(SkSamplingOptions()));
299cb93a386Sopenharmony_ci        }
300cb93a386Sopenharmony_ci        for (int loop = 0; loop < loops; loop++) {
301cb93a386Sopenharmony_ci            for (size_t i = 0; i < sizes; i++) {
302cb93a386Sopenharmony_ci                switch (_type) {
303cb93a386Sopenharmony_ci                    case kMaskOpaque:
304cb93a386Sopenharmony_ci                        color = fColors[i];
305cb93a386Sopenharmony_ci                        alpha = 0xFF;
306cb93a386Sopenharmony_ci                        break;
307cb93a386Sopenharmony_ci                    case kMaskBlack:
308cb93a386Sopenharmony_ci                        alpha = 0xFF;
309cb93a386Sopenharmony_ci                        color = 0xFF000000;
310cb93a386Sopenharmony_ci                        break;
311cb93a386Sopenharmony_ci                    case kMaskColor:
312cb93a386Sopenharmony_ci                        color = fColors[i];
313cb93a386Sopenharmony_ci                        alpha = rand.nextU() & 255;
314cb93a386Sopenharmony_ci                        break;
315cb93a386Sopenharmony_ci                    case KMaskShader:
316cb93a386Sopenharmony_ci                        break;
317cb93a386Sopenharmony_ci                }
318cb93a386Sopenharmony_ci                paint.setStrokeWidth(gSizes[i]);
319cb93a386Sopenharmony_ci                this->setupPaint(&paint);
320cb93a386Sopenharmony_ci                paint.setColor(color);
321cb93a386Sopenharmony_ci                paint.setAlpha(alpha);
322cb93a386Sopenharmony_ci                canvas->drawPoints(fMode, N * 2, reinterpret_cast<SkPoint*>(fRects), paint);
323cb93a386Sopenharmony_ci           }
324cb93a386Sopenharmony_ci        }
325cb93a386Sopenharmony_ci    }
326cb93a386Sopenharmony_ci    const char* onGetName() override { return fName.c_str(); }
327cb93a386Sopenharmony_ci
328cb93a386Sopenharmony_ciprivate:
329cb93a386Sopenharmony_ci    using INHERITED = RectBench;
330cb93a386Sopenharmony_ci    kMaskType _type;
331cb93a386Sopenharmony_ci    SkString fName;
332cb93a386Sopenharmony_ci};
333cb93a386Sopenharmony_ci
334cb93a386Sopenharmony_ci// AA rects
335cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 0, true);)
336cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 4, true);)
337cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(3, 0, true);)
338cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(3, 4, true);)
339cb93a386Sopenharmony_ci// Non-AA rects
340cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 0, false);)
341cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 4, false);)
342cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(3, 0, false);)
343cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(3, 4, false);)
344cb93a386Sopenharmony_ci
345cb93a386Sopenharmony_ciDEF_BENCH(return new OvalBench(1);)
346cb93a386Sopenharmony_ciDEF_BENCH(return new OvalBench(3);)
347cb93a386Sopenharmony_ciDEF_BENCH(return new OvalBench(1, 4);)
348cb93a386Sopenharmony_ciDEF_BENCH(return new OvalBench(3, 4);)
349cb93a386Sopenharmony_ciDEF_BENCH(return new RRectBench(1);)
350cb93a386Sopenharmony_ciDEF_BENCH(return new RRectBench(1, 4);)
351cb93a386Sopenharmony_ciDEF_BENCH(return new RRectBench(3);)
352cb93a386Sopenharmony_ciDEF_BENCH(return new RRectBench(3, 4);)
353cb93a386Sopenharmony_ciDEF_BENCH(return new PointsBench(SkCanvas::kPoints_PointMode, "points");)
354cb93a386Sopenharmony_ciDEF_BENCH(return new PointsBench(SkCanvas::kLines_PointMode, "lines");)
355cb93a386Sopenharmony_ciDEF_BENCH(return new PointsBench(SkCanvas::kPolygon_PointMode, "polygon");)
356cb93a386Sopenharmony_ci
357cb93a386Sopenharmony_ciDEF_BENCH(return new SrcModeRectBench();)
358cb93a386Sopenharmony_ci
359cb93a386Sopenharmony_ciDEF_BENCH(return new TransparentRectBench();)
360cb93a386Sopenharmony_ci
361cb93a386Sopenharmony_ciDEF_BENCH(return new LocalCoordsRectBench(true);)
362cb93a386Sopenharmony_ciDEF_BENCH(return new LocalCoordsRectBench(false);)
363cb93a386Sopenharmony_ci
364cb93a386Sopenharmony_ci// Perspective rects
365cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 0, true, true);)
366cb93a386Sopenharmony_ciDEF_BENCH(return new RectBench(1, 0, false, true);)
367cb93a386Sopenharmony_ciDEF_BENCH(return new LocalCoordsRectBench(true, true);)
368cb93a386Sopenharmony_ciDEF_BENCH(return new LocalCoordsRectBench(false, true);)
369cb93a386Sopenharmony_ci
370cb93a386Sopenharmony_ci/* init the blitmask bench
371cb93a386Sopenharmony_ci */
372cb93a386Sopenharmony_ciDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode,
373cb93a386Sopenharmony_ci                                   BlitMaskBench::kMaskOpaque,
374cb93a386Sopenharmony_ci                                   "maskopaque");)
375cb93a386Sopenharmony_ciDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode,
376cb93a386Sopenharmony_ci                                   BlitMaskBench::kMaskBlack,
377cb93a386Sopenharmony_ci                                   "maskblack");)
378cb93a386Sopenharmony_ciDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode,
379cb93a386Sopenharmony_ci                                   BlitMaskBench::kMaskColor,
380cb93a386Sopenharmony_ci                                   "maskcolor");)
381cb93a386Sopenharmony_ciDEF_BENCH(return new BlitMaskBench(SkCanvas::kPoints_PointMode,
382cb93a386Sopenharmony_ci                                   BlitMaskBench::KMaskShader,
383cb93a386Sopenharmony_ci                                   "maskshader");)
384