| 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 "Test.h" | 8 #include "Test.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 add_corner_arc(path, r, xCorner, yCorner, 90); | 419 add_corner_arc(path, r, xCorner, yCorner, 90); |
| 420 add_corner_arc(path, r, xCorner, yCorner, 180); | 420 add_corner_arc(path, r, xCorner, yCorner, 180); |
| 421 path->close(); | 421 path->close(); |
| 422 } | 422 } |
| 423 | 423 |
| 424 // Chrome creates its own round rects with each corner possibly being different. | 424 // Chrome creates its own round rects with each corner possibly being different. |
| 425 // Performance will suffer if they are not convex. | 425 // Performance will suffer if they are not convex. |
| 426 // Note: PathBench::ArbRoundRectBench performs almost exactly | 426 // Note: PathBench::ArbRoundRectBench performs almost exactly |
| 427 // the same test (but with drawing) | 427 // the same test (but with drawing) |
| 428 static void test_arb_round_rect_is_convex(skiatest::Reporter* reporter) { | 428 static void test_arb_round_rect_is_convex(skiatest::Reporter* reporter) { |
| 429 SkMWCRandom rand; | 429 SkRandom rand; |
| 430 SkRect r; | 430 SkRect r; |
| 431 | 431 |
| 432 for (int i = 0; i < 5000; ++i) { | 432 for (int i = 0; i < 5000; ++i) { |
| 433 | 433 |
| 434 SkScalar size = rand.nextUScalar1() * 30; | 434 SkScalar size = rand.nextUScalar1() * 30; |
| 435 if (size < SK_Scalar1) { | 435 if (size < SK_Scalar1) { |
| 436 continue; | 436 continue; |
| 437 } | 437 } |
| 438 r.fLeft = rand.nextUScalar1() * 300; | 438 r.fLeft = rand.nextUScalar1() * 300; |
| 439 r.fTop = rand.nextUScalar1() * 300; | 439 r.fTop = rand.nextUScalar1() * 300; |
| 440 r.fRight = r.fLeft + 2 * size; | 440 r.fRight = r.fLeft + 2 * size; |
| 441 r.fBottom = r.fTop + 2 * size; | 441 r.fBottom = r.fTop + 2 * size; |
| 442 | 442 |
| 443 SkPath temp; | 443 SkPath temp; |
| 444 | 444 |
| 445 make_arb_round_rect(&temp, r, r.width() / 10, r.height() / 15); | 445 make_arb_round_rect(&temp, r, r.width() / 10, r.height() / 15); |
| 446 | 446 |
| 447 REPORTER_ASSERT(reporter, temp.isConvex()); | 447 REPORTER_ASSERT(reporter, temp.isConvex()); |
| 448 } | 448 } |
| 449 } | 449 } |
| 450 | 450 |
| 451 // Chrome will sometimes create a 0 radius round rect. The degenerate | 451 // Chrome will sometimes create a 0 radius round rect. The degenerate |
| 452 // quads prevent the path from being converted to a rect | 452 // quads prevent the path from being converted to a rect |
| 453 // Note: PathBench::ArbRoundRectBench performs almost exactly | 453 // Note: PathBench::ArbRoundRectBench performs almost exactly |
| 454 // the same test (but with drawing) | 454 // the same test (but with drawing) |
| 455 static void test_arb_zero_rad_round_rect_is_rect(skiatest::Reporter* reporter) { | 455 static void test_arb_zero_rad_round_rect_is_rect(skiatest::Reporter* reporter) { |
| 456 SkMWCRandom rand; | 456 SkRandom rand; |
| 457 SkRect r; | 457 SkRect r; |
| 458 | 458 |
| 459 for (int i = 0; i < 5000; ++i) { | 459 for (int i = 0; i < 5000; ++i) { |
| 460 | 460 |
| 461 SkScalar size = rand.nextUScalar1() * 30; | 461 SkScalar size = rand.nextUScalar1() * 30; |
| 462 if (size < SK_Scalar1) { | 462 if (size < SK_Scalar1) { |
| 463 continue; | 463 continue; |
| 464 } | 464 } |
| 465 r.fLeft = rand.nextUScalar1() * 300; | 465 r.fLeft = rand.nextUScalar1() * 300; |
| 466 r.fTop = rand.nextUScalar1() * 300; | 466 r.fTop = rand.nextUScalar1() * 300; |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 case SkPath::kDone_Verb: | 585 case SkPath::kDone_Verb: |
| 586 goto DONE; | 586 goto DONE; |
| 587 } | 587 } |
| 588 } | 588 } |
| 589 DONE: | 589 DONE: |
| 590 REPORTER_ASSERT(reporter, foundClose == expectClose); | 590 REPORTER_ASSERT(reporter, foundClose == expectClose); |
| 591 } | 591 } |
| 592 | 592 |
| 593 static void test_addPoly(skiatest::Reporter* reporter) { | 593 static void test_addPoly(skiatest::Reporter* reporter) { |
| 594 SkPoint pts[32]; | 594 SkPoint pts[32]; |
| 595 SkMWCRandom rand; | 595 SkRandom rand; |
| 596 | 596 |
| 597 for (size_t i = 0; i < SK_ARRAY_COUNT(pts); ++i) { | 597 for (size_t i = 0; i < SK_ARRAY_COUNT(pts); ++i) { |
| 598 pts[i].fX = rand.nextSScalar1(); | 598 pts[i].fX = rand.nextSScalar1(); |
| 599 pts[i].fY = rand.nextSScalar1(); | 599 pts[i].fY = rand.nextSScalar1(); |
| 600 } | 600 } |
| 601 | 601 |
| 602 for (int doClose = 0; doClose <= 1; ++doClose) { | 602 for (int doClose = 0; doClose <= 1; ++doClose) { |
| 603 for (size_t count = 1; count <= SK_ARRAY_COUNT(pts); ++count) { | 603 for (size_t count = 1; count <= SK_ARRAY_COUNT(pts); ++count) { |
| 604 SkPath path; | 604 SkPath path; |
| 605 path.addPoly(pts, count, SkToBool(doClose)); | 605 path.addPoly(pts, count, SkToBool(doClose)); |
| (...skipping 1422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2028 | 2028 |
| 2029 // Generate random paths and verify | 2029 // Generate random paths and verify |
| 2030 SkPoint randomPts[25]; | 2030 SkPoint randomPts[25]; |
| 2031 for (int i = 0; i < 5; ++i) { | 2031 for (int i = 0; i < 5; ++i) { |
| 2032 for (int j = 0; j < 5; ++j) { | 2032 for (int j = 0; j < 5; ++j) { |
| 2033 randomPts[i*5+j].set(SK_Scalar1*i, SK_Scalar1*j); | 2033 randomPts[i*5+j].set(SK_Scalar1*i, SK_Scalar1*j); |
| 2034 } | 2034 } |
| 2035 } | 2035 } |
| 2036 | 2036 |
| 2037 // Max of 10 segments, max 3 points per segment | 2037 // Max of 10 segments, max 3 points per segment |
| 2038 SkMWCRandom rand(9876543); | 2038 SkRandom rand(9876543); |
| 2039 SkPoint expectedPts[31]; // May have leading moveTo | 2039 SkPoint expectedPts[31]; // May have leading moveTo |
| 2040 SkPath::Verb expectedVerbs[22]; // May have leading moveTo | 2040 SkPath::Verb expectedVerbs[22]; // May have leading moveTo |
| 2041 SkPath::Verb nextVerb; | 2041 SkPath::Verb nextVerb; |
| 2042 | 2042 |
| 2043 for (int i = 0; i < 500; ++i) { | 2043 for (int i = 0; i < 500; ++i) { |
| 2044 p.reset(); | 2044 p.reset(); |
| 2045 bool lastWasClose = true; | 2045 bool lastWasClose = true; |
| 2046 bool haveMoveTo = false; | 2046 bool haveMoveTo = false; |
| 2047 SkPoint lastMoveToPt = { 0, 0 }; | 2047 SkPoint lastMoveToPt = { 0, 0 }; |
| 2048 int numPoints = 0; | 2048 int numPoints = 0; |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2549 test_clipped_cubic(); | 2549 test_clipped_cubic(); |
| 2550 test_crbug_170666(); | 2550 test_crbug_170666(); |
| 2551 test_bad_cubic_crbug229478(); | 2551 test_bad_cubic_crbug229478(); |
| 2552 test_bad_cubic_crbug234190(); | 2552 test_bad_cubic_crbug234190(); |
| 2553 test_android_specific_behavior(reporter); | 2553 test_android_specific_behavior(reporter); |
| 2554 test_path_close_issue1474(reporter); | 2554 test_path_close_issue1474(reporter); |
| 2555 } | 2555 } |
| 2556 | 2556 |
| 2557 #include "TestClassDef.h" | 2557 #include "TestClassDef.h" |
| 2558 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) | 2558 DEFINE_TESTCLASS("Path", PathTestClass, TestPath) |
| OLD | NEW |