OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SkBenchmark.h" | 8 #include "SkBenchmark.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #define FLAGS00 Flags(0) | 23 #define FLAGS00 Flags(0) |
24 #define FLAGS01 Flags(kStroke_Flag) | 24 #define FLAGS01 Flags(kStroke_Flag) |
25 #define FLAGS10 Flags(kBig_Flag) | 25 #define FLAGS10 Flags(kBig_Flag) |
26 #define FLAGS11 Flags(kStroke_Flag | kBig_Flag) | 26 #define FLAGS11 Flags(kStroke_Flag | kBig_Flag) |
27 | 27 |
28 class PathBench : public SkBenchmark { | 28 class PathBench : public SkBenchmark { |
29 SkPaint fPaint; | 29 SkPaint fPaint; |
30 SkString fName; | 30 SkString fName; |
31 Flags fFlags; | 31 Flags fFlags; |
32 public: | 32 public: |
33 PathBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) { | 33 PathBench(Flags flags) : fFlags(flags) { |
34 fPaint.setStyle(flags & kStroke_Flag ? SkPaint::kStroke_Style : | 34 fPaint.setStyle(flags & kStroke_Flag ? SkPaint::kStroke_Style : |
35 SkPaint::kFill_Style); | 35 SkPaint::kFill_Style); |
36 fPaint.setStrokeWidth(SkIntToScalar(5)); | 36 fPaint.setStrokeWidth(SkIntToScalar(5)); |
37 fPaint.setStrokeJoin(SkPaint::kBevel_Join); | 37 fPaint.setStrokeJoin(SkPaint::kBevel_Join); |
38 } | 38 } |
39 | 39 |
40 virtual void appendName(SkString*) = 0; | 40 virtual void appendName(SkString*) = 0; |
41 virtual void makePath(SkPath*) = 0; | 41 virtual void makePath(SkPath*) = 0; |
42 virtual int complexity() { return 0; } | 42 virtual int complexity() { return 0; } |
43 | 43 |
(...skipping 28 matching lines...) Expand all Loading... |
72 canvas->drawPath(path, paint); | 72 canvas->drawPath(path, paint); |
73 } | 73 } |
74 } | 74 } |
75 | 75 |
76 private: | 76 private: |
77 typedef SkBenchmark INHERITED; | 77 typedef SkBenchmark INHERITED; |
78 }; | 78 }; |
79 | 79 |
80 class TrianglePathBench : public PathBench { | 80 class TrianglePathBench : public PathBench { |
81 public: | 81 public: |
82 TrianglePathBench(void* param, Flags flags) : INHERITED(param, flags) {} | 82 TrianglePathBench(Flags flags) : INHERITED(flags) {} |
83 | 83 |
84 virtual void appendName(SkString* name) SK_OVERRIDE { | 84 virtual void appendName(SkString* name) SK_OVERRIDE { |
85 name->append("triangle"); | 85 name->append("triangle"); |
86 } | 86 } |
87 virtual void makePath(SkPath* path) SK_OVERRIDE { | 87 virtual void makePath(SkPath* path) SK_OVERRIDE { |
88 static const int gCoord[] = { | 88 static const int gCoord[] = { |
89 10, 10, 15, 5, 20, 20 | 89 10, 10, 15, 5, 20, 20 |
90 }; | 90 }; |
91 path->moveTo(SkIntToScalar(gCoord[0]), SkIntToScalar(gCoord[1])); | 91 path->moveTo(SkIntToScalar(gCoord[0]), SkIntToScalar(gCoord[1])); |
92 path->lineTo(SkIntToScalar(gCoord[2]), SkIntToScalar(gCoord[3])); | 92 path->lineTo(SkIntToScalar(gCoord[2]), SkIntToScalar(gCoord[3])); |
93 path->lineTo(SkIntToScalar(gCoord[4]), SkIntToScalar(gCoord[5])); | 93 path->lineTo(SkIntToScalar(gCoord[4]), SkIntToScalar(gCoord[5])); |
94 path->close(); | 94 path->close(); |
95 } | 95 } |
96 private: | 96 private: |
97 typedef PathBench INHERITED; | 97 typedef PathBench INHERITED; |
98 }; | 98 }; |
99 | 99 |
100 class RectPathBench : public PathBench { | 100 class RectPathBench : public PathBench { |
101 public: | 101 public: |
102 RectPathBench(void* param, Flags flags) : INHERITED(param, flags) {} | 102 RectPathBench(Flags flags) : INHERITED(flags) {} |
103 | 103 |
104 virtual void appendName(SkString* name) SK_OVERRIDE { | 104 virtual void appendName(SkString* name) SK_OVERRIDE { |
105 name->append("rect"); | 105 name->append("rect"); |
106 } | 106 } |
107 virtual void makePath(SkPath* path) SK_OVERRIDE { | 107 virtual void makePath(SkPath* path) SK_OVERRIDE { |
108 SkRect r = { 10, 10, 20, 20 }; | 108 SkRect r = { 10, 10, 20, 20 }; |
109 path->addRect(r); | 109 path->addRect(r); |
110 } | 110 } |
111 private: | 111 private: |
112 typedef PathBench INHERITED; | 112 typedef PathBench INHERITED; |
113 }; | 113 }; |
114 | 114 |
115 class OvalPathBench : public PathBench { | 115 class OvalPathBench : public PathBench { |
116 public: | 116 public: |
117 OvalPathBench(void* param, Flags flags) : INHERITED(param, flags) {} | 117 OvalPathBench(Flags flags) : INHERITED(flags) {} |
118 | 118 |
119 virtual void appendName(SkString* name) SK_OVERRIDE { | 119 virtual void appendName(SkString* name) SK_OVERRIDE { |
120 name->append("oval"); | 120 name->append("oval"); |
121 } | 121 } |
122 virtual void makePath(SkPath* path) SK_OVERRIDE { | 122 virtual void makePath(SkPath* path) SK_OVERRIDE { |
123 SkRect r = { 10, 10, 23, 20 }; | 123 SkRect r = { 10, 10, 23, 20 }; |
124 path->addOval(r); | 124 path->addOval(r); |
125 } | 125 } |
126 private: | 126 private: |
127 typedef PathBench INHERITED; | 127 typedef PathBench INHERITED; |
128 }; | 128 }; |
129 | 129 |
130 class CirclePathBench: public PathBench { | 130 class CirclePathBench: public PathBench { |
131 public: | 131 public: |
132 CirclePathBench(void* param, Flags flags) : INHERITED(param, flags) {} | 132 CirclePathBench(Flags flags) : INHERITED(flags) {} |
133 | 133 |
134 virtual void appendName(SkString* name) SK_OVERRIDE { | 134 virtual void appendName(SkString* name) SK_OVERRIDE { |
135 name->append("circle"); | 135 name->append("circle"); |
136 } | 136 } |
137 virtual void makePath(SkPath* path) SK_OVERRIDE { | 137 virtual void makePath(SkPath* path) SK_OVERRIDE { |
138 path->addCircle(SkIntToScalar(20), SkIntToScalar(20), | 138 path->addCircle(SkIntToScalar(20), SkIntToScalar(20), |
139 SkIntToScalar(10)); | 139 SkIntToScalar(10)); |
140 } | 140 } |
141 private: | 141 private: |
142 typedef PathBench INHERITED; | 142 typedef PathBench INHERITED; |
143 }; | 143 }; |
144 | 144 |
145 class SawToothPathBench : public PathBench { | 145 class SawToothPathBench : public PathBench { |
146 public: | 146 public: |
147 SawToothPathBench(void* param, Flags flags) : INHERITED(param, flags) {} | 147 SawToothPathBench(Flags flags) : INHERITED(flags) {} |
148 | 148 |
149 virtual void appendName(SkString* name) SK_OVERRIDE { | 149 virtual void appendName(SkString* name) SK_OVERRIDE { |
150 name->append("sawtooth"); | 150 name->append("sawtooth"); |
151 } | 151 } |
152 virtual void makePath(SkPath* path) { | 152 virtual void makePath(SkPath* path) { |
153 SkScalar x = SkIntToScalar(20); | 153 SkScalar x = SkIntToScalar(20); |
154 SkScalar y = SkIntToScalar(20); | 154 SkScalar y = SkIntToScalar(20); |
155 const SkScalar x0 = x; | 155 const SkScalar x0 = x; |
156 const SkScalar dx = SK_Scalar1 * 5; | 156 const SkScalar dx = SK_Scalar1 * 5; |
157 const SkScalar dy = SK_Scalar1 * 10; | 157 const SkScalar dy = SK_Scalar1 * 10; |
158 | 158 |
159 path->moveTo(x, y); | 159 path->moveTo(x, y); |
160 for (int i = 0; i < 32; i++) { | 160 for (int i = 0; i < 32; i++) { |
161 x += dx; | 161 x += dx; |
162 path->lineTo(x, y - dy); | 162 path->lineTo(x, y - dy); |
163 x += dx; | 163 x += dx; |
164 path->lineTo(x, y + dy); | 164 path->lineTo(x, y + dy); |
165 } | 165 } |
166 path->lineTo(x, y + 2 * dy); | 166 path->lineTo(x, y + 2 * dy); |
167 path->lineTo(x0, y + 2 * dy); | 167 path->lineTo(x0, y + 2 * dy); |
168 path->close(); | 168 path->close(); |
169 } | 169 } |
170 virtual int complexity() SK_OVERRIDE { return 1; } | 170 virtual int complexity() SK_OVERRIDE { return 1; } |
171 private: | 171 private: |
172 typedef PathBench INHERITED; | 172 typedef PathBench INHERITED; |
173 }; | 173 }; |
174 | 174 |
175 class LongCurvedPathBench : public PathBench { | 175 class LongCurvedPathBench : public PathBench { |
176 public: | 176 public: |
177 LongCurvedPathBench(void * param, Flags flags) | 177 LongCurvedPathBench(Flags flags) : INHERITED(flags) {} |
178 : INHERITED(param, flags) { | |
179 } | |
180 | 178 |
181 virtual void appendName(SkString* name) SK_OVERRIDE { | 179 virtual void appendName(SkString* name) SK_OVERRIDE { |
182 name->append("long_curved"); | 180 name->append("long_curved"); |
183 } | 181 } |
184 virtual void makePath(SkPath* path) SK_OVERRIDE { | 182 virtual void makePath(SkPath* path) SK_OVERRIDE { |
185 SkRandom rand (12); | 183 SkRandom rand (12); |
186 int i; | 184 int i; |
187 for (i = 0; i < 100; i++) { | 185 for (i = 0; i < 100; i++) { |
188 path->quadTo(SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), | 186 path->quadTo(SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), |
189 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480)), | 187 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480)), |
190 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), | 188 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(640)), |
191 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480))); | 189 SkScalarMul(rand.nextUScalar1(), SkIntToScalar(480))); |
192 } | 190 } |
193 path->close(); | 191 path->close(); |
194 } | 192 } |
195 virtual int complexity() SK_OVERRIDE { return 2; } | 193 virtual int complexity() SK_OVERRIDE { return 2; } |
196 private: | 194 private: |
197 typedef PathBench INHERITED; | 195 typedef PathBench INHERITED; |
198 }; | 196 }; |
199 | 197 |
200 class LongLinePathBench : public PathBench { | 198 class LongLinePathBench : public PathBench { |
201 public: | 199 public: |
202 LongLinePathBench(void * param, Flags flags) | 200 LongLinePathBench(Flags flags) : INHERITED(flags) {} |
203 : INHERITED(param, flags) { | |
204 } | |
205 | 201 |
206 virtual void appendName(SkString* name) SK_OVERRIDE { | 202 virtual void appendName(SkString* name) SK_OVERRIDE { |
207 name->append("long_line"); | 203 name->append("long_line"); |
208 } | 204 } |
209 virtual void makePath(SkPath* path) SK_OVERRIDE { | 205 virtual void makePath(SkPath* path) SK_OVERRIDE { |
210 SkRandom rand; | 206 SkRandom rand; |
211 path->moveTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); | 207 path->moveTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); |
212 for (size_t i = 1; i < 100; i++) { | 208 for (size_t i = 1; i < 100; i++) { |
213 path->lineTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); | 209 path->lineTo(rand.nextUScalar1() * 640, rand.nextUScalar1() * 480); |
214 } | 210 } |
215 } | 211 } |
216 virtual int complexity() SK_OVERRIDE { return 2; } | 212 virtual int complexity() SK_OVERRIDE { return 2; } |
217 private: | 213 private: |
218 typedef PathBench INHERITED; | 214 typedef PathBench INHERITED; |
219 }; | 215 }; |
220 | 216 |
221 class RandomPathBench : public SkBenchmark { | 217 class RandomPathBench : public SkBenchmark { |
222 public: | 218 public: |
223 RandomPathBench(void* param) : INHERITED(param) { | 219 RandomPathBench() { |
224 fIsRendering = false; | 220 fIsRendering = false; |
225 } | 221 } |
226 | 222 |
227 protected: | 223 protected: |
228 void createData(int minVerbs, | 224 void createData(int minVerbs, |
229 int maxVerbs, | 225 int maxVerbs, |
230 bool allowMoves = true, | 226 bool allowMoves = true, |
231 SkRect* bounds = NULL) { | 227 SkRect* bounds = NULL) { |
232 SkRect tempBounds; | 228 SkRect tempBounds; |
233 if (NULL == bounds) { | 229 if (NULL == bounds) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 SkAutoTArray<SkPoint> fPoints; | 310 SkAutoTArray<SkPoint> fPoints; |
315 int fCurrPath; | 311 int fCurrPath; |
316 int fCurrVerb; | 312 int fCurrVerb; |
317 int fCurrPoint; | 313 int fCurrPoint; |
318 SkRandom fRandom; | 314 SkRandom fRandom; |
319 typedef SkBenchmark INHERITED; | 315 typedef SkBenchmark INHERITED; |
320 }; | 316 }; |
321 | 317 |
322 class PathCreateBench : public RandomPathBench { | 318 class PathCreateBench : public RandomPathBench { |
323 public: | 319 public: |
324 PathCreateBench(void* param) : INHERITED(param) { | 320 PathCreateBench() { |
325 } | 321 } |
326 | 322 |
327 protected: | 323 protected: |
328 virtual const char* onGetName() SK_OVERRIDE { | 324 virtual const char* onGetName() SK_OVERRIDE { |
329 return "path_create"; | 325 return "path_create"; |
330 } | 326 } |
331 | 327 |
332 virtual void onPreDraw() SK_OVERRIDE { | 328 virtual void onPreDraw() SK_OVERRIDE { |
333 this->createData(10, 100); | 329 this->createData(10, 100); |
334 fPaths.reset(kPathCnt); | 330 fPaths.reset(kPathCnt); |
(...skipping 16 matching lines...) Expand all Loading... |
351 // must be a pow 2 | 347 // must be a pow 2 |
352 kPathCnt = 1 << 5, | 348 kPathCnt = 1 << 5, |
353 }; | 349 }; |
354 SkAutoTArray<SkPath> fPaths; | 350 SkAutoTArray<SkPath> fPaths; |
355 | 351 |
356 typedef RandomPathBench INHERITED; | 352 typedef RandomPathBench INHERITED; |
357 }; | 353 }; |
358 | 354 |
359 class PathCopyBench : public RandomPathBench { | 355 class PathCopyBench : public RandomPathBench { |
360 public: | 356 public: |
361 PathCopyBench(void* param) : INHERITED(param) { | 357 PathCopyBench() { |
362 } | 358 } |
363 | 359 |
364 protected: | 360 protected: |
365 virtual const char* onGetName() SK_OVERRIDE { | 361 virtual const char* onGetName() SK_OVERRIDE { |
366 return "path_copy"; | 362 return "path_copy"; |
367 } | 363 } |
368 virtual void onPreDraw() SK_OVERRIDE { | 364 virtual void onPreDraw() SK_OVERRIDE { |
369 this->createData(10, 100); | 365 this->createData(10, 100); |
370 fPaths.reset(kPathCnt); | 366 fPaths.reset(kPathCnt); |
371 fCopies.reset(kPathCnt); | 367 fCopies.reset(kPathCnt); |
(...skipping 19 matching lines...) Expand all Loading... |
391 kPathCnt = 1 << 5, | 387 kPathCnt = 1 << 5, |
392 }; | 388 }; |
393 SkAutoTArray<SkPath> fPaths; | 389 SkAutoTArray<SkPath> fPaths; |
394 SkAutoTArray<SkPath> fCopies; | 390 SkAutoTArray<SkPath> fCopies; |
395 | 391 |
396 typedef RandomPathBench INHERITED; | 392 typedef RandomPathBench INHERITED; |
397 }; | 393 }; |
398 | 394 |
399 class PathTransformBench : public RandomPathBench { | 395 class PathTransformBench : public RandomPathBench { |
400 public: | 396 public: |
401 PathTransformBench(bool inPlace, void* param) | 397 PathTransformBench(bool inPlace) : fInPlace(inPlace) {} |
402 : INHERITED(param) | |
403 , fInPlace(inPlace) { | |
404 } | |
405 | 398 |
406 protected: | 399 protected: |
407 virtual const char* onGetName() SK_OVERRIDE { | 400 virtual const char* onGetName() SK_OVERRIDE { |
408 return fInPlace ? "path_transform_in_place" : "path_transform_copy"; | 401 return fInPlace ? "path_transform_in_place" : "path_transform_copy"; |
409 } | 402 } |
410 | 403 |
411 virtual void onPreDraw() SK_OVERRIDE { | 404 virtual void onPreDraw() SK_OVERRIDE { |
412 fMatrix.setScale(5 * SK_Scalar1, 6 * SK_Scalar1); | 405 fMatrix.setScale(5 * SK_Scalar1, 6 * SK_Scalar1); |
413 this->createData(10, 100); | 406 this->createData(10, 100); |
414 fPaths.reset(kPathCnt); | 407 fPaths.reset(kPathCnt); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 SkAutoTArray<SkPath> fPaths; | 440 SkAutoTArray<SkPath> fPaths; |
448 SkAutoTArray<SkPath> fTransformed; | 441 SkAutoTArray<SkPath> fTransformed; |
449 | 442 |
450 SkMatrix fMatrix; | 443 SkMatrix fMatrix; |
451 bool fInPlace; | 444 bool fInPlace; |
452 typedef RandomPathBench INHERITED; | 445 typedef RandomPathBench INHERITED; |
453 }; | 446 }; |
454 | 447 |
455 class PathEqualityBench : public RandomPathBench { | 448 class PathEqualityBench : public RandomPathBench { |
456 public: | 449 public: |
457 PathEqualityBench(void* param) | 450 PathEqualityBench() { } |
458 : INHERITED(param) { | |
459 } | |
460 | 451 |
461 protected: | 452 protected: |
462 virtual const char* onGetName() SK_OVERRIDE { | 453 virtual const char* onGetName() SK_OVERRIDE { |
463 return "path_equality_50%"; | 454 return "path_equality_50%"; |
464 } | 455 } |
465 | 456 |
466 virtual void onPreDraw() SK_OVERRIDE { | 457 virtual void onPreDraw() SK_OVERRIDE { |
467 fParity = 0; | 458 fParity = 0; |
468 this->createData(10, 100); | 459 this->createData(10, 100); |
469 fPaths.reset(kPathCnt); | 460 fPaths.reset(kPathCnt); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 public: | 493 public: |
503 enum AddType { | 494 enum AddType { |
504 kAdd_AddType, | 495 kAdd_AddType, |
505 kAddTrans_AddType, | 496 kAddTrans_AddType, |
506 kAddMatrix_AddType, | 497 kAddMatrix_AddType, |
507 kPathTo_AddType, | 498 kPathTo_AddType, |
508 kReverseAdd_AddType, | 499 kReverseAdd_AddType, |
509 kReversePathTo_AddType, | 500 kReversePathTo_AddType, |
510 }; | 501 }; |
511 | 502 |
512 SkBench_AddPathTest(AddType type, void* param) | 503 SkBench_AddPathTest(AddType type) : fType(type) { |
513 : INHERITED(param) | |
514 , fType(type) { | |
515 fMatrix.setRotate(60 * SK_Scalar1); | 504 fMatrix.setRotate(60 * SK_Scalar1); |
516 } | 505 } |
517 | 506 |
518 protected: | 507 protected: |
519 virtual const char* onGetName() SK_OVERRIDE { | 508 virtual const char* onGetName() SK_OVERRIDE { |
520 switch (fType) { | 509 switch (fType) { |
521 case kAdd_AddType: | 510 case kAdd_AddType: |
522 return "path_add_path"; | 511 return "path_add_path"; |
523 case kAddTrans_AddType: | 512 case kAddTrans_AddType: |
524 return "path_add_path_trans"; | 513 return "path_add_path_trans"; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 typedef RandomPathBench INHERITED; | 603 typedef RandomPathBench INHERITED; |
615 }; | 604 }; |
616 | 605 |
617 | 606 |
618 class CirclesBench : public SkBenchmark { | 607 class CirclesBench : public SkBenchmark { |
619 protected: | 608 protected: |
620 SkString fName; | 609 SkString fName; |
621 Flags fFlags; | 610 Flags fFlags; |
622 | 611 |
623 public: | 612 public: |
624 CirclesBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) { | 613 CirclesBench(Flags flags) : fFlags(flags) { |
625 fName.printf("circles_%s", fFlags & kStroke_Flag ? "stroke" : "fill"); | 614 fName.printf("circles_%s", fFlags & kStroke_Flag ? "stroke" : "fill"); |
626 } | 615 } |
627 | 616 |
628 protected: | 617 protected: |
629 virtual const char* onGetName() SK_OVERRIDE { | 618 virtual const char* onGetName() SK_OVERRIDE { |
630 return fName.c_str(); | 619 return fName.c_str(); |
631 } | 620 } |
632 | 621 |
633 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 622 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
634 SkPaint paint; | 623 SkPaint paint; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 // Chrome creates its own round rects with each corner possibly being different. | 663 // Chrome creates its own round rects with each corner possibly being different. |
675 // In its "zero radius" incarnation it creates degenerate round rects. | 664 // In its "zero radius" incarnation it creates degenerate round rects. |
676 // Note: PathTest::test_arb_round_rect_is_convex and | 665 // Note: PathTest::test_arb_round_rect_is_convex and |
677 // test_arb_zero_rad_round_rect_is_rect perform almost exactly | 666 // test_arb_zero_rad_round_rect_is_rect perform almost exactly |
678 // the same test (but with no drawing) | 667 // the same test (but with no drawing) |
679 class ArbRoundRectBench : public SkBenchmark { | 668 class ArbRoundRectBench : public SkBenchmark { |
680 protected: | 669 protected: |
681 SkString fName; | 670 SkString fName; |
682 | 671 |
683 public: | 672 public: |
684 ArbRoundRectBench(void* param, bool zeroRad) : INHERITED(param), fZeroRad(ze
roRad) { | 673 ArbRoundRectBench(bool zeroRad) : fZeroRad(zeroRad) { |
685 if (zeroRad) { | 674 if (zeroRad) { |
686 fName.printf("zeroradroundrect"); | 675 fName.printf("zeroradroundrect"); |
687 } else { | 676 } else { |
688 fName.printf("arbroundrect"); | 677 fName.printf("arbroundrect"); |
689 } | 678 } |
690 } | 679 } |
691 | 680 |
692 protected: | 681 protected: |
693 virtual const char* onGetName() SK_OVERRIDE { | 682 virtual const char* onGetName() SK_OVERRIDE { |
694 return fName.c_str(); | 683 return fName.c_str(); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 }; | 764 }; |
776 | 765 |
777 class ConservativelyContainsBench : public SkBenchmark { | 766 class ConservativelyContainsBench : public SkBenchmark { |
778 public: | 767 public: |
779 enum Type { | 768 enum Type { |
780 kRect_Type, | 769 kRect_Type, |
781 kRoundRect_Type, | 770 kRoundRect_Type, |
782 kOval_Type, | 771 kOval_Type, |
783 }; | 772 }; |
784 | 773 |
785 ConservativelyContainsBench(void* param, Type type) : INHERITED(param) { | 774 ConservativelyContainsBench(Type type) { |
786 fIsRendering = false; | 775 fIsRendering = false; |
787 fParity = false; | 776 fParity = false; |
788 fName = "conservatively_contains_"; | 777 fName = "conservatively_contains_"; |
789 switch (type) { | 778 switch (type) { |
790 case kRect_Type: | 779 case kRect_Type: |
791 fName.append("rect"); | 780 fName.append("rect"); |
792 fPath.addRect(kBaseRect); | 781 fPath.addRect(kBaseRect); |
793 break; | 782 break; |
794 case kRoundRect_Type: | 783 case kRoundRect_Type: |
795 fName.append("round_rect"); | 784 fName.append("round_rect"); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 typedef SkBenchmark INHERITED; | 840 typedef SkBenchmark INHERITED; |
852 }; | 841 }; |
853 | 842 |
854 /////////////////////////////////////////////////////////////////////////////// | 843 /////////////////////////////////////////////////////////////////////////////// |
855 | 844 |
856 #include "SkGeometry.h" | 845 #include "SkGeometry.h" |
857 | 846 |
858 class ConicBench_Chop5 : public SkBenchmark { | 847 class ConicBench_Chop5 : public SkBenchmark { |
859 SkConic fRQ; | 848 SkConic fRQ; |
860 public: | 849 public: |
861 ConicBench_Chop5(void* param) : INHERITED(param) { | 850 ConicBench_Chop5() { |
862 fRQ.fPts[0].set(0, 0); | 851 fRQ.fPts[0].set(0, 0); |
863 fRQ.fPts[1].set(100, 0); | 852 fRQ.fPts[1].set(100, 0); |
864 fRQ.fPts[2].set(100, 100); | 853 fRQ.fPts[2].set(100, 100); |
865 fRQ.fW = SkScalarCos(SK_ScalarPI/4); | 854 fRQ.fW = SkScalarCos(SK_ScalarPI/4); |
866 } | 855 } |
867 | 856 |
868 private: | 857 private: |
869 virtual const char* onGetName() SK_OVERRIDE { | 858 virtual const char* onGetName() SK_OVERRIDE { |
870 return "ratquad-chop-0.5"; | 859 return "ratquad-chop-0.5"; |
871 } | 860 } |
872 | 861 |
873 virtual void onDraw(SkCanvas*) SK_OVERRIDE { | 862 virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
874 SkConic dst[2]; | 863 SkConic dst[2]; |
875 for (int i = 0; i < this->getLoops(); ++i) { | 864 for (int i = 0; i < this->getLoops(); ++i) { |
876 fRQ.chopAt(0.5f, dst); | 865 fRQ.chopAt(0.5f, dst); |
877 } | 866 } |
878 } | 867 } |
879 | 868 |
880 typedef SkBenchmark INHERITED; | 869 typedef SkBenchmark INHERITED; |
881 }; | 870 }; |
882 | 871 |
883 class ConicBench_ChopHalf : public SkBenchmark { | 872 class ConicBench_ChopHalf : public SkBenchmark { |
884 SkConic fRQ; | 873 SkConic fRQ; |
885 public: | 874 public: |
886 ConicBench_ChopHalf(void* param) : INHERITED(param) { | 875 ConicBench_ChopHalf() { |
887 fRQ.fPts[0].set(0, 0); | 876 fRQ.fPts[0].set(0, 0); |
888 fRQ.fPts[1].set(100, 0); | 877 fRQ.fPts[1].set(100, 0); |
889 fRQ.fPts[2].set(100, 100); | 878 fRQ.fPts[2].set(100, 100); |
890 fRQ.fW = SkScalarCos(SK_ScalarPI/4); | 879 fRQ.fW = SkScalarCos(SK_ScalarPI/4); |
891 } | 880 } |
892 | 881 |
893 private: | 882 private: |
894 virtual const char* onGetName() SK_OVERRIDE { | 883 virtual const char* onGetName() SK_OVERRIDE { |
895 return "ratquad-chop-half"; | 884 return "ratquad-chop-half"; |
896 } | 885 } |
(...skipping 16 matching lines...) Expand all Loading... |
913 } | 902 } |
914 if (rand.nextUScalar1() > 0.5f) { | 903 if (rand.nextUScalar1() > 0.5f) { |
915 conic->fW = rand.nextUScalar1(); | 904 conic->fW = rand.nextUScalar1(); |
916 } else { | 905 } else { |
917 conic->fW = 1 + rand.nextUScalar1() * 4; | 906 conic->fW = 1 + rand.nextUScalar1() * 4; |
918 } | 907 } |
919 } | 908 } |
920 | 909 |
921 class ConicBench : public SkBenchmark { | 910 class ConicBench : public SkBenchmark { |
922 public: | 911 public: |
923 ConicBench(void* param) : INHERITED(param) { | 912 ConicBench() { |
924 SkRandom rand; | 913 SkRandom rand; |
925 for (int i = 0; i < CONICS; ++i) { | 914 for (int i = 0; i < CONICS; ++i) { |
926 rand_conic(&fConics[i], rand); | 915 rand_conic(&fConics[i], rand); |
927 } | 916 } |
928 fIsRendering = false; | 917 fIsRendering = false; |
929 } | 918 } |
930 | 919 |
931 protected: | 920 protected: |
932 enum { | 921 enum { |
933 CONICS = 100 | 922 CONICS = 100 |
934 }; | 923 }; |
935 SkConic fConics[CONICS]; | 924 SkConic fConics[CONICS]; |
936 | 925 |
937 private: | 926 private: |
938 typedef SkBenchmark INHERITED; | 927 typedef SkBenchmark INHERITED; |
939 }; | 928 }; |
940 | 929 |
941 class ConicBench_ComputeError : public ConicBench { | 930 class ConicBench_ComputeError : public ConicBench { |
942 public: | 931 public: |
943 ConicBench_ComputeError(void* param) : INHERITED(param) {} | 932 ConicBench_ComputeError() {} |
944 | 933 |
945 protected: | 934 protected: |
946 virtual const char* onGetName() SK_OVERRIDE { | 935 virtual const char* onGetName() SK_OVERRIDE { |
947 return "conic-compute-error"; | 936 return "conic-compute-error"; |
948 } | 937 } |
949 | 938 |
950 virtual void onDraw(SkCanvas*) SK_OVERRIDE { | 939 virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
951 SkVector err; | 940 SkVector err; |
952 for (int i = 0; i < this->getLoops(); ++i) { | 941 for (int i = 0; i < this->getLoops(); ++i) { |
953 for (int j = 0; j < CONICS; ++j) { | 942 for (int j = 0; j < CONICS; ++j) { |
954 fConics[j].computeAsQuadError(&err); | 943 fConics[j].computeAsQuadError(&err); |
955 } | 944 } |
956 } | 945 } |
957 } | 946 } |
958 | 947 |
959 private: | 948 private: |
960 typedef ConicBench INHERITED; | 949 typedef ConicBench INHERITED; |
961 }; | 950 }; |
962 | 951 |
963 class ConicBench_asQuadTol : public ConicBench { | 952 class ConicBench_asQuadTol : public ConicBench { |
964 public: | 953 public: |
965 ConicBench_asQuadTol(void* param) : INHERITED(param) {} | 954 ConicBench_asQuadTol() {} |
966 | 955 |
967 protected: | 956 protected: |
968 virtual const char* onGetName() SK_OVERRIDE { | 957 virtual const char* onGetName() SK_OVERRIDE { |
969 return "conic-asQuadTol"; | 958 return "conic-asQuadTol"; |
970 } | 959 } |
971 | 960 |
972 virtual void onDraw(SkCanvas*) SK_OVERRIDE { | 961 virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
973 for (int i = 0; i < this->getLoops(); ++i) { | 962 for (int i = 0; i < this->getLoops(); ++i) { |
974 for (int j = 0; j < CONICS; ++j) { | 963 for (int j = 0; j < CONICS; ++j) { |
975 fConics[j].asQuadTol(SK_ScalarHalf); | 964 fConics[j].asQuadTol(SK_ScalarHalf); |
976 } | 965 } |
977 } | 966 } |
978 } | 967 } |
979 | 968 |
980 private: | 969 private: |
981 typedef ConicBench INHERITED; | 970 typedef ConicBench INHERITED; |
982 }; | 971 }; |
983 | 972 |
984 class ConicBench_quadPow2 : public ConicBench { | 973 class ConicBench_quadPow2 : public ConicBench { |
985 public: | 974 public: |
986 ConicBench_quadPow2(void* param) : INHERITED(param) {} | 975 ConicBench_quadPow2() {} |
987 | 976 |
988 protected: | 977 protected: |
989 virtual const char* onGetName() SK_OVERRIDE { | 978 virtual const char* onGetName() SK_OVERRIDE { |
990 return "conic-quadPow2"; | 979 return "conic-quadPow2"; |
991 } | 980 } |
992 | 981 |
993 virtual void onDraw(SkCanvas*) SK_OVERRIDE { | 982 virtual void onDraw(SkCanvas*) SK_OVERRIDE { |
994 for (int i = 0; i < this->getLoops(); ++i) { | 983 for (int i = 0; i < this->getLoops(); ++i) { |
995 for (int j = 0; j < CONICS; ++j) { | 984 for (int j = 0; j < CONICS; ++j) { |
996 fConics[j].computeQuadPOW2(SK_ScalarHalf); | 985 fConics[j].computeQuadPOW2(SK_ScalarHalf); |
997 } | 986 } |
998 } | 987 } |
999 } | 988 } |
1000 | 989 |
1001 private: | 990 private: |
1002 typedef ConicBench INHERITED; | 991 typedef ConicBench INHERITED; |
1003 }; | 992 }; |
1004 | 993 |
1005 /////////////////////////////////////////////////////////////////////////////// | 994 /////////////////////////////////////////////////////////////////////////////// |
1006 | 995 |
1007 const SkRect ConservativelyContainsBench::kBounds = SkRect::MakeWH(SkIntToScalar
(100), SkIntToScalar(100)); | 996 const SkRect ConservativelyContainsBench::kBounds = SkRect::MakeWH(SkIntToScalar
(100), SkIntToScalar(100)); |
1008 const SkSize ConservativelyContainsBench::kQueryMin = SkSize::Make(SkIntToScalar
(1), SkIntToScalar(1)); | 997 const SkSize ConservativelyContainsBench::kQueryMin = SkSize::Make(SkIntToScalar
(1), SkIntToScalar(1)); |
1009 const SkSize ConservativelyContainsBench::kQueryMax = SkSize::Make(SkIntToScalar
(40), SkIntToScalar(40)); | 998 const SkSize ConservativelyContainsBench::kQueryMax = SkSize::Make(SkIntToScalar
(40), SkIntToScalar(40)); |
1010 const SkRect ConservativelyContainsBench::kBaseRect = SkRect::MakeXYWH(SkIntToSc
alar(25), SkIntToScalar(25), SkIntToScalar(50), SkIntToScalar(50)); | 999 const SkRect ConservativelyContainsBench::kBaseRect = SkRect::MakeXYWH(SkIntToSc
alar(25), SkIntToScalar(25), SkIntToScalar(50), SkIntToScalar(50)); |
1011 const SkScalar ConservativelyContainsBench::kRRRadii[2] = {SkIntToScalar(5), SkI
ntToScalar(10)}; | 1000 const SkScalar ConservativelyContainsBench::kRRRadii[2] = {SkIntToScalar(5), SkI
ntToScalar(10)}; |
1012 | 1001 |
1013 DEF_BENCH( return new TrianglePathBench(p, FLAGS00); ) | 1002 DEF_BENCH( return new TrianglePathBench(FLAGS00); ) |
1014 DEF_BENCH( return new TrianglePathBench(p, FLAGS01); ) | 1003 DEF_BENCH( return new TrianglePathBench(FLAGS01); ) |
1015 DEF_BENCH( return new TrianglePathBench(p, FLAGS10); ) | 1004 DEF_BENCH( return new TrianglePathBench(FLAGS10); ) |
1016 DEF_BENCH( return new TrianglePathBench(p, FLAGS11); ) | 1005 DEF_BENCH( return new TrianglePathBench(FLAGS11); ) |
1017 | 1006 |
1018 DEF_BENCH( return new RectPathBench(p, FLAGS00); ) | 1007 DEF_BENCH( return new RectPathBench(FLAGS00); ) |
1019 DEF_BENCH( return new RectPathBench(p, FLAGS01); ) | 1008 DEF_BENCH( return new RectPathBench(FLAGS01); ) |
1020 DEF_BENCH( return new RectPathBench(p, FLAGS10); ) | 1009 DEF_BENCH( return new RectPathBench(FLAGS10); ) |
1021 DEF_BENCH( return new RectPathBench(p, FLAGS11); ) | 1010 DEF_BENCH( return new RectPathBench(FLAGS11); ) |
1022 | 1011 |
1023 DEF_BENCH( return new OvalPathBench(p, FLAGS00); ) | 1012 DEF_BENCH( return new OvalPathBench(FLAGS00); ) |
1024 DEF_BENCH( return new OvalPathBench(p, FLAGS01); ) | 1013 DEF_BENCH( return new OvalPathBench(FLAGS01); ) |
1025 DEF_BENCH( return new OvalPathBench(p, FLAGS10); ) | 1014 DEF_BENCH( return new OvalPathBench(FLAGS10); ) |
1026 DEF_BENCH( return new OvalPathBench(p, FLAGS11); ) | 1015 DEF_BENCH( return new OvalPathBench(FLAGS11); ) |
1027 | 1016 |
1028 DEF_BENCH( return new CirclePathBench(p, FLAGS00); ) | 1017 DEF_BENCH( return new CirclePathBench(FLAGS00); ) |
1029 DEF_BENCH( return new CirclePathBench(p, FLAGS01); ) | 1018 DEF_BENCH( return new CirclePathBench(FLAGS01); ) |
1030 DEF_BENCH( return new CirclePathBench(p, FLAGS10); ) | 1019 DEF_BENCH( return new CirclePathBench(FLAGS10); ) |
1031 DEF_BENCH( return new CirclePathBench(p, FLAGS11); ) | 1020 DEF_BENCH( return new CirclePathBench(FLAGS11); ) |
1032 | 1021 |
1033 DEF_BENCH( return new SawToothPathBench(p, FLAGS00); ) | 1022 DEF_BENCH( return new SawToothPathBench(FLAGS00); ) |
1034 DEF_BENCH( return new SawToothPathBench(p, FLAGS01); ) | 1023 DEF_BENCH( return new SawToothPathBench(FLAGS01); ) |
1035 | 1024 |
1036 DEF_BENCH( return new LongCurvedPathBench(p, FLAGS00); ) | 1025 DEF_BENCH( return new LongCurvedPathBench(FLAGS00); ) |
1037 DEF_BENCH( return new LongCurvedPathBench(p, FLAGS01); ) | 1026 DEF_BENCH( return new LongCurvedPathBench(FLAGS01); ) |
1038 DEF_BENCH( return new LongLinePathBench(p, FLAGS00); ) | 1027 DEF_BENCH( return new LongLinePathBench(FLAGS00); ) |
1039 DEF_BENCH( return new LongLinePathBench(p, FLAGS01); ) | 1028 DEF_BENCH( return new LongLinePathBench(FLAGS01); ) |
1040 | 1029 |
1041 DEF_BENCH( return new PathCreateBench(p); ) | 1030 DEF_BENCH( return new PathCreateBench(); ) |
1042 DEF_BENCH( return new PathCopyBench(p); ) | 1031 DEF_BENCH( return new PathCopyBench(); ) |
1043 DEF_BENCH( return new PathTransformBench(true, p); ) | 1032 DEF_BENCH( return new PathTransformBench(true); ) |
1044 DEF_BENCH( return new PathTransformBench(false, p); ) | 1033 DEF_BENCH( return new PathTransformBench(false); ) |
1045 DEF_BENCH( return new PathEqualityBench(p); ) | 1034 DEF_BENCH( return new PathEqualityBench(); ) |
1046 | 1035 |
1047 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAdd_AddType, p);
) | 1036 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAdd_AddType); ) |
1048 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAddTrans_AddType
, p); ) | 1037 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAddTrans_AddType
); ) |
1049 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAddMatrix_AddTyp
e, p); ) | 1038 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kAddMatrix_AddTyp
e); ) |
1050 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kPathTo_AddType,
p); ) | 1039 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kPathTo_AddType);
) |
1051 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kReverseAdd_AddTy
pe, p); ) | 1040 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kReverseAdd_AddTy
pe); ) |
1052 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kReversePathTo_Ad
dType, p); ) | 1041 DEF_BENCH( return new SkBench_AddPathTest(SkBench_AddPathTest::kReversePathTo_Ad
dType); ) |
1053 | 1042 |
1054 DEF_BENCH( return new CirclesBench(p, FLAGS00); ) | 1043 DEF_BENCH( return new CirclesBench(FLAGS00); ) |
1055 DEF_BENCH( return new CirclesBench(p, FLAGS01); ) | 1044 DEF_BENCH( return new CirclesBench(FLAGS01); ) |
1056 DEF_BENCH( return new ArbRoundRectBench(p, false); ) | 1045 DEF_BENCH( return new ArbRoundRectBench(false); ) |
1057 DEF_BENCH( return new ArbRoundRectBench(p, true); ) | 1046 DEF_BENCH( return new ArbRoundRectBench(true); ) |
1058 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench
::kRect_Type); ) | 1047 DEF_BENCH( return new ConservativelyContainsBench(ConservativelyContainsBench::k
Rect_Type); ) |
1059 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench
::kRoundRect_Type); ) | 1048 DEF_BENCH( return new ConservativelyContainsBench(ConservativelyContainsBench::k
RoundRect_Type); ) |
1060 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench
::kOval_Type); ) | 1049 DEF_BENCH( return new ConservativelyContainsBench(ConservativelyContainsBench::k
Oval_Type); ) |
1061 | 1050 |
1062 DEF_BENCH( return new ConicBench_Chop5(p) ) | 1051 DEF_BENCH( return new ConicBench_Chop5() ) |
1063 DEF_BENCH( return new ConicBench_ChopHalf(p) ) | 1052 DEF_BENCH( return new ConicBench_ChopHalf() ) |
1064 DEF_BENCH( return new ConicBench_ComputeError(p) ) | 1053 DEF_BENCH( return new ConicBench_ComputeError() ) |
1065 DEF_BENCH( return new ConicBench_asQuadTol(p) ) | 1054 DEF_BENCH( return new ConicBench_asQuadTol() ) |
1066 DEF_BENCH( return new ConicBench_quadPow2(p) ) | 1055 DEF_BENCH( return new ConicBench_quadPow2() ) |
OLD | NEW |