Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: bench/MeasureBench.cpp

Issue 2187083002: Add initial CurveMeasure code (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Revert use of cubic in MeasureBench Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | gyp/utils.gypi » ('j') | src/utils/SkCurveMeasure.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 #include <cmath>
8
9 #include "Benchmark.h"
10 #include "SkCurveMeasure.h"
11 #include "SkPath.h"
12 #include "SkPathMeasure.h"
13 #include "SkString.h"
14
15 #define NORMALIZE_LOOPS
16
17 class MeasureBench : public Benchmark {
18 protected:
19 SkString fName;
20
21 SkPath fPath;
22
23 bool fUsePathMeasure;
24 float fSize;
25 size_t fPieces;
26
27 SkPoint fPts[3];
28
29 public:
30 MeasureBench(bool usePathMeasure, float size, size_t pieces)
31 : fUsePathMeasure(usePathMeasure),
32 fSize(size),
33 fPieces(pieces) {
34 fName.printf("measure_%s_%.1f_" SK_SIZE_T_SPECIFIER,
35 fUsePathMeasure ? "pathMeasure" : "curveMeasure", fSize,
36 fPieces);
37
38 auto p1 = SkPoint::Make(0, 0);
39 auto p2 = SkPoint::Make(30*fSize, 0);
40 auto p3 = SkPoint::Make(15*fSize, 15*fSize);
41
42 fPts[0] = p1;
43 fPts[1] = p2;
44 fPts[2] = p3;
45
46 this->setPath();
47 }
48
49 protected:
50 const char* onGetName() override { return fName.c_str(); }
51
52 void setPath() {
53 fPath.moveTo(fPts[0]);
54 fPath.quadTo(fPts[1], fPts[2]);
55 }
56
57 int numLoops() {
58 #ifdef NORMALIZE_LOOPS
59 // arbitrary heuristic
60 return std::max(2, 10000 / ((int)fSize*(int)fPieces));
61 #else
62 return 1000;
63 #endif // NORMALIZE_LOOPS
64 }
65
66 //// measurement code
67
68 void do_pathMeasure(SkCanvas* canvas) {
69 SkPathMeasure meas(fPath, false);
70
71 SkScalar totalLength = meas.getLength();
72 SkScalar pieceLength = totalLength / fPieces;
73
74 SkPoint point;
75 for (size_t i = 0; i <= fPieces; i++) {
76 if (meas.getPosTan(i * pieceLength, &point, nullptr)) {
77 };
78 }
79 }
80
81 void do_curveMeasure(SkCanvas* canvas) {
82 SkCurveMeasure meas(fPts, kQuad_SegType);
83
84 SkScalar totalLength = meas.getLength();
85 SkScalar pieceLength = totalLength / fPieces;
86
87 SkPoint point;
88 for (size_t i = 0; i <= fPieces; i++) {
89 meas.getPosTan(i*pieceLength, &point, nullptr);
90 }
91 }
92
93 void onDraw(int loops, SkCanvas* canvas) override {
94 int inner_loops = numLoops();
95 for (int i = 0; i < loops; i++) {
96 for (int j = 0; j < inner_loops; j++) {
97 if (fUsePathMeasure) {
98 do_pathMeasure(canvas);
99 }
100 else {
101 do_curveMeasure(canvas);
102 }
103 }
104 }
105 }
106
107 private:
108 typedef Benchmark INHERITED;
109 };
110
111 ///////////////////////////////////////////////////////////////////////////////
112
113 DEF_BENCH(return new MeasureBench(true, 1, 2);)
114 DEF_BENCH(return new MeasureBench(true, 2, 2);)
115 DEF_BENCH(return new MeasureBench(true, 10, 2);)
116 DEF_BENCH(return new MeasureBench(true, 100, 2);)
117 DEF_BENCH(return new MeasureBench(true, 1000, 2);)
118
119 DEF_BENCH(return new MeasureBench(true, 1, 1);)
120 DEF_BENCH(return new MeasureBench(true, 1, 2);)
121 DEF_BENCH(return new MeasureBench(true, 1, 3);)
122 DEF_BENCH(return new MeasureBench(true, 1, 4);)
123 DEF_BENCH(return new MeasureBench(true, 1, 5);)
124 DEF_BENCH(return new MeasureBench(true, 2, 1);)
125 DEF_BENCH(return new MeasureBench(true, 2, 2);)
126 DEF_BENCH(return new MeasureBench(true, 2, 3);)
127 DEF_BENCH(return new MeasureBench(true, 2, 4);)
128 DEF_BENCH(return new MeasureBench(true, 2, 5);)
129 DEF_BENCH(return new MeasureBench(true, 10, 10);)
130 DEF_BENCH(return new MeasureBench(true, 10, 20);)
131 DEF_BENCH(return new MeasureBench(true, 10, 30);)
132 DEF_BENCH(return new MeasureBench(true, 10, 40);)
133 DEF_BENCH(return new MeasureBench(true, 10, 50);)
134 DEF_BENCH(return new MeasureBench(true, 100, 100);)
135 DEF_BENCH(return new MeasureBench(true, 100, 200);)
136 DEF_BENCH(return new MeasureBench(true, 100, 300);)
137 DEF_BENCH(return new MeasureBench(true, 100, 400);)
138 DEF_BENCH(return new MeasureBench(true, 100, 500);)
139 DEF_BENCH(return new MeasureBench(true, 1000, 1000);)
140 DEF_BENCH(return new MeasureBench(true, 1000, 2000);)
141 DEF_BENCH(return new MeasureBench(true, 1000, 3000);)
142 DEF_BENCH(return new MeasureBench(true, 1000, 4000);)
143 DEF_BENCH(return new MeasureBench(true, 1000, 5000);)
144
145 DEF_BENCH(return new MeasureBench(false, 1, 2);)
146 DEF_BENCH(return new MeasureBench(false, 2, 2);)
147 DEF_BENCH(return new MeasureBench(false, 10, 2);)
148 DEF_BENCH(return new MeasureBench(false, 100, 2);)
149 DEF_BENCH(return new MeasureBench(false, 1000, 2);)
150
151 DEF_BENCH(return new MeasureBench(false, 1, 1);)
152 DEF_BENCH(return new MeasureBench(false, 1, 2);)
153 DEF_BENCH(return new MeasureBench(false, 1, 3);)
154 DEF_BENCH(return new MeasureBench(false, 1, 4);)
155 DEF_BENCH(return new MeasureBench(false, 1, 5);)
156 DEF_BENCH(return new MeasureBench(false, 2, 1);)
157 DEF_BENCH(return new MeasureBench(false, 2, 2);)
158 DEF_BENCH(return new MeasureBench(false, 2, 3);)
159 DEF_BENCH(return new MeasureBench(false, 2, 4);)
160 DEF_BENCH(return new MeasureBench(false, 2, 5);)
161 DEF_BENCH(return new MeasureBench(false, 10, 10);)
162 DEF_BENCH(return new MeasureBench(false, 10, 20);)
163 DEF_BENCH(return new MeasureBench(false, 10, 30);)
164 DEF_BENCH(return new MeasureBench(false, 10, 40);)
165 DEF_BENCH(return new MeasureBench(false, 10, 50);)
166 DEF_BENCH(return new MeasureBench(false, 100, 100);)
167 DEF_BENCH(return new MeasureBench(false, 100, 200);)
168 DEF_BENCH(return new MeasureBench(false, 100, 300);)
169 DEF_BENCH(return new MeasureBench(false, 100, 400);)
170 DEF_BENCH(return new MeasureBench(false, 100, 500);)
171 DEF_BENCH(return new MeasureBench(false, 1000, 1000);)
172 DEF_BENCH(return new MeasureBench(false, 1000, 2000);)
173 DEF_BENCH(return new MeasureBench(false, 1000, 3000);)
174 DEF_BENCH(return new MeasureBench(false, 1000, 4000);)
175 DEF_BENCH(return new MeasureBench(false, 1000, 5000);)
OLDNEW
« no previous file with comments | « no previous file | gyp/utils.gypi » ('j') | src/utils/SkCurveMeasure.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698