| 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 |