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