| Index: tests/ClipStackTest.cpp
|
| diff --git a/tests/ClipStackTest.cpp b/tests/ClipStackTest.cpp
|
| index 27753c44f4011187c6289a9f10477e55a7a7efa8..4d375ee8bcc41fd8a6a344d8088b3f8033147afd 100644
|
| --- a/tests/ClipStackTest.cpp
|
| +++ b/tests/ClipStackTest.cpp
|
| @@ -794,6 +794,51 @@ static void test_quickContains(skiatest::Reporter* reporter) {
|
| }
|
| }
|
|
|
| +static void set_region_to_stack(const SkClipStack& stack, const SkIRect& bounds, SkRegion* region) {
|
| + region->setRect(bounds);
|
| + SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
|
| + while (const SkClipStack::Element *element = iter.next()) {
|
| + SkRegion elemRegion;
|
| + SkRegion boundsRgn(bounds);
|
| + SkPath path;
|
| +
|
| + switch (element->getType()) {
|
| + case SkClipStack::Element::kEmpty_Type:
|
| + elemRegion.setEmpty();
|
| + break;
|
| + default:
|
| + element->asPath(&path);
|
| + elemRegion.setPath(path, boundsRgn);
|
| + break;
|
| + }
|
| + region->op(elemRegion, element->getOp());
|
| + }
|
| +}
|
| +
|
| +static void test_invfill_diff_bug(skiatest::Reporter* reporter) {
|
| + SkClipStack stack;
|
| + stack.clipDevRect({10, 10, 20, 20}, SkRegion::kIntersect_Op, false);
|
| +
|
| + SkPath path;
|
| + path.addRect({30, 10, 40, 20});
|
| + path.setFillType(SkPath::kInverseWinding_FillType);
|
| + stack.clipDevPath(path, SkRegion::kDifference_Op, false);
|
| +
|
| + REPORTER_ASSERT(reporter, SkClipStack::kEmptyGenID == stack.getTopmostGenID());
|
| +
|
| + SkRect stackBounds;
|
| + SkClipStack::BoundsType stackBoundsType;
|
| + stack.getBounds(&stackBounds, &stackBoundsType);
|
| +
|
| + REPORTER_ASSERT(reporter, stackBounds.isEmpty());
|
| + REPORTER_ASSERT(reporter, SkClipStack::kNormal_BoundsType == stackBoundsType);
|
| +
|
| + SkRegion region;
|
| + set_region_to_stack(stack, {0, 0, 50, 30}, ®ion);
|
| +
|
| + REPORTER_ASSERT(reporter, region.isEmpty());
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| #if SK_SUPPORT_GPU
|
| @@ -859,25 +904,6 @@ static void add_elem_to_stack(const SkClipStack::Element& element, SkClipStack*
|
| }
|
| }
|
|
|
| -static void add_elem_to_region(const SkClipStack::Element& element,
|
| - const SkIRect& bounds,
|
| - SkRegion* region) {
|
| - SkRegion elemRegion;
|
| - SkRegion boundsRgn(bounds);
|
| - SkPath path;
|
| -
|
| - switch (element.getType()) {
|
| - case SkClipStack::Element::kEmpty_Type:
|
| - elemRegion.setEmpty();
|
| - break;
|
| - default:
|
| - element.asPath(&path);
|
| - elemRegion.setPath(path, boundsRgn);
|
| - break;
|
| - }
|
| - region->op(elemRegion, element.getOp());
|
| -}
|
| -
|
| static void test_reduced_clip_stack(skiatest::Reporter* reporter) {
|
| // We construct random clip stacks, reduce them, and then rasterize both versions to verify that
|
| // they are equal.
|
| @@ -991,20 +1017,11 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) {
|
|
|
| // convert both the original stack and reduced stack to SkRegions and see if they're equal
|
| SkRegion region;
|
| - SkRegion reducedRegion;
|
| + set_region_to_stack(stack, inflatedIBounds, ®ion);
|
|
|
| - region.setRect(inflatedIBounds);
|
| - const SkClipStack::Element* element;
|
| - SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart);
|
| - while ((element = iter.next())) {
|
| - add_elem_to_region(*element, inflatedIBounds, ®ion);
|
| - }
|
| + SkRegion reducedRegion;
|
| + set_region_to_stack(reducedStack, inflatedIBounds, &reducedRegion);
|
|
|
| - reducedRegion.setRect(inflatedIBounds);
|
| - iter.reset(reducedStack, SkClipStack::Iter::kBottom_IterStart);
|
| - while ((element = iter.next())) {
|
| - add_elem_to_region(*element, inflatedIBounds, &reducedRegion);
|
| - }
|
| SkString testCase;
|
| testCase.printf("Iteration %d", i);
|
| REPORTER_ASSERT_MESSAGE(reporter, region == reducedRegion, testCase.c_str());
|
| @@ -1204,6 +1221,7 @@ DEF_TEST(ClipStack, reporter) {
|
| test_rect_inverse_fill(reporter);
|
| test_path_replace(reporter);
|
| test_quickContains(reporter);
|
| + test_invfill_diff_bug(reporter);
|
| #if SK_SUPPORT_GPU
|
| test_reduced_clip_stack(reporter);
|
| test_reduced_clip_stack_genid(reporter);
|
|
|