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 */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.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 32f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DashBench : public Benchmark { 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.compublic: 41410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com DashBench(const SkScalar intervals[], int count, int width, 42410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com bool doClip = false) { 434aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com fIntervals.append(count, intervals); 4499a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org for (int i = 0; i < count; ++i) { 4599a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org fIntervals[i] *= width; 4699a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org } 4799a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org fWidth = width; 484ad22753504828342e47627b12210c2c47e7290areed@google.com fName.printf("dash_%d_%s", width, doClip ? "clipped" : "noclip"); 494ad22753504828342e47627b12210c2c47e7290areed@google.com fDoClip = doClip; 50fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 51a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com fPts[0].set(SkIntToScalar(10), SkIntToScalar(10)); 52a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com fPts[1].set(SkIntToScalar(600), SkIntToScalar(10)); 534aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com } 544aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 554aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com virtual void makePath(SkPath* path) { 564aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com path_hline(path); 574aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com } 584aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 594aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comprotected: 6036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 6199a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org return fName.c_str(); 624aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com } 634aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 6436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 654aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com SkPaint paint; 664aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com this->setupPaint(&paint); 674aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com paint.setStyle(SkPaint::kStroke_Style); 6899a6ef48e396901b6cfb007b49d592ffac2bc597mike@reedtribe.org paint.setStrokeWidth(SkIntToScalar(fWidth)); 694aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com paint.setAntiAlias(false); 704aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 714aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com SkPath path; 724aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com this->makePath(&path); 734aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 740a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org paint.setPathEffect(SkDashPathEffect::Create(fIntervals.begin(), 750a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org fIntervals.count(), 0))->unref(); 764ad22753504828342e47627b12210c2c47e7290areed@google.com 774ad22753504828342e47627b12210c2c47e7290areed@google.com if (fDoClip) { 784ad22753504828342e47627b12210c2c47e7290areed@google.com SkRect r = path.getBounds(); 794ad22753504828342e47627b12210c2c47e7290areed@google.com r.inset(-SkIntToScalar(20), -SkIntToScalar(20)); 804ad22753504828342e47627b12210c2c47e7290areed@google.com // now move it so we don't intersect 814ad22753504828342e47627b12210c2c47e7290areed@google.com r.offset(0, r.height() * 3 / 2); 824ad22753504828342e47627b12210c2c47e7290areed@google.com canvas->clipRect(r); 834ad22753504828342e47627b12210c2c47e7290areed@google.com } 844ad22753504828342e47627b12210c2c47e7290areed@google.com 853361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org this->handlePath(canvas, path, paint, loops); 86ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 87ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com 88ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com virtual void handlePath(SkCanvas* canvas, const SkPath& path, 89ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com const SkPaint& paint, int N) { 904aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com for (int i = 0; i < N; ++i) { 91a584aed5f709ff9655fd3326e23cd6f602ac7ae4reed@google.com// canvas->drawPoints(SkCanvas::kLines_PointMode, 2, fPts, paint); 924aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com canvas->drawPath(path, paint); 934aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com } 944aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com } 954aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 964aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comprivate: 97f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 984aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com}; 994aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 100ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comclass RectDashBench : public DashBench { 101ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.compublic: 102410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com RectDashBench(const SkScalar intervals[], int count, int width) 103410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : INHERITED(intervals, count, width) { 104ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com fName.append("_rect"); 105ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 106fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 107ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comprotected: 108ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com virtual void handlePath(SkCanvas* canvas, const SkPath& path, 10936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const SkPaint& paint, int N) override { 110ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com SkPoint pts[2]; 111ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com if (!path.isLine(pts) || pts[0].fY != pts[1].fY) { 112ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com this->INHERITED::handlePath(canvas, path, paint, N); 113ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } else { 114ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com SkRect rect; 115ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com rect.fLeft = pts[0].fX; 116ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com rect.fTop = pts[0].fY - paint.getStrokeWidth() / 2; 117ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com rect.fRight = rect.fLeft + SkIntToScalar(fWidth); 118ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com rect.fBottom = rect.fTop + paint.getStrokeWidth(); 119fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 120ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com SkPaint p(paint); 121ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com p.setStyle(SkPaint::kFill_Style); 122ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com p.setPathEffect(NULL); 123fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 124ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com int count = SkScalarRoundToInt((pts[1].fX - pts[0].fX) / (2*fWidth)); 125ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com SkScalar dx = SkIntToScalar(2 * fWidth); 126fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 127ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com for (int i = 0; i < N*10; ++i) { 128ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com SkRect r = rect; 129ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com for (int j = 0; j < count; ++j) { 130ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com canvas->drawRect(r, p); 131ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com r.offset(dx, 0); 132ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 133ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 134ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 135ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com } 136fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 137ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.comprivate: 138ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com typedef DashBench INHERITED; 139ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com}; 140ef85e3c52c551a66e537cc8bdcbad77bdc87ef19reed@google.com 141ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_unit_star(SkPath* path, int n) { 142ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar rad = -SK_ScalarPI / 2; 143ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com const SkScalar drad = (n >> 1) * SK_ScalarPI * 2 / n; 144fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 145ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->moveTo(0, -SK_Scalar1); 146ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com for (int i = 1; i < n; i++) { 147ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com rad += drad; 148ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar cosV, sinV = SkScalarSinCos(rad, &cosV); 149ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->lineTo(cosV, sinV); 150ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 151ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->close(); 152ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com} 153ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 154ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_poly(SkPath* path) { 155ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com make_unit_star(path, 9); 1561d24b8dfe9aac9cadaf3914b8574a4ff6e9bc19drobertphillips const SkMatrix matrix = SkMatrix::MakeScale(SkIntToScalar(100), SkIntToScalar(100)); 157ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->transform(matrix); 158ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com} 159ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 160ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_quad(SkPath* path) { 161ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar x0 = SkIntToScalar(10); 162ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar y0 = SkIntToScalar(10); 163ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->moveTo(x0, y0); 164ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->quadTo(x0, y0 + 400 * SK_Scalar1, 165ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com x0 + 600 * SK_Scalar1, y0 + 400 * SK_Scalar1); 166ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com} 167ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 168ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comstatic void make_cubic(SkPath* path) { 169ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar x0 = SkIntToScalar(10); 170ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar y0 = SkIntToScalar(10); 171ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->moveTo(x0, y0); 172ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com path->cubicTo(x0, y0 + 400 * SK_Scalar1, 173ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com x0 + 600 * SK_Scalar1, y0 + 400 * SK_Scalar1, 174ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com x0 + 600 * SK_Scalar1, y0); 175ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com} 176ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 177f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass MakeDashBench : public Benchmark { 178ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkString fName; 179ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkPath fPath; 180ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkAutoTUnref<SkPathEffect> fPE; 18173bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 182ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.compublic: 183410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com MakeDashBench(void (*proc)(SkPath*), const char name[]) { 184ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com fName.printf("makedash_%s", name); 185ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com proc(&fPath); 18673bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 187ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkScalar vals[] = { SkIntToScalar(4), SkIntToScalar(4) }; 1880a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org fPE.reset(SkDashPathEffect::Create(vals, 2, 0)); 189ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 19073bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 191ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprotected: 19236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 193ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com return fName.c_str(); 194ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 19573bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 19636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas*) override { 197ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com SkPath dst; 1983361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 199fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); 20073bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 2014bbdeac58cc928dc66296bde3bd06e78070d96b7reed@google.com fPE->filterPath(&dst, fPath, &rec, NULL); 202ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com dst.rewind(); 203ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 204ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com } 20573bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 20631e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.comprivate: 207f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 20831e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com}; 209fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 2105125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com/* 2115125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com * We try to special case square dashes (intervals are equal to strokewidth). 2125125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com */ 213f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DashLineBench : public Benchmark { 21431e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkString fName; 2155125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com SkScalar fStrokeWidth; 2165125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com bool fIsRound; 21731e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkAutoTUnref<SkPathEffect> fPE; 21873bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 21931e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.compublic: 220410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com DashLineBench(SkScalar width, bool isRound) { 2215125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fName.printf("dashline_%g_%s", SkScalarToFloat(width), isRound ? "circle" : "square"); 2225125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fStrokeWidth = width; 2235125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com fIsRound = isRound; 22473bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 2255125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com SkScalar vals[] = { SK_Scalar1, SK_Scalar1 }; 2260a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org fPE.reset(SkDashPathEffect::Create(vals, 2, 0)); 22731e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 22873bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 22931e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.comprotected: 23036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 23131e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com return fName.c_str(); 23231e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 23373bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 23436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 23531e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com SkPaint paint; 23631e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com this->setupPaint(&paint); 2375125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com paint.setStrokeWidth(fStrokeWidth); 2385125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com paint.setStrokeCap(fIsRound ? SkPaint::kRound_Cap : SkPaint::kSquare_Cap); 23931e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com paint.setPathEffect(fPE); 2403361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 2415125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com canvas->drawLine(10 * SK_Scalar1, 10 * SK_Scalar1, 2425125d84433599b6103127cd1aaaa0e4e2f5c4e66reed@google.com 640 * SK_Scalar1, 10 * SK_Scalar1, paint); 24331e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 24431e9d64cb1a1fe07cdb2e4a5cd64c817a9373a86reed@google.com } 24573bb3bee937ce55b5bcdb9e480e14fb4df809e5dskia.committer@gmail.com 246ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.comprivate: 247f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 248ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com}; 249ea6f6832dd1c1af5db1a2ff43df627347b3fb8abreed@google.com 250f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DrawPointsDashingBench : public Benchmark { 251935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkString fName; 252935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com int fStrokeWidth; 253ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com bool fDoAA; 254935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 255935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkAutoTUnref<SkPathEffect> fPathEffect; 256935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 257935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.compublic: 258410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com DrawPointsDashingBench(int dashLength, int strokeWidth, bool doAA) 259410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com { 260935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com fName.printf("drawpointsdash_%d_%d%s", dashLength, strokeWidth, doAA ? "_aa" : "_bw"); 261935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com fStrokeWidth = strokeWidth; 262ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fDoAA = doAA; 263935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 264935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkScalar vals[] = { SkIntToScalar(dashLength), SkIntToScalar(dashLength) }; 26535c03fbf101306e8e82141853de4c664cbafedbbcommit-bot@chromium.org fPathEffect.reset(SkDashPathEffect::Create(vals, 2, SK_Scalar1)); 266935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 267935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 268935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.comprotected: 26936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 270935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com return fName.c_str(); 271935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 272935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 27336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 274935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkPaint p; 275935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com this->setupPaint(&p); 276935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setColor(SK_ColorBLACK); 277935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setStyle(SkPaint::kStroke_Style); 278935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setStrokeWidth(SkIntToScalar(fStrokeWidth)); 279935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com p.setPathEffect(fPathEffect); 280ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com p.setAntiAlias(fDoAA); 281935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 282935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com SkPoint pts[2] = { 283935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com { SkIntToScalar(10), 0 }, 284935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com { SkIntToScalar(640), 0 } 285935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com }; 286935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 2873361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 288935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com pts[0].fY = pts[1].fY = SkIntToScalar(i % 480); 289935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com canvas->drawPoints(SkCanvas::kLines_PointMode, 2, pts, p); 290935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 291935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com } 292935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com 293935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.comprivate: 294f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 295935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com}; 296996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 297e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// Want to test how we handle dashing when 99% of the dash is clipped out 298f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass GiantDashBench : public Benchmark { 299996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkString fName; 300e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com SkScalar fStrokeWidth; 301996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkPoint fPts[2]; 302996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkAutoTUnref<SkPathEffect> fPathEffect; 3034024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 304996f64f8e752fb1207d446320c0fcce8505c5611reed@google.compublic: 305996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com enum LineType { 306996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com kHori_LineType, 307996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com kVert_LineType, 3085d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org kDiag_LineType, 3095d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org kLineTypeCount 310996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com }; 311996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 312996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com static const char* LineTypeName(LineType lt) { 313996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com static const char* gNames[] = { "hori", "vert", "diag" }; 3145d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org SK_COMPILE_ASSERT(kLineTypeCount == SK_ARRAY_COUNT(gNames), names_wrong_size); 315996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com return gNames[lt]; 316996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 317996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 318410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com GiantDashBench(LineType lt, SkScalar width) { 319e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com fName.printf("giantdashline_%s_%g", LineTypeName(lt), width); 320e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com fStrokeWidth = width; 321e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 322996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com // deliberately pick intervals that won't be caught by asPoints(), so 323996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com // we can test the filterPath code-path. 324ae4976c9d09478975aac3a2956e9918d606fea46commit-bot@chromium.org const SkScalar intervals[] = { 20, 10, 10, 10 }; 3250a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org fPathEffect.reset(SkDashPathEffect::Create(intervals, 3260a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org SK_ARRAY_COUNT(intervals), 0)); 327996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 328996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkScalar cx = 640 / 2; // center X 329996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkScalar cy = 480 / 2; // center Y 330996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkMatrix matrix; 3314024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 332996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com switch (lt) { 333996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kHori_LineType: 334996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setIdentity(); 335996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 336996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kVert_LineType: 337996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setRotate(90, cx, cy); 338996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 339996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com case kDiag_LineType: 340996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.setRotate(45, cx, cy); 341996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com break; 3425d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org case kLineTypeCount: 3435d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org // Not a real enum value. 3445d7ca957edcc57f7f0be2741183e8d3c36cb5129commit-bot@chromium.org break; 345996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 3464024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 347e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com const SkScalar overshoot = 100*1000; 348996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com const SkPoint pts[2] = { 349996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com { -overshoot, cy }, { 640 + overshoot, cy } 350996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com }; 351996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com matrix.mapPoints(fPts, pts, 2); 352996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 3534024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 354996f64f8e752fb1207d446320c0fcce8505c5611reed@google.comprotected: 35536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 356996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com return fName.c_str(); 357996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 3584024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 35936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 360996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com SkPaint p; 361996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com this->setupPaint(&p); 362996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com p.setStyle(SkPaint::kStroke_Style); 363e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com p.setStrokeWidth(fStrokeWidth); 364996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com p.setPathEffect(fPathEffect); 365996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 3663361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 367c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawPoints(SkCanvas::kLines_PointMode, 2, fPts, p); 368c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com } 369996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com } 3704024f32d99b63a599c544a49f526e53c25135159skia.committer@gmail.com 371996f64f8e752fb1207d446320c0fcce8505c5611reed@google.comprivate: 372f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 373996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com}; 374996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 37505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel// Want to test how we draw a dashed grid (like what is used in spreadsheets) of many 37605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel// small dashed lines switching back and forth between horizontal and vertical 377f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass DashGridBench : public Benchmark { 37805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkString fName; 37905bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel int fStrokeWidth; 38005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel bool fDoAA; 38105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 38205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkAutoTUnref<SkPathEffect> fPathEffect; 38305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 38405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielpublic: 38505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel DashGridBench(int dashLength, int strokeWidth, bool doAA) { 38605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel fName.printf("dashgrid_%d_%d%s", dashLength, strokeWidth, doAA ? "_aa" : "_bw"); 38705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel fStrokeWidth = strokeWidth; 38805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel fDoAA = doAA; 38905bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 39005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkScalar vals[] = { SkIntToScalar(dashLength), SkIntToScalar(dashLength) }; 39105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel fPathEffect.reset(SkDashPathEffect::Create(vals, 2, SK_Scalar1)); 39205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 39305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 39405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielprotected: 39536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* onGetName() override { 39605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel return fName.c_str(); 39705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 39805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 39936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(const int loops, SkCanvas* canvas) override { 40005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkPaint p; 40105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel this->setupPaint(&p); 40205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel p.setColor(SK_ColorBLACK); 40305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel p.setStyle(SkPaint::kStroke_Style); 40405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel p.setStrokeWidth(SkIntToScalar(fStrokeWidth)); 40505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel p.setPathEffect(fPathEffect); 40605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel p.setAntiAlias(fDoAA); 40705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 40805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkPoint pts[4] = { 40905bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel { SkIntToScalar(0), 20.5f }, 41005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel { SkIntToScalar(20), 20.5f }, 41105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel { 20.5f, SkIntToScalar(0) }, 41205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel { 20.5f, SkIntToScalar(20) } 41305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel }; 41405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 41505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel for (int i = 0; i < loops; ++i) { 41605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel for (int j = 0; j < 10; ++j) { 41705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel for (int k = 0; k < 10; ++k) { 41805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel // Horizontal line 41905bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkPoint horPts[2]; 42005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel horPts[0].fX = pts[0].fX + k * 22.f; 42105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel horPts[0].fY = pts[0].fY + j * 22.f; 42205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel horPts[1].fX = pts[1].fX + k * 22.f; 42305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel horPts[1].fY = pts[1].fY + j * 22.f; 42405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel canvas->drawPoints(SkCanvas::kLines_PointMode, 2, horPts, p); 42505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 42605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel // Vertical line 42705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel SkPoint vertPts[2]; 42805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel vertPts[0].fX = pts[2].fX + k * 22.f; 42905bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel vertPts[0].fY = pts[2].fY + j * 22.f; 43005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel vertPts[1].fX = pts[3].fX + k * 22.f; 43105bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel vertPts[1].fY = pts[3].fY + j * 22.f; 43205bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel canvas->drawPoints(SkCanvas::kLines_PointMode, 2, vertPts, p); 43305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 43405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 43505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 43605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel } 43705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 43805bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielprivate: 439f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 44005bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel}; 441996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 4424aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com/////////////////////////////////////////////////////////////////////////////// 4434aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 4444aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.comstatic const SkScalar gDots[] = { SK_Scalar1, SK_Scalar1 }; 4454aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 4464aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com#define PARAM(array) array, SK_ARRAY_COUNT(array) 4474aa1a70ab74e841def84367d771ac2b2202f41d2reed@google.com 448410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashBench(PARAM(gDots), 0); ) 449410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashBench(PARAM(gDots), 1); ) 450410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashBench(PARAM(gDots), 1, true); ) 451410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashBench(PARAM(gDots), 4); ) 452410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MakeDashBench(make_poly, "poly"); ) 453410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MakeDashBench(make_quad, "quad"); ) 454410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new MakeDashBench(make_cubic, "cubic"); ) 455410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(0, false); ) 456410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(SK_Scalar1, false); ) 457410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(2 * SK_Scalar1, false); ) 458410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(0, true); ) 459410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(SK_Scalar1, true); ) 460410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DashLineBench(2 * SK_Scalar1, true); ) 461410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com 462410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(1, 1, false); ) 463410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(1, 1, true); ) 464410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(3, 1, false); ) 465410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(3, 1, true); ) 466410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(5, 5, false); ) 467410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DrawPointsDashingBench(5, 5, true); ) 468996f64f8e752fb1207d446320c0fcce8505c5611reed@google.com 46969feaca231990003a7f3dadd6bfb9110dc6b9b96djsollen@google.com/* Disable the GiantDashBench for Android devices until we can better control 47069feaca231990003a7f3dadd6bfb9110dc6b9b96djsollen@google.com * the memory usage. (https://code.google.com/p/skia/issues/detail?id=1430) 47169feaca231990003a7f3dadd6bfb9110dc6b9b96djsollen@google.com */ 47269feaca231990003a7f3dadd6bfb9110dc6b9b96djsollen@google.com#ifndef SK_BUILD_FOR_ANDROID 473410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kHori_LineType, 0); ) 474410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kVert_LineType, 0); ) 475410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kDiag_LineType, 0); ) 476e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 477e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// pass 2 to explicitly avoid any 1-is-the-same-as-hairline special casing 478e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com 479e5ceea9232ecdb76d3b2457146e7dcfd28c3d0fbreed@google.com// hori_2 is just too slow to enable at the moment 480410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kHori_LineType, 2); ) 481410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kVert_LineType, 2); ) 482410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GiantDashBench(GiantDashBench::kDiag_LineType, 2); ) 48305bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdaniel 48405bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielDEF_BENCH( return new DashGridBench(1, 1, true); ) 48505bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielDEF_BENCH( return new DashGridBench(1, 1, false); ) 48605bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielDEF_BENCH( return new DashGridBench(3, 1, true); ) 48705bb6f136d8d2b2d45a912cf967a09e4d42dd4d0egdanielDEF_BENCH( return new DashGridBench(3, 1, false); ) 48869feaca231990003a7f3dadd6bfb9110dc6b9b96djsollen@google.com#endif 489