From d211e7875d9d564f075f664d9f402e1fed6dd90c Mon Sep 17 00:00:00 2001 From: csmartdalton Date: Mon, 15 Aug 2016 11:17:19 -0700 Subject: Convert GrAppliedClip interface to builder style GrAppliedClip was about at its limit for how many "make" functions it could have. Window rectangles would push it over the edge. This change makes it so GrDrawTarget supplies the original draw bounds to the constructor, and then GrClip adds the various required clipping techniques. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2246113002 Review-Url: https://codereview.chromium.org/2246113002 --- tests/ClipStackTest.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'tests/ClipStackTest.cpp') diff --git a/tests/ClipStackTest.cpp b/tests/ClipStackTest.cpp index a6b636271a..5265ac2c67 100644 --- a/tests/ClipStackTest.cpp +++ b/tests/ClipStackTest.cpp @@ -916,7 +916,8 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { // they are equal. // All the clip elements will be contained within these bounds. - static const SkRect kBounds = SkRect::MakeWH(100, 100); + static const SkIRect kIBounds = SkIRect::MakeWH(100, 100); + static const SkRect kBounds = SkRect::Make(kIBounds); enum { kNumTests = 250, @@ -1015,13 +1016,14 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { testCase.c_str()); if (!reduced.elements().isEmpty()) { + REPORTER_ASSERT_MESSAGE(reporter, reduced.hasIBounds(), testCase.c_str()); SkRect stackBounds; SkClipStack::BoundsType stackBoundsType; stack.getBounds(&stackBounds, &stackBoundsType); if (SkClipStack::kNormal_BoundsType == stackBoundsType) { // Unless GrReducedClip starts doing some heroic tightening of the clip bounds, this // will be true since the stack bounds are completely contained inside the query. - REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(reduced.iBounds(), stackBounds), + REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(reduced.ibounds(), stackBounds), testCase.c_str()); } REPORTER_ASSERT_MESSAGE(reporter, reduced.requiresAA() == doAA, testCase.c_str()); @@ -1037,16 +1039,18 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { add_elem_to_stack(*iter.get(), &reducedStack); } + SkIRect ibounds = reduced.hasIBounds() ? reduced.ibounds() : kIBounds; + // GrReducedClipStack assumes that the final result is clipped to the returned bounds - reducedStack.clipDevRect(reduced.iBounds(), SkRegion::kIntersect_Op); - stack.clipDevRect(reduced.iBounds(), SkRegion::kIntersect_Op); + reducedStack.clipDevRect(ibounds, SkRegion::kIntersect_Op); + stack.clipDevRect(ibounds, SkRegion::kIntersect_Op); // convert both the original stack and reduced stack to SkRegions and see if they're equal SkRegion region; - set_region_to_stack(stack, reduced.iBounds(), ®ion); + set_region_to_stack(stack, ibounds, ®ion); SkRegion reducedRegion; - set_region_to_stack(reducedStack, reduced.iBounds(), &reducedRegion); + set_region_to_stack(reducedStack, ibounds, &reducedRegion); REPORTER_ASSERT_MESSAGE(reporter, region == reducedRegion, testCase.c_str()); } @@ -1151,8 +1155,10 @@ static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { SkASSERT(reduced.genID() == testCases[i].reducedGenID); REPORTER_ASSERT(reporter, reduced.initialState() == testCases[i].initialState); SkASSERT(reduced.initialState() == testCases[i].initialState); - REPORTER_ASSERT(reporter, reduced.iBounds() == testCases[i].clipIRect); - SkASSERT(reduced.iBounds() == testCases[i].clipIRect); + REPORTER_ASSERT(reporter, reduced.hasIBounds()); + SkASSERT(reduced.hasIBounds()); + REPORTER_ASSERT(reporter, reduced.ibounds() == testCases[i].clipIRect); + SkASSERT(reduced.ibounds() == testCases[i].clipIRect); } } } @@ -1197,7 +1203,9 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName return; case ClipMethod::kIgnoreClip: SkASSERT(0 == numExpectedElems); - REPORTER_ASSERT_MESSAGE(reporter, GrClip::IsInsideClip(reduced.iBounds(), queryBounds), + REPORTER_ASSERT_MESSAGE(reporter, + !reduced.hasIBounds() || + GrClip::IsInsideClip(reduced.ibounds(), queryBounds), testName.c_str()); REPORTER_ASSERT_MESSAGE(reporter, reduced.elements().isEmpty(), testName.c_str()); REPORTER_ASSERT_MESSAGE(reporter, @@ -1210,7 +1218,8 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName SkIRect expectedScissor; stackBounds.round(&expectedScissor); REPORTER_ASSERT_MESSAGE(reporter, reduced.elements().isEmpty(), testName.c_str()); - REPORTER_ASSERT_MESSAGE(reporter, expectedScissor == reduced.iBounds(), + REPORTER_ASSERT_MESSAGE(reporter, reduced.hasIBounds(), testName.c_str()); + REPORTER_ASSERT_MESSAGE(reporter, expectedScissor == reduced.ibounds(), testName.c_str()); REPORTER_ASSERT_MESSAGE(reporter, GrReducedClip::InitialState::kAllIn == reduced.initialState(), @@ -1224,7 +1233,8 @@ static void test_aa_query(skiatest::Reporter* reporter, const SkString& testName } REPORTER_ASSERT_MESSAGE(reporter, numExpectedElems == reduced.elements().count(), testName.c_str()); - REPORTER_ASSERT_MESSAGE(reporter, expectedClipIBounds == reduced.iBounds(), + REPORTER_ASSERT_MESSAGE(reporter, reduced.hasIBounds(), testName.c_str()); + REPORTER_ASSERT_MESSAGE(reporter, expectedClipIBounds == reduced.ibounds(), testName.c_str()); REPORTER_ASSERT_MESSAGE(reporter, reduced.requiresAA() == !reduced.elements().isEmpty(), testName.c_str()); -- cgit v1.2.3