DashBench.cpp revision e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fb
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; 18573bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 186ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com enum { 187ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com N = SkBENCHLOOP(400) 188ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com }; 18973bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.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); 19473bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 195ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar vals[] = { SkIntToScalar(4), SkIntToScalar(4) }; 196ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com fPE.reset(new SkDashPathEffect(vals, 2, 0)); 197ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 19873bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 199ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprotected: 200ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com virtual const char* onGetName() SK_OVERRIDE { 201ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com return fName.c_str(); 202ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 20373bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.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); 20873bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 209fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fPE->filterPath(&dst, fPath, &rec); 210ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com dst.rewind(); 211ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 212ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 21373bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 21431e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.comprivate: 21531e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com typedef SkBenchmark INHERITED; 21631e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com}; 217fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 2185125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com/* 2195125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com * We try to special case square dashes (intervals are equal to strokewidth). 2205125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com */ 22131e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.comclass DashLineBench : public SkBenchmark { 22231e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkString fName; 2235125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com SkScalar fStrokeWidth; 2245125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com bool fIsRound; 22531e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkAutoTUnref<SkPathEffect> fPE; 22673bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 22731e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com enum { 22831e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com N = SkBENCHLOOP(200) 22931e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com }; 23073bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 23131e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.compublic: 2325125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com DashLineBench(void* param, SkScalar width, bool isRound) : INHERITED(param) { 2335125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fName.printf("dashline_%g_%s", SkScalarToFloat(width), isRound ? "circle" : "square"); 2345125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fStrokeWidth = width; 2355125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fIsRound = isRound; 23673bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 2375125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com SkScalar vals[] = { SK_Scalar1, SK_Scalar1 }; 23831e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com fPE.reset(new SkDashPathEffect(vals, 2, 0)); 23931e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 24073bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 24131e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.comprotected: 24231e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com virtual const char* onGetName() SK_OVERRIDE { 24331e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com return fName.c_str(); 24431e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 24573bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 24631e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 24731e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkPaint paint; 24831e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com this->setupPaint(&paint); 2495125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com paint.setStrokeWidth(fStrokeWidth); 2505125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com paint.setStrokeCap(fIsRound ? SkPaint::kRound_Cap : SkPaint::kSquare_Cap); 25131e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com paint.setPathEffect(fPE); 25231e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com for (int i = 0; i < N; ++i) { 2535125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com canvas->drawLine(10 * SK_Scalar1, 10 * SK_Scalar1, 2545125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com 640 * SK_Scalar1, 10 * SK_Scalar1, paint); 25531e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 25631e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 25773bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 258ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprivate: 259ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com typedef SkBenchmark INHERITED; 260ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}; 261ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 262935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.comclass DrawPointsDashingBench : public SkBenchmark { 263935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkString fName; 264935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com int fStrokeWidth; 265ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com bool fDoAA; 266935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 267935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkAutoTUnref<SkPathEffect> fPathEffect; 268935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 269935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com enum { 270935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com N = SkBENCHLOOP(480) 271935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com }; 272935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 273935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.compublic: 2740264fb4543b0d8cebe00f1ee32433784f4ceb074skia.committer@gmail.com DrawPointsDashingBench(void* param, int dashLength, int strokeWidth, bool doAA) 275935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com : INHERITED(param) { 276935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com fName.printf("drawpointsdash_%d_%d%s", dashLength, strokeWidth, doAA ? "_aa" : "_bw"); 277935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com fStrokeWidth = strokeWidth; 278ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fDoAA = doAA; 279935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 280935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkScalar vals[] = { SkIntToScalar(dashLength), SkIntToScalar(dashLength) }; 281935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com fPathEffect.reset(new SkDashPathEffect(vals, 2, SK_Scalar1, false)); 282935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 283935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 284935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.comprotected: 285935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com virtual const char* onGetName() SK_OVERRIDE { 286935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com return fName.c_str(); 287935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 288935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 289935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 290935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 291935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkPaint p; 292935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com this->setupPaint(&p); 293935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setColor(SK_ColorBLACK); 294935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setStyle(SkPaint::kStroke_Style); 295935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setStrokeWidth(SkIntToScalar(fStrokeWidth)); 296935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setPathEffect(fPathEffect); 297ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com p.setAntiAlias(fDoAA); 298935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 299935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkPoint pts[2] = { 300935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com { SkIntToScalar(10), 0 }, 301935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com { SkIntToScalar(640), 0 } 302935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com }; 303935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 304935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com for (int i = 0; i < N; ++i) { 305935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 306935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com pts[0].fY = pts[1].fY = SkIntToScalar(i % 480); 307935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com canvas->drawPoints(SkCanvas::kLines_PointMode, 2, pts, p); 308935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 309935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 310935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 311935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.comprivate: 312935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com typedef SkBenchmark INHERITED; 313935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com}; 314996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 315e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// Want to test how we handle dashing when 99% of the dash is clipped out 316996f64f8e752fb1207d446320c0fcce8505c5611reed@google.comclass GiantDashBench : public SkBenchmark { 317996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkString fName; 318e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com SkScalar fStrokeWidth; 319996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkPoint fPts[2]; 320996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkAutoTUnref<SkPathEffect> fPathEffect; 321996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 322996f64f8e752fb1207d446320c0fcce8505c5611reed@google.compublic: 323996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com enum LineType { 324996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com kHori_LineType, 325996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com kVert_LineType, 326996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com kDiag_LineType 327996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com }; 328996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 329996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com static const char* LineTypeName(LineType lt) { 330996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com static const char* gNames[] = { "hori", "vert", "diag" }; 331996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkASSERT((size_t)lt <= SK_ARRAY_COUNT(gNames)); 332996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com return gNames[lt]; 333996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 334996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 335e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com GiantDashBench(void* param, LineType lt, SkScalar width) : INHERITED(param) { 336e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com fName.printf("giantdashline_%s_%g", LineTypeName(lt), width); 337e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com fStrokeWidth = width; 338e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 339996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com // deliberately pick intervals that won't be caught by asPoints(), so 340996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com // we can test the filterPath code-path. 341996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com const SkScalar intervals[] = { 2, 1 }; 342996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com fPathEffect.reset(new SkDashPathEffect(intervals, 343996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SK_ARRAY_COUNT(intervals), 0)); 344996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 345996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkScalar cx = 640 / 2; // center X 346996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkScalar cy = 480 / 2; // center Y 347996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkMatrix matrix; 348996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 349996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com switch (lt) { 350996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kHori_LineType: 351996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setIdentity(); 352996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 353996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kVert_LineType: 354996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setRotate(90, cx, cy); 355996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 356996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kDiag_LineType: 357996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setRotate(45, cx, cy); 358996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 359996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 360996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 361e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com const SkScalar overshoot = 100*1000; 362996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com const SkPoint pts[2] = { 363996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com { -overshoot, cy }, { 640 + overshoot, cy } 364996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com }; 365996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.mapPoints(fPts, pts, 2); 366996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 367996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 368996f64f8e752fb1207d446320c0fcce8505c5611reed@google.comprotected: 369996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com virtual const char* onGetName() SK_OVERRIDE { 370996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com return fName.c_str(); 371996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 372996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 373996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 374996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkPaint p; 375996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com this->setupPaint(&p); 376996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com p.setStyle(SkPaint::kStroke_Style); 377e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com p.setStrokeWidth(fStrokeWidth); 378996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com p.setPathEffect(fPathEffect); 379996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 380e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com canvas->drawPoints(SkCanvas::kLines_PointMode, 2, fPts, p); 381996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 382996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 383996f64f8e752fb1207d446320c0fcce8505c5611reed@google.comprivate: 384996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com typedef SkBenchmark INHERITED; 385996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com}; 386996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 387996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 3884aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com/////////////////////////////////////////////////////////////////////////////// 3894aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 3904aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comstatic const SkScalar gDots[] = { SK_Scalar1, SK_Scalar1 }; 3914aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 3924aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#define PARAM(array) array, SK_ARRAY_COUNT(array) 3934aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 394a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashBench(p, PARAM(gDots), 0); ) 395a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashBench(p, PARAM(gDots), 1); ) 396a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashBench(p, PARAM(gDots), 1, true); ) 397a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashBench(p, PARAM(gDots), 4); ) 398a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new MakeDashBench(p, make_poly, "poly"); ) 399a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new MakeDashBench(p, make_quad, "quad"); ) 400a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new MakeDashBench(p, make_cubic, "cubic"); ) 401a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, 0, false); ) 402a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, SK_Scalar1, false); ) 403a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, 2 * SK_Scalar1, false); ) 404a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, 0, true); ) 405a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, SK_Scalar1, true); ) 406a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DashLineBench(p, 2 * SK_Scalar1, true); ) 407a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.com 408a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 1, 1, false); ) 409a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 1, 1, true); ) 410a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 3, 1, false); ) 411a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 3, 1, true); ) 412a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 5, 5, false); ) 413a8f23c7e1ede7bba73edbd494ab0d485809e4c5areed@google.comDEF_BENCH( return new DrawPointsDashingBench(p, 5, 5, true); ) 414996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 415e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.comDEF_BENCH( return new GiantDashBench(p, GiantDashBench::kHori_LineType, 0); ) 416e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.comDEF_BENCH( return new GiantDashBench(p, GiantDashBench::kVert_LineType, 0); ) 417e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.comDEF_BENCH( return new GiantDashBench(p, GiantDashBench::kDiag_LineType, 0); ) 418e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 419e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// pass 2 to explicitly avoid any 1-is-the-same-as-hairline special casing 420e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 421e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// hori_2 is just too slow to enable at the moment 422e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com//DEF_BENCH( return new GiantDashBench(p, GiantDashBench::kHori_LineType, 2); ) 423e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.comDEF_BENCH( return new GiantDashBench(p, GiantDashBench::kVert_LineType, 2); ) 424e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.comDEF_BENCH( return new GiantDashBench(p, GiantDashBench::kDiag_LineType, 2); ) 425