diff options
author | caryclark <caryclark@google.com> | 2016-10-05 13:23:00 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-05 13:23:00 -0700 |
commit | 61c21cdcc31081a1bd4a3a7480b482d135f7df33 (patch) | |
tree | bbb9ef53cd4b178918a7635f09828bc98f0cf038 /tests/PathOpsTightBoundsTest.cpp | |
parent | c245574ba3d0e2ade6c94b2812de3baa383bf4c4 (diff) |
tight bounds optimization
Add support for tight bounds to detect and return moveTo
followed by close or zero-length lineTo.
Also short circuit so that hard work is avoided when
the path bounds is also the tight bounds.
Avoid doing work if the bounds can be trivially computed.
Include naked moveTo coordinates in the tight bounds.
R=fmalita@chromium.org
BUG=skia:5555, skia:5553
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2394443004
Review-Url: https://codereview.chromium.org/2394443004
Diffstat (limited to 'tests/PathOpsTightBoundsTest.cpp')
-rw-r--r-- | tests/PathOpsTightBoundsTest.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/PathOpsTightBoundsTest.cpp b/tests/PathOpsTightBoundsTest.cpp index 953756170b..8fd0fdb453 100644 --- a/tests/PathOpsTightBoundsTest.cpp +++ b/tests/PathOpsTightBoundsTest.cpp @@ -120,3 +120,71 @@ DEF_TEST(PathOpsTightBoundsQuads, reporter) { } testRunner.render(); } + +DEF_TEST(PathOpsTightBoundsMove, reporter) { + SkPath path; + path.moveTo(10, 10); + path.close(); + path.moveTo(20, 20); + path.lineTo(20, 20); + path.close(); + path.moveTo(15, 15); + path.lineTo(15, 15); + path.close(); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + REPORTER_ASSERT(reporter, bounds == tight); +} + +DEF_TEST(PathOpsTightBoundsMoveOne, reporter) { + SkPath path; + path.moveTo(20, 20); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + REPORTER_ASSERT(reporter, bounds == tight); +} + +DEF_TEST(PathOpsTightBoundsMoveTwo, reporter) { + SkPath path; + path.moveTo(20, 20); + path.moveTo(40, 40); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + REPORTER_ASSERT(reporter, bounds == tight); +} + +DEF_TEST(PathOpsTightBoundsTiny, reporter) { + SkPath path; + path.moveTo(1, 1); + path.quadTo(1.000001f, 1, 1, 1); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + SkRect moveBounds = {1, 1, 1, 1}; + REPORTER_ASSERT(reporter, bounds != tight); + REPORTER_ASSERT(reporter, moveBounds == tight); +} + +DEF_TEST(PathOpsTightBoundsWellBehaved, reporter) { + SkPath path; + path.moveTo(1, 1); + path.quadTo(2, 3, 4, 5); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + REPORTER_ASSERT(reporter, bounds == tight); +} + +DEF_TEST(PathOpsTightBoundsIllBehaved, reporter) { + SkPath path; + path.moveTo(1, 1); + path.quadTo(4, 3, 2, 2); + const SkRect& bounds = path.getBounds(); + SkRect tight; + REPORTER_ASSERT(reporter, TightBounds(path, &tight)); + REPORTER_ASSERT(reporter, bounds != tight); +} + |