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

Side by Side Diff: bench/PathBench.cpp

Issue 23478013: Major bench refactoring. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: merge with head agani Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « bench/MutexBench.cpp ('k') | bench/PathIterBench.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 11 matching lines...) Expand all
22 22
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 enum { N = SkBENCHLOOP(1000) };
33 public: 32 public:
34 PathBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) { 33 PathBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) {
35 fPaint.setStyle(flags & kStroke_Flag ? SkPaint::kStroke_Style : 34 fPaint.setStyle(flags & kStroke_Flag ? SkPaint::kStroke_Style :
36 SkPaint::kFill_Style); 35 SkPaint::kFill_Style);
37 fPaint.setStrokeWidth(SkIntToScalar(5)); 36 fPaint.setStrokeWidth(SkIntToScalar(5));
38 fPaint.setStrokeJoin(SkPaint::kBevel_Join); 37 fPaint.setStrokeJoin(SkPaint::kBevel_Join);
39 } 38 }
40 39
41 virtual void appendName(SkString*) = 0; 40 virtual void appendName(SkString*) = 0;
42 virtual void makePath(SkPath*) = 0; 41 virtual void makePath(SkPath*) = 0;
(...skipping 13 matching lines...) Expand all
56 this->setupPaint(&paint); 55 this->setupPaint(&paint);
57 56
58 SkPath path; 57 SkPath path;
59 this->makePath(&path); 58 this->makePath(&path);
60 if (fFlags & kBig_Flag) { 59 if (fFlags & kBig_Flag) {
61 SkMatrix m; 60 SkMatrix m;
62 m.setScale(SkIntToScalar(10), SkIntToScalar(10)); 61 m.setScale(SkIntToScalar(10), SkIntToScalar(10));
63 path.transform(m); 62 path.transform(m);
64 } 63 }
65 64
66 int count = N; 65 int count = this->getLoops();
67 if (fFlags & kBig_Flag) { 66 if (fFlags & kBig_Flag) {
68 count >>= 2; 67 count >>= 2;
69 } 68 }
70 count >>= (3 * complexity()); 69 count >>= (3 * complexity());
71 70
72 for (int i = 0; i < count; i++) { 71 for (int i = 0; i < count; i++) {
73 canvas->drawPath(path, paint); 72 canvas->drawPath(path, paint);
74 } 73 }
75 } 74 }
76 75
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 SkRandom fRandom; 318 SkRandom fRandom;
320 typedef SkBenchmark INHERITED; 319 typedef SkBenchmark INHERITED;
321 }; 320 };
322 321
323 class PathCreateBench : public RandomPathBench { 322 class PathCreateBench : public RandomPathBench {
324 public: 323 public:
325 PathCreateBench(void* param) : INHERITED(param) { 324 PathCreateBench(void* param) : INHERITED(param) {
326 } 325 }
327 326
328 protected: 327 protected:
329 enum { N = SkBENCHLOOP(5000) };
330
331 virtual const char* onGetName() SK_OVERRIDE { 328 virtual const char* onGetName() SK_OVERRIDE {
332 return "path_create"; 329 return "path_create";
333 } 330 }
334 331
335 virtual void onPreDraw() SK_OVERRIDE { 332 virtual void onPreDraw() SK_OVERRIDE {
336 this->createData(10, 100); 333 this->createData(10, 100);
337 fPaths.reset(kPathCnt); 334 fPaths.reset(kPathCnt);
338 } 335 }
339 336
340 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 337 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
341 for (int i = 0; i < N; ++i) { 338 for (int i = 0; i < this->getLoops(); ++i) {
342 this->makePath(&fPaths[i & (kPathCnt - 1)]); 339 this->makePath(&fPaths[i & (kPathCnt - 1)]);
343 } 340 }
344 this->restartMakingPaths(); 341 this->restartMakingPaths();
345 } 342 }
346 343
347 virtual void onPostDraw() SK_OVERRIDE { 344 virtual void onPostDraw() SK_OVERRIDE {
348 this->finishedMakingPaths(); 345 this->finishedMakingPaths();
349 fPaths.reset(0); 346 fPaths.reset(0);
350 } 347 }
351 348
352 private: 349 private:
353 enum { 350 enum {
354 // must be a pow 2 351 // must be a pow 2
355 kPathCnt = 1 << 5, 352 kPathCnt = 1 << 5,
356 }; 353 };
357 SkAutoTArray<SkPath> fPaths; 354 SkAutoTArray<SkPath> fPaths;
358 355
359 typedef RandomPathBench INHERITED; 356 typedef RandomPathBench INHERITED;
360 }; 357 };
361 358
362 class PathCopyBench : public RandomPathBench { 359 class PathCopyBench : public RandomPathBench {
363 public: 360 public:
364 PathCopyBench(void* param) : INHERITED(param) { 361 PathCopyBench(void* param) : INHERITED(param) {
365 } 362 }
366 363
367 protected: 364 protected:
368 enum { N = SkBENCHLOOP(30000) };
369
370 virtual const char* onGetName() SK_OVERRIDE { 365 virtual const char* onGetName() SK_OVERRIDE {
371 return "path_copy"; 366 return "path_copy";
372 } 367 }
373 virtual void onPreDraw() SK_OVERRIDE { 368 virtual void onPreDraw() SK_OVERRIDE {
374 this->createData(10, 100); 369 this->createData(10, 100);
375 fPaths.reset(kPathCnt); 370 fPaths.reset(kPathCnt);
376 fCopies.reset(kPathCnt); 371 fCopies.reset(kPathCnt);
377 for (int i = 0; i < kPathCnt; ++i) { 372 for (int i = 0; i < kPathCnt; ++i) {
378 this->makePath(&fPaths[i]); 373 this->makePath(&fPaths[i]);
379 } 374 }
380 this->finishedMakingPaths(); 375 this->finishedMakingPaths();
381 } 376 }
382 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 377 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
383 for (int i = 0; i < N; ++i) { 378 for (int i = 0; i < this->getLoops(); ++i) {
384 int idx = i & (kPathCnt - 1); 379 int idx = i & (kPathCnt - 1);
385 fCopies[idx] = fPaths[idx]; 380 fCopies[idx] = fPaths[idx];
386 } 381 }
387 } 382 }
388 virtual void onPostDraw() SK_OVERRIDE { 383 virtual void onPostDraw() SK_OVERRIDE {
389 fPaths.reset(0); 384 fPaths.reset(0);
390 fCopies.reset(0); 385 fCopies.reset(0);
391 } 386 }
392 387
393 private: 388 private:
394 enum { 389 enum {
395 // must be a pow 2 390 // must be a pow 2
396 kPathCnt = 1 << 5, 391 kPathCnt = 1 << 5,
397 }; 392 };
398 SkAutoTArray<SkPath> fPaths; 393 SkAutoTArray<SkPath> fPaths;
399 SkAutoTArray<SkPath> fCopies; 394 SkAutoTArray<SkPath> fCopies;
400 395
401 typedef RandomPathBench INHERITED; 396 typedef RandomPathBench INHERITED;
402 }; 397 };
403 398
404 class PathTransformBench : public RandomPathBench { 399 class PathTransformBench : public RandomPathBench {
405 public: 400 public:
406 PathTransformBench(bool inPlace, void* param) 401 PathTransformBench(bool inPlace, void* param)
407 : INHERITED(param) 402 : INHERITED(param)
408 , fInPlace(inPlace) { 403 , fInPlace(inPlace) {
409 } 404 }
410 405
411 protected: 406 protected:
412 enum { N = SkBENCHLOOP(30000) };
413
414 virtual const char* onGetName() SK_OVERRIDE { 407 virtual const char* onGetName() SK_OVERRIDE {
415 return fInPlace ? "path_transform_in_place" : "path_transform_copy"; 408 return fInPlace ? "path_transform_in_place" : "path_transform_copy";
416 } 409 }
417 410
418 virtual void onPreDraw() SK_OVERRIDE { 411 virtual void onPreDraw() SK_OVERRIDE {
419 fMatrix.setScale(5 * SK_Scalar1, 6 * SK_Scalar1); 412 fMatrix.setScale(5 * SK_Scalar1, 6 * SK_Scalar1);
420 this->createData(10, 100); 413 this->createData(10, 100);
421 fPaths.reset(kPathCnt); 414 fPaths.reset(kPathCnt);
422 for (int i = 0; i < kPathCnt; ++i) { 415 for (int i = 0; i < kPathCnt; ++i) {
423 this->makePath(&fPaths[i]); 416 this->makePath(&fPaths[i]);
424 } 417 }
425 this->finishedMakingPaths(); 418 this->finishedMakingPaths();
426 if (!fInPlace) { 419 if (!fInPlace) {
427 fTransformed.reset(kPathCnt); 420 fTransformed.reset(kPathCnt);
428 } 421 }
429 } 422 }
430 423
431 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 424 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
432 if (fInPlace) { 425 if (fInPlace) {
433 for (int i = 0; i < N; ++i) { 426 for (int i = 0; i < this->getLoops(); ++i) {
434 fPaths[i & (kPathCnt - 1)].transform(fMatrix); 427 fPaths[i & (kPathCnt - 1)].transform(fMatrix);
435 } 428 }
436 } else { 429 } else {
437 for (int i = 0; i < N; ++i) { 430 for (int i = 0; i < this->getLoops(); ++i) {
438 int idx = i & (kPathCnt - 1); 431 int idx = i & (kPathCnt - 1);
439 fPaths[idx].transform(fMatrix, &fTransformed[idx]); 432 fPaths[idx].transform(fMatrix, &fTransformed[idx]);
440 } 433 }
441 } 434 }
442 } 435 }
443 436
444 virtual void onPostDraw() SK_OVERRIDE { 437 virtual void onPostDraw() SK_OVERRIDE {
445 fPaths.reset(0); 438 fPaths.reset(0);
446 fTransformed.reset(0); 439 fTransformed.reset(0);
447 } 440 }
(...skipping 11 matching lines...) Expand all
459 typedef RandomPathBench INHERITED; 452 typedef RandomPathBench INHERITED;
460 }; 453 };
461 454
462 class PathEqualityBench : public RandomPathBench { 455 class PathEqualityBench : public RandomPathBench {
463 public: 456 public:
464 PathEqualityBench(void* param) 457 PathEqualityBench(void* param)
465 : INHERITED(param) { 458 : INHERITED(param) {
466 } 459 }
467 460
468 protected: 461 protected:
469 enum { N = SkBENCHLOOP(40000) };
470
471 virtual const char* onGetName() SK_OVERRIDE { 462 virtual const char* onGetName() SK_OVERRIDE {
472 return "path_equality_50%"; 463 return "path_equality_50%";
473 } 464 }
474 465
475 virtual void onPreDraw() SK_OVERRIDE { 466 virtual void onPreDraw() SK_OVERRIDE {
476 fParity = 0; 467 fParity = 0;
477 this->createData(10, 100); 468 this->createData(10, 100);
478 fPaths.reset(kPathCnt); 469 fPaths.reset(kPathCnt);
479 fCopies.reset(kPathCnt); 470 fCopies.reset(kPathCnt);
480 for (int i = 0; i < kPathCnt; ++i) { 471 for (int i = 0; i < kPathCnt; ++i) {
481 this->makePath(&fPaths[i]); 472 this->makePath(&fPaths[i]);
482 fCopies[i] = fPaths[i]; 473 fCopies[i] = fPaths[i];
483 } 474 }
484 this->finishedMakingPaths(); 475 this->finishedMakingPaths();
485 } 476 }
486 477
487 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 478 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
488 for (int i = 0; i < N; ++i) { 479 for (int i = 0; i < this->getLoops(); ++i) {
489 int idx = i & (kPathCnt - 1); 480 int idx = i & (kPathCnt - 1);
490 fParity ^= (fPaths[idx] == fCopies[idx & ~0x1]); 481 fParity ^= (fPaths[idx] == fCopies[idx & ~0x1]);
491 } 482 }
492 } 483 }
493 484
494 virtual void onPostDraw() SK_OVERRIDE { 485 virtual void onPostDraw() SK_OVERRIDE {
495 fPaths.reset(0); 486 fPaths.reset(0);
496 fCopies.reset(0); 487 fCopies.reset(0);
497 } 488 }
498 489
(...skipping 19 matching lines...) Expand all
518 kReversePathTo_AddType, 509 kReversePathTo_AddType,
519 }; 510 };
520 511
521 SkBench_AddPathTest(AddType type, void* param) 512 SkBench_AddPathTest(AddType type, void* param)
522 : INHERITED(param) 513 : INHERITED(param)
523 , fType(type) { 514 , fType(type) {
524 fMatrix.setRotate(60 * SK_Scalar1); 515 fMatrix.setRotate(60 * SK_Scalar1);
525 } 516 }
526 517
527 protected: 518 protected:
528 enum { N = SkBENCHLOOP(15000) };
529
530 virtual const char* onGetName() SK_OVERRIDE { 519 virtual const char* onGetName() SK_OVERRIDE {
531 switch (fType) { 520 switch (fType) {
532 case kAdd_AddType: 521 case kAdd_AddType:
533 return "path_add_path"; 522 return "path_add_path";
534 case kAddTrans_AddType: 523 case kAddTrans_AddType:
535 return "path_add_path_trans"; 524 return "path_add_path_trans";
536 case kAddMatrix_AddType: 525 case kAddMatrix_AddType:
537 return "path_add_path_matrix"; 526 return "path_add_path_matrix";
538 case kPathTo_AddType: 527 case kPathTo_AddType:
539 return "path_path_to"; 528 return "path_path_to";
(...skipping 17 matching lines...) Expand all
557 for (int i = 0; i < kPathCnt; ++i) { 546 for (int i = 0; i < kPathCnt; ++i) {
558 this->makePath(&fPaths0[i]); 547 this->makePath(&fPaths0[i]);
559 this->makePath(&fPaths1[i]); 548 this->makePath(&fPaths1[i]);
560 } 549 }
561 this->finishedMakingPaths(); 550 this->finishedMakingPaths();
562 } 551 }
563 552
564 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 553 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
565 switch (fType) { 554 switch (fType) {
566 case kAdd_AddType: 555 case kAdd_AddType:
567 for (int i = 0; i < N; ++i) { 556 for (int i = 0; i < this->getLoops(); ++i) {
568 int idx = i & (kPathCnt - 1); 557 int idx = i & (kPathCnt - 1);
569 SkPath result = fPaths0[idx]; 558 SkPath result = fPaths0[idx];
570 result.addPath(fPaths1[idx]); 559 result.addPath(fPaths1[idx]);
571 } 560 }
572 break; 561 break;
573 case kAddTrans_AddType: 562 case kAddTrans_AddType:
574 for (int i = 0; i < N; ++i) { 563 for (int i = 0; i < this->getLoops(); ++i) {
575 int idx = i & (kPathCnt - 1); 564 int idx = i & (kPathCnt - 1);
576 SkPath result = fPaths0[idx]; 565 SkPath result = fPaths0[idx];
577 result.addPath(fPaths1[idx], 2 * SK_Scalar1, 5 * SK_Scalar1) ; 566 result.addPath(fPaths1[idx], 2 * SK_Scalar1, 5 * SK_Scalar1) ;
578 } 567 }
579 break; 568 break;
580 case kAddMatrix_AddType: 569 case kAddMatrix_AddType:
581 for (int i = 0; i < N; ++i) { 570 for (int i = 0; i < this->getLoops(); ++i) {
582 int idx = i & (kPathCnt - 1); 571 int idx = i & (kPathCnt - 1);
583 SkPath result = fPaths0[idx]; 572 SkPath result = fPaths0[idx];
584 result.addPath(fPaths1[idx], fMatrix); 573 result.addPath(fPaths1[idx], fMatrix);
585 } 574 }
586 break; 575 break;
587 case kPathTo_AddType: 576 case kPathTo_AddType:
588 for (int i = 0; i < N; ++i) { 577 for (int i = 0; i < this->getLoops(); ++i) {
589 int idx = i & (kPathCnt - 1); 578 int idx = i & (kPathCnt - 1);
590 SkPath result = fPaths0[idx]; 579 SkPath result = fPaths0[idx];
591 result.pathTo(fPaths1[idx]); 580 result.pathTo(fPaths1[idx]);
592 } 581 }
593 break; 582 break;
594 case kReverseAdd_AddType: 583 case kReverseAdd_AddType:
595 for (int i = 0; i < N; ++i) { 584 for (int i = 0; i < this->getLoops(); ++i) {
596 int idx = i & (kPathCnt - 1); 585 int idx = i & (kPathCnt - 1);
597 SkPath result = fPaths0[idx]; 586 SkPath result = fPaths0[idx];
598 result.reverseAddPath(fPaths1[idx]); 587 result.reverseAddPath(fPaths1[idx]);
599 } 588 }
600 break; 589 break;
601 case kReversePathTo_AddType: 590 case kReversePathTo_AddType:
602 for (int i = 0; i < N; ++i) { 591 for (int i = 0; i < this->getLoops(); ++i) {
603 int idx = i & (kPathCnt - 1); 592 int idx = i & (kPathCnt - 1);
604 SkPath result = fPaths0[idx]; 593 SkPath result = fPaths0[idx];
605 result.reversePathTo(fPaths1[idx]); 594 result.reversePathTo(fPaths1[idx]);
606 } 595 }
607 break; 596 break;
608 } 597 }
609 } 598 }
610 599
611 virtual void onPostDraw() SK_OVERRIDE { 600 virtual void onPostDraw() SK_OVERRIDE {
612 fPaths0.reset(0); 601 fPaths0.reset(0);
(...skipping 11 matching lines...) Expand all
624 SkMatrix fMatrix; 613 SkMatrix fMatrix;
625 typedef RandomPathBench INHERITED; 614 typedef RandomPathBench INHERITED;
626 }; 615 };
627 616
628 617
629 class CirclesBench : public SkBenchmark { 618 class CirclesBench : public SkBenchmark {
630 protected: 619 protected:
631 SkString fName; 620 SkString fName;
632 Flags fFlags; 621 Flags fFlags;
633 622
634 enum {
635 N = SkBENCHLOOP(100)
636 };
637 public: 623 public:
638 CirclesBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) { 624 CirclesBench(void* param, Flags flags) : INHERITED(param), fFlags(flags) {
639 fName.printf("circles_%s", fFlags & kStroke_Flag ? "stroke" : "fill"); 625 fName.printf("circles_%s", fFlags & kStroke_Flag ? "stroke" : "fill");
640 } 626 }
641 627
642 protected: 628 protected:
643 virtual const char* onGetName() SK_OVERRIDE { 629 virtual const char* onGetName() SK_OVERRIDE {
644 return fName.c_str(); 630 return fName.c_str();
645 } 631 }
646 632
647 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 633 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
648 SkPaint paint; 634 SkPaint paint;
649 635
650 paint.setColor(SK_ColorBLACK); 636 paint.setColor(SK_ColorBLACK);
651 paint.setAntiAlias(true); 637 paint.setAntiAlias(true);
652 if (fFlags & kStroke_Flag) { 638 if (fFlags & kStroke_Flag) {
653 paint.setStyle(SkPaint::kStroke_Style); 639 paint.setStyle(SkPaint::kStroke_Style);
654 } 640 }
655 641
656 SkRandom rand; 642 SkRandom rand;
657 643
658 SkRect r; 644 SkRect r;
659 645
660 for (int i = 0; i < 5000; ++i) { 646 for (int i = 0; i < this->getLoops(); ++i) {
661 SkScalar radius = rand.nextUScalar1() * 3; 647 SkScalar radius = rand.nextUScalar1() * 3;
662 r.fLeft = rand.nextUScalar1() * 300; 648 r.fLeft = rand.nextUScalar1() * 300;
663 r.fTop = rand.nextUScalar1() * 300; 649 r.fTop = rand.nextUScalar1() * 300;
664 r.fRight = r.fLeft + 2 * radius; 650 r.fRight = r.fLeft + 2 * radius;
665 r.fBottom = r.fTop + 2 * radius; 651 r.fBottom = r.fTop + 2 * radius;
666 652
667 if (fFlags & kStroke_Flag) { 653 if (fFlags & kStroke_Flag) {
668 paint.setStrokeWidth(rand.nextUScalar1() * 5.0f); 654 paint.setStrokeWidth(rand.nextUScalar1() * 5.0f);
669 } 655 }
670 656
(...skipping 16 matching lines...) Expand all
687 673
688 // Chrome creates its own round rects with each corner possibly being different. 674 // Chrome creates its own round rects with each corner possibly being different.
689 // In its "zero radius" incarnation it creates degenerate round rects. 675 // In its "zero radius" incarnation it creates degenerate round rects.
690 // Note: PathTest::test_arb_round_rect_is_convex and 676 // Note: PathTest::test_arb_round_rect_is_convex and
691 // test_arb_zero_rad_round_rect_is_rect perform almost exactly 677 // test_arb_zero_rad_round_rect_is_rect perform almost exactly
692 // the same test (but with no drawing) 678 // the same test (but with no drawing)
693 class ArbRoundRectBench : public SkBenchmark { 679 class ArbRoundRectBench : public SkBenchmark {
694 protected: 680 protected:
695 SkString fName; 681 SkString fName;
696 682
697 enum {
698 N = SkBENCHLOOP(100)
699 };
700 public: 683 public:
701 ArbRoundRectBench(void* param, bool zeroRad) : INHERITED(param), fZeroRad(ze roRad) { 684 ArbRoundRectBench(void* param, bool zeroRad) : INHERITED(param), fZeroRad(ze roRad) {
702 if (zeroRad) { 685 if (zeroRad) {
703 fName.printf("zeroradroundrect"); 686 fName.printf("zeroradroundrect");
704 } else { 687 } else {
705 fName.printf("arbroundrect"); 688 fName.printf("arbroundrect");
706 } 689 }
707 } 690 }
708 691
709 protected: 692 protected:
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 add_corner_arc(path, r, xCorner, yCorner, 180); 733 add_corner_arc(path, r, xCorner, yCorner, 180);
751 path->close(); 734 path->close();
752 735
753 SkASSERT(path->isConvex()); 736 SkASSERT(path->isConvex());
754 } 737 }
755 738
756 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 739 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
757 SkRandom rand; 740 SkRandom rand;
758 SkRect r; 741 SkRect r;
759 742
760 for (int i = 0; i < 5000; ++i) { 743 for (int i = 0; i < this->getLoops(); ++i) {
761 SkPaint paint; 744 SkPaint paint;
762 paint.setColor(0xff000000 | rand.nextU()); 745 paint.setColor(0xff000000 | rand.nextU());
763 paint.setAntiAlias(true); 746 paint.setAntiAlias(true);
764 747
765 SkScalar size = rand.nextUScalar1() * 30; 748 SkScalar size = rand.nextUScalar1() * 30;
766 if (size < SK_Scalar1) { 749 if (size < SK_Scalar1) {
767 continue; 750 continue;
768 } 751 }
769 r.fLeft = rand.nextUScalar1() * 300; 752 r.fLeft = rand.nextUScalar1() * 300;
770 r.fTop = rand.nextUScalar1() * 300; 753 r.fTop = rand.nextUScalar1() * 300;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 break; 801 break;
819 } 802 }
820 } 803 }
821 804
822 private: 805 private:
823 virtual const char* onGetName() SK_OVERRIDE { 806 virtual const char* onGetName() SK_OVERRIDE {
824 return fName.c_str(); 807 return fName.c_str();
825 } 808 }
826 809
827 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 810 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
828 for (int i = 0; i < N; ++i) { 811 for (int i = 0; i < this->getLoops(); ++i) {
829 const SkRect& rect = fQueryRects[i % kQueryRectCnt]; 812 const SkRect& rect = fQueryRects[i % kQueryRectCnt];
830 fParity = fParity != fPath.conservativelyContainsRect(rect); 813 fParity = fParity != fPath.conservativelyContainsRect(rect);
831 } 814 }
832 } 815 }
833 816
834 virtual void onPreDraw() SK_OVERRIDE { 817 virtual void onPreDraw() SK_OVERRIDE {
835 fQueryRects.setCount(kQueryRectCnt); 818 fQueryRects.setCount(kQueryRectCnt);
836 819
837 SkRandom rand; 820 SkRandom rand;
838 for (int i = 0; i < kQueryRectCnt; ++i) { 821 for (int i = 0; i < kQueryRectCnt; ++i) {
839 SkSize size; 822 SkSize size;
840 SkPoint xy; 823 SkPoint xy;
841 size.fWidth = rand.nextRangeScalar(kQueryMin.fWidth, kQueryMax.fWid th); 824 size.fWidth = rand.nextRangeScalar(kQueryMin.fWidth, kQueryMax.fWid th);
842 size.fHeight = rand.nextRangeScalar(kQueryMin.fHeight, kQueryMax.fHe ight); 825 size.fHeight = rand.nextRangeScalar(kQueryMin.fHeight, kQueryMax.fHe ight);
843 xy.fX = rand.nextRangeScalar(kBounds.fLeft, kBounds.fRight - size.fW idth); 826 xy.fX = rand.nextRangeScalar(kBounds.fLeft, kBounds.fRight - size.fW idth);
844 xy.fY = rand.nextRangeScalar(kBounds.fTop, kBounds.fBottom - size.fH eight); 827 xy.fY = rand.nextRangeScalar(kBounds.fTop, kBounds.fBottom - size.fH eight);
845 828
846 fQueryRects[i] = SkRect::MakeXYWH(xy.fX, xy.fY, size.fWidth, size.fH eight); 829 fQueryRects[i] = SkRect::MakeXYWH(xy.fX, xy.fY, size.fWidth, size.fH eight);
847 } 830 }
848 } 831 }
849 832
850 virtual void onPostDraw() SK_OVERRIDE { 833 virtual void onPostDraw() SK_OVERRIDE {
851 fQueryRects.setCount(0); 834 fQueryRects.setCount(0);
852 } 835 }
853 836
854 enum { 837 enum {
855 N = SkBENCHLOOP(100000),
856 kQueryRectCnt = 400, 838 kQueryRectCnt = 400,
857 }; 839 };
858 static const SkRect kBounds; // bounds for all random query rects 840 static const SkRect kBounds; // bounds for all random query rects
859 static const SkSize kQueryMin; // minimum query rect size, should be <= kQue ryMax 841 static const SkSize kQueryMin; // minimum query rect size, should be <= kQue ryMax
860 static const SkSize kQueryMax; // max query rect size, should < kBounds 842 static const SkSize kQueryMax; // max query rect size, should < kBounds
861 static const SkRect kBaseRect; // rect that is used to construct the path 843 static const SkRect kBaseRect; // rect that is used to construct the path
862 static const SkScalar kRRRadii[2]; // x and y radii for round rect 844 static const SkScalar kRRRadii[2]; // x and y radii for round rect
863 845
864 SkString fName; 846 SkString fName;
865 SkPath fPath; 847 SkPath fPath;
866 bool fParity; 848 bool fParity;
867 SkTDArray<SkRect> fQueryRects; 849 SkTDArray<SkRect> fQueryRects;
868 850
869 typedef SkBenchmark INHERITED; 851 typedef SkBenchmark INHERITED;
870 }; 852 };
871 853
872 /////////////////////////////////////////////////////////////////////////////// 854 ///////////////////////////////////////////////////////////////////////////////
873 855
874 #include "SkGeometry.h" 856 #include "SkGeometry.h"
875 857
876 class ConicBench_Chop5 : public SkBenchmark { 858 class ConicBench_Chop5 : public SkBenchmark {
877 enum {
878 N = 100000
879 };
880 SkConic fRQ; 859 SkConic fRQ;
881 public: 860 public:
882 ConicBench_Chop5(void* param) : INHERITED(param) { 861 ConicBench_Chop5(void* param) : INHERITED(param) {
883 fRQ.fPts[0].set(0, 0); 862 fRQ.fPts[0].set(0, 0);
884 fRQ.fPts[1].set(100, 0); 863 fRQ.fPts[1].set(100, 0);
885 fRQ.fPts[2].set(100, 100); 864 fRQ.fPts[2].set(100, 100);
886 fRQ.fW = SkScalarCos(SK_ScalarPI/4); 865 fRQ.fW = SkScalarCos(SK_ScalarPI/4);
887 } 866 }
888 867
889 private: 868 private:
890 virtual const char* onGetName() SK_OVERRIDE { 869 virtual const char* onGetName() SK_OVERRIDE {
891 return "ratquad-chop-0.5"; 870 return "ratquad-chop-0.5";
892 } 871 }
893 872
894 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 873 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
895 SkConic dst[2]; 874 SkConic dst[2];
896 for (int i = 0; i < N; ++i) { 875 for (int i = 0; i < this->getLoops(); ++i) {
897 fRQ.chopAt(0.5f, dst); 876 fRQ.chopAt(0.5f, dst);
898 } 877 }
899 } 878 }
900 879
901 typedef SkBenchmark INHERITED; 880 typedef SkBenchmark INHERITED;
902 }; 881 };
903 882
904 class ConicBench_ChopHalf : public SkBenchmark { 883 class ConicBench_ChopHalf : public SkBenchmark {
905 enum {
906 N = 100000
907 };
908 SkConic fRQ; 884 SkConic fRQ;
909 public: 885 public:
910 ConicBench_ChopHalf(void* param) : INHERITED(param) { 886 ConicBench_ChopHalf(void* param) : INHERITED(param) {
911 fRQ.fPts[0].set(0, 0); 887 fRQ.fPts[0].set(0, 0);
912 fRQ.fPts[1].set(100, 0); 888 fRQ.fPts[1].set(100, 0);
913 fRQ.fPts[2].set(100, 100); 889 fRQ.fPts[2].set(100, 100);
914 fRQ.fW = SkScalarCos(SK_ScalarPI/4); 890 fRQ.fW = SkScalarCos(SK_ScalarPI/4);
915 } 891 }
916 892
917 private: 893 private:
918 virtual const char* onGetName() SK_OVERRIDE { 894 virtual const char* onGetName() SK_OVERRIDE {
919 return "ratquad-chop-half"; 895 return "ratquad-chop-half";
920 } 896 }
921 897
922 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 898 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
923 SkConic dst[2]; 899 SkConic dst[2];
924 for (int i = 0; i < N; ++i) { 900 for (int i = 0; i < this->getLoops(); ++i) {
925 fRQ.chop(dst); 901 fRQ.chop(dst);
926 } 902 }
927 } 903 }
928 904
929 typedef SkBenchmark INHERITED; 905 typedef SkBenchmark INHERITED;
930 }; 906 };
931 907
932 /////////////////////////////////////////////////////////////////////////////// 908 ///////////////////////////////////////////////////////////////////////////////
933 909
934 static void rand_conic(SkConic* conic, SkRandom& rand) { 910 static void rand_conic(SkConic* conic, SkRandom& rand) {
(...skipping 12 matching lines...) Expand all
947 ConicBench(void* param) : INHERITED(param) { 923 ConicBench(void* param) : INHERITED(param) {
948 SkRandom rand; 924 SkRandom rand;
949 for (int i = 0; i < CONICS; ++i) { 925 for (int i = 0; i < CONICS; ++i) {
950 rand_conic(&fConics[i], rand); 926 rand_conic(&fConics[i], rand);
951 } 927 }
952 fIsRendering = false; 928 fIsRendering = false;
953 } 929 }
954 930
955 protected: 931 protected:
956 enum { 932 enum {
957 N = 20000,
958 CONICS = 100 933 CONICS = 100
959 }; 934 };
960 SkConic fConics[CONICS]; 935 SkConic fConics[CONICS];
961 936
962 private: 937 private:
963 typedef SkBenchmark INHERITED; 938 typedef SkBenchmark INHERITED;
964 }; 939 };
965 940
966 class ConicBench_ComputeError : public ConicBench { 941 class ConicBench_ComputeError : public ConicBench {
967 public: 942 public:
968 ConicBench_ComputeError(void* param) : INHERITED(param) {} 943 ConicBench_ComputeError(void* param) : INHERITED(param) {}
969 944
970 protected: 945 protected:
971 virtual const char* onGetName() SK_OVERRIDE { 946 virtual const char* onGetName() SK_OVERRIDE {
972 return "conic-compute-error"; 947 return "conic-compute-error";
973 } 948 }
974 949
975 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 950 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
976 SkVector err; 951 SkVector err;
977 for (int i = 0; i < N; ++i) { 952 for (int i = 0; i < this->getLoops(); ++i) {
978 for (int j = 0; j < CONICS; ++j) { 953 for (int j = 0; j < CONICS; ++j) {
979 fConics[j].computeAsQuadError(&err); 954 fConics[j].computeAsQuadError(&err);
980 } 955 }
981 } 956 }
982 } 957 }
983 958
984 private: 959 private:
985 typedef ConicBench INHERITED; 960 typedef ConicBench INHERITED;
986 }; 961 };
987 962
988 class ConicBench_asQuadTol : public ConicBench { 963 class ConicBench_asQuadTol : public ConicBench {
989 public: 964 public:
990 ConicBench_asQuadTol(void* param) : INHERITED(param) {} 965 ConicBench_asQuadTol(void* param) : INHERITED(param) {}
991 966
992 protected: 967 protected:
993 virtual const char* onGetName() SK_OVERRIDE { 968 virtual const char* onGetName() SK_OVERRIDE {
994 return "conic-asQuadTol"; 969 return "conic-asQuadTol";
995 } 970 }
996 971
997 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 972 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
998 for (int i = 0; i < N; ++i) { 973 for (int i = 0; i < this->getLoops(); ++i) {
999 for (int j = 0; j < CONICS; ++j) { 974 for (int j = 0; j < CONICS; ++j) {
1000 fConics[j].asQuadTol(SK_ScalarHalf); 975 fConics[j].asQuadTol(SK_ScalarHalf);
1001 } 976 }
1002 } 977 }
1003 } 978 }
1004 979
1005 private: 980 private:
1006 typedef ConicBench INHERITED; 981 typedef ConicBench INHERITED;
1007 }; 982 };
1008 983
1009 class ConicBench_quadPow2 : public ConicBench { 984 class ConicBench_quadPow2 : public ConicBench {
1010 public: 985 public:
1011 ConicBench_quadPow2(void* param) : INHERITED(param) {} 986 ConicBench_quadPow2(void* param) : INHERITED(param) {}
1012 987
1013 protected: 988 protected:
1014 virtual const char* onGetName() SK_OVERRIDE { 989 virtual const char* onGetName() SK_OVERRIDE {
1015 return "conic-quadPow2"; 990 return "conic-quadPow2";
1016 } 991 }
1017 992
1018 virtual void onDraw(SkCanvas*) SK_OVERRIDE { 993 virtual void onDraw(SkCanvas*) SK_OVERRIDE {
1019 for (int i = 0; i < N; ++i) { 994 for (int i = 0; i < this->getLoops(); ++i) {
1020 for (int j = 0; j < CONICS; ++j) { 995 for (int j = 0; j < CONICS; ++j) {
1021 fConics[j].computeQuadPOW2(SK_ScalarHalf); 996 fConics[j].computeQuadPOW2(SK_ScalarHalf);
1022 } 997 }
1023 } 998 }
1024 } 999 }
1025 1000
1026 private: 1001 private:
1027 typedef ConicBench INHERITED; 1002 typedef ConicBench INHERITED;
1028 }; 1003 };
1029 1004
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 DEF_BENCH( return new ArbRoundRectBench(p, true); ) 1057 DEF_BENCH( return new ArbRoundRectBench(p, true); )
1083 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kRect_Type); ) 1058 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kRect_Type); )
1084 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kRoundRect_Type); ) 1059 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kRoundRect_Type); )
1085 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kOval_Type); ) 1060 DEF_BENCH( return new ConservativelyContainsBench(p, ConservativelyContainsBench ::kOval_Type); )
1086 1061
1087 DEF_BENCH( return new ConicBench_Chop5(p) ) 1062 DEF_BENCH( return new ConicBench_Chop5(p) )
1088 DEF_BENCH( return new ConicBench_ChopHalf(p) ) 1063 DEF_BENCH( return new ConicBench_ChopHalf(p) )
1089 DEF_BENCH( return new ConicBench_ComputeError(p) ) 1064 DEF_BENCH( return new ConicBench_ComputeError(p) )
1090 DEF_BENCH( return new ConicBench_asQuadTol(p) ) 1065 DEF_BENCH( return new ConicBench_asQuadTol(p) )
1091 DEF_BENCH( return new ConicBench_quadPow2(p) ) 1066 DEF_BENCH( return new ConicBench_quadPow2(p) )
OLDNEW
« no previous file with comments | « bench/MutexBench.cpp ('k') | bench/PathIterBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698