diff options
author | alokp@chromium.org <alokp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-04 23:26:45 +0000 |
---|---|---|
committer | alokp@chromium.org <alokp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-04 23:26:45 +0000 |
commit | cfc2d2d5161fb972827e70d3402c1fd872b7f6fd (patch) | |
tree | 97f9b067d76d43912421475717517682ef5c0b6f /cc/trees/occlusion_tracker_unittest.cc | |
parent | ff2cfd390303ff0fcf8e63957e7bf3760e46fceb (diff) | |
download | chromium_src-cfc2d2d5161fb972827e70d3402c1fd872b7f6fd.zip chromium_src-cfc2d2d5161fb972827e70d3402c1fd872b7f6fd.tar.gz chromium_src-cfc2d2d5161fb972827e70d3402c1fd872b7f6fd.tar.bz2 |
Do not clip inside OcclusionTracker.
Assume that content-rect is already clipped. This allows us to
early-out from occlusion testing when there is no occlusion.
BUG=276725
Review URL: https://codereview.chromium.org/23708021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@227133 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/trees/occlusion_tracker_unittest.cc')
-rw-r--r-- | cc/trees/occlusion_tracker_unittest.cc | 818 |
1 files changed, 42 insertions, 776 deletions
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc index 9d7e9c8..7b72380 100644 --- a/cc/trees/occlusion_tracker_unittest.cc +++ b/cc/trees/occlusion_tracker_unittest.cc @@ -94,25 +94,23 @@ class TestOcclusionTrackerWithClip bool OccludedLayer(const LayerType* layer, gfx::Rect content_rect) const { + DCHECK(layer->visible_content_rect().Contains(content_rect)); return this->Occluded(layer->render_target(), content_rect, layer->draw_transform(), - LayerImplDrawTransformIsUnknown(layer), - layer->is_clipped(), - layer->clip_rect()); + LayerImplDrawTransformIsUnknown(layer)); } // Gives an unoccluded sub-rect of |content_rect| in the content space of the // layer. Simple wrapper around UnoccludedContentRect. gfx::Rect UnoccludedLayerContentRect(const LayerType* layer, gfx::Rect content_rect) const { + DCHECK(layer->visible_content_rect().Contains(content_rect)); return this->UnoccludedContentRect( layer->render_target(), content_rect, layer->draw_transform(), - LayerImplDrawTransformIsUnknown(layer), - layer->is_clipped(), - layer->clip_rect()); + LayerImplDrawTransformIsUnknown(layer)); } }; @@ -562,8 +560,8 @@ class OcclusionTrackerTestIdentityTransforms EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 30, 70, 70))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(29, 30, 70, 70))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 29, 70, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 30, 70, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 31, 70, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 30, 69, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 31, 70, 69))); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( parent, gfx::Rect(30, 30, 70, 70)).IsEmpty()); @@ -578,19 +576,19 @@ class OcclusionTrackerTestIdentityTransforms parent, gfx::Rect(30, 29, 70, 70))); EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 29, 70, 70))); + parent, gfx::Rect(31, 29, 69, 70))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 30, 70, 70))); + parent, gfx::Rect(31, 30, 69, 70))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 31, 70, 70))); + parent, gfx::Rect(31, 31, 69, 69))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(30, 31, 70, 70))); + parent, gfx::Rect(30, 31, 70, 69))); EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(29, 31, 70, 70))); + parent, gfx::Rect(29, 31, 70, 69))); } }; @@ -632,42 +630,26 @@ class OcclusionTrackerTestQuadsMismatchLayer gfx::Transform quad_transform; quad_transform.Translate(30.0, 30.0); - gfx::Rect clip_rect_in_target(0, 0, 100, 100); EXPECT_TRUE(occlusion.UnoccludedContentRect(parent, gfx::Rect(0, 0, 10, 10), quad_transform, - false, - true, - clip_rect_in_target).IsEmpty()); + false).IsEmpty()); EXPECT_RECT_EQ(gfx::Rect(0, 0, 10, 10), occlusion.UnoccludedContentRect(parent, gfx::Rect(0, 0, 10, 10), quad_transform, - true, - true, - clip_rect_in_target)); + true)); EXPECT_RECT_EQ(gfx::Rect(40, 40, 10, 10), occlusion.UnoccludedContentRect(parent, gfx::Rect(40, 40, 10, 10), quad_transform, - false, - true, - clip_rect_in_target)); + false)); EXPECT_RECT_EQ(gfx::Rect(40, 30, 5, 10), occlusion.UnoccludedContentRect(parent, gfx::Rect(35, 30, 10, 10), quad_transform, - false, - true, - clip_rect_in_target)); - EXPECT_RECT_EQ(gfx::Rect(40, 40, 5, 5), - occlusion.UnoccludedContentRect(parent, - gfx::Rect(40, 40, 10, 10), - quad_transform, - false, - true, - gfx::Rect(0, 0, 75, 75))); + false)); } }; @@ -712,14 +694,14 @@ class OcclusionTrackerTestRotatedChild : public OcclusionTrackerTest<Types> { EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 30, 70, 70))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(29, 30, 70, 70))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 29, 70, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 30, 70, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 31, 70, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 30, 69, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 31, 70, 69))); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( parent, gfx::Rect(30, 30, 70, 70)).IsEmpty()); EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 70), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(29, 30, 70, 70))); + parent, gfx::Rect(29, 30, 69, 70))); EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70), occlusion.UnoccludedLayerContentRect( parent, gfx::Rect(29, 29, 70, 70))); @@ -728,19 +710,19 @@ class OcclusionTrackerTestRotatedChild : public OcclusionTrackerTest<Types> { parent, gfx::Rect(30, 29, 70, 70))); EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 29, 70, 70))); + parent, gfx::Rect(31, 29, 69, 70))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 30, 70, 70))); + parent, gfx::Rect(31, 30, 69, 70))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 31, 70, 70))); + parent, gfx::Rect(31, 31, 69, 69))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(30, 31, 70, 70))); + parent, gfx::Rect(30, 31, 70, 69))); EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(29, 31, 70, 70))); + parent, gfx::Rect(29, 31, 70, 69))); } }; @@ -783,8 +765,8 @@ class OcclusionTrackerTestTranslatedChild : public OcclusionTrackerTest<Types> { EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(50, 50, 50, 50))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(49, 50, 50, 50))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(50, 49, 50, 50))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(51, 50, 50, 50))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(50, 51, 50, 50))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(51, 50, 49, 50))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(50, 51, 50, 49))); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( parent, gfx::Rect(50, 50, 50, 50)).IsEmpty()); @@ -799,16 +781,16 @@ class OcclusionTrackerTestTranslatedChild : public OcclusionTrackerTest<Types> { parent, gfx::Rect(50, 49, 50, 50))); EXPECT_RECT_EQ(gfx::Rect(51, 49, 49, 1), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(51, 49, 50, 50))); + parent, gfx::Rect(51, 49, 49, 50))); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(51, 50, 50, 50)).IsEmpty()); + parent, gfx::Rect(51, 50, 49, 50)).IsEmpty()); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(51, 51, 50, 50)).IsEmpty()); + parent, gfx::Rect(51, 51, 49, 49)).IsEmpty()); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(50, 51, 50, 50)).IsEmpty()); + parent, gfx::Rect(50, 51, 50, 49)).IsEmpty()); EXPECT_RECT_EQ(gfx::Rect(49, 51, 1, 49), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(49, 51, 50, 50))); + parent, gfx::Rect(49, 51, 50, 49))); } }; @@ -863,8 +845,8 @@ class OcclusionTrackerTestChildInRotatedChild EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 40, 70, 60))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(29, 40, 70, 60))); EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 39, 70, 60))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 40, 70, 60))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 41, 70, 60))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(31, 40, 69, 60))); + EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 41, 70, 59))); /* Justification for the above occlusion from |layer|: 100 @@ -1096,10 +1078,10 @@ class OcclusionTrackerTestVisitTargetTwoTimes parent, gfx::Rect(20, 39, 80, 60))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 40, 70, 60))); + parent, gfx::Rect(31, 40, 69, 60))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(30, 41, 70, 60))); + parent, gfx::Rect(30, 41, 70, 59))); /* Justification for the above occlusion from |layer|: 100 @@ -1265,28 +1247,20 @@ class OcclusionTrackerTestSurfaceWithTwoOpaqueChildren EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(10, 430, 60, 70))); EXPECT_FALSE(occlusion.OccludedLayer(child, gfx::Rect(9, 430, 60, 70))); - // These rects are occluded except for the part outside the bounds of the - // target surface. - EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(10, 429, 60, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(11, 430, 60, 70))); - EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(10, 431, 60, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(11, 430, 59, 70))); + EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(10, 431, 60, 69))); EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( child, gfx::Rect(10, 430, 60, 70)).IsEmpty()); EXPECT_RECT_EQ( gfx::Rect(9, 430, 1, 70), occlusion.UnoccludedLayerContentRect(child, gfx::Rect(9, 430, 60, 70))); - // These rects are occluded except for the part outside the bounds of the - // target surface. EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - child, gfx::Rect(10, 429, 60, 70))); + child, gfx::Rect(11, 430, 59, 70))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - child, gfx::Rect(11, 430, 60, 70))); - EXPECT_RECT_EQ(gfx::Rect(), - occlusion.UnoccludedLayerContentRect( - child, gfx::Rect(10, 431, 60, 70))); + child, gfx::Rect(10, 431, 60, 69))); this->LeaveContributingSurface(child, &occlusion); this->EnterLayer(parent, &occlusion, false); @@ -1310,10 +1284,10 @@ class OcclusionTrackerTestSurfaceWithTwoOpaqueChildren parent, gfx::Rect(30, 39, 70, 60))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(31, 40, 70, 60))); + parent, gfx::Rect(31, 40, 69, 60))); EXPECT_RECT_EQ(gfx::Rect(), occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(30, 41, 70, 60))); + parent, gfx::Rect(30, 41, 70, 59))); /* Justification for the above occlusion from |layer1| and |layer2|: @@ -1389,12 +1363,6 @@ class OcclusionTrackerTestOverlappingSurfaceSiblings EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(), occlusion.occlusion_from_inside_target().ToString()); - EXPECT_TRUE(occlusion.OccludedLayer(child2, gfx::Rect(-10, 420, 70, 80))); - EXPECT_TRUE(occlusion.OccludedLayer(child2, gfx::Rect(-11, 420, 70, 80))); - EXPECT_TRUE(occlusion.OccludedLayer(child2, gfx::Rect(-10, 419, 70, 80))); - EXPECT_TRUE(occlusion.OccludedLayer(child2, gfx::Rect(-10, 420, 71, 80))); - EXPECT_TRUE(occlusion.OccludedLayer(child2, gfx::Rect(-10, 420, 70, 81))); - // There is nothing above child2's surface in the z-order. EXPECT_RECT_EQ(gfx::Rect(-10, 420, 70, 80), occlusion.UnoccludedContributingSurfaceContentRect( @@ -1805,429 +1773,6 @@ class OcclusionTrackerTestReplicaWithMask : public OcclusionTrackerTest<Types> { ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestReplicaWithMask); template <class Types> -class OcclusionTrackerTestLayerClipRectOutsideChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestLayerClipRectOutsideChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* clip = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(200.f, 100.f), - gfx::Size(100, 100), - false); - clip->SetMasksToBounds(true); - typename Types::ContentLayerType* layer = - this->CreateDrawingLayer(clip, - this->identity_matrix, - gfx::PointF(-200.f, -100.f), - gfx::Size(200, 200), - false); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 1000, 1000)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(200, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->EnterLayer(clip, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(-100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(0, -100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(0, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(clip, gfx::Rect(0, 0, 100, 100))); - - EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100), - occlusion.UnoccludedLayerContentRect( - clip, gfx::Rect(-100, -100, 300, 300))); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOutsideChild); - -template <class Types> -class OcclusionTrackerTestViewportRectOutsideChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestViewportRectOutsideChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(200, 100, 100, 100)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(200, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(parent, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100))); - EXPECT_FALSE( - occlusion.OccludedLayer(parent, gfx::Rect(200, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100))); - - EXPECT_RECT_EQ(gfx::Rect(200, 100, 100, 100), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 300))); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOutsideChild); - -template <class Types> -class OcclusionTrackerTestLayerClipRectOverChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestLayerClipRectOverChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* clip = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(100.f, 100.f), - gfx::Size(100, 100), - false); - clip->SetMasksToBounds(true); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(clip, - this->identity_matrix, - gfx::PointF(-100.f, -100.f), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 1000, 1000)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - - EXPECT_EQ(gfx::Rect(100, 100, 100, 100).ToString(), - occlusion.occlusion_from_inside_target().ToString()); - - this->EnterLayer(clip, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(100, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(200, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(200, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(0, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(100, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(clip, gfx::Rect(200, 200, 100, 100))); - - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - clip, gfx::Rect(0, 0, 300, 300)).IsEmpty()); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectOverChild); - -template <class Types> -class OcclusionTrackerTestViewportRectOverChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestViewportRectOverChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(100, 100, 100, 100)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(parent, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100))); - - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 300)).IsEmpty()); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOverChild); - -template <class Types> -class OcclusionTrackerTestLayerClipRectPartlyOverChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestLayerClipRectPartlyOverChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* clip = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(50.f, 50.f), - gfx::Size(200, 200), - false); - clip->SetMasksToBounds(true); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(clip, - this->identity_matrix, - gfx::PointF(-50.f, -50.f), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 1000, 1000)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 50))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 50, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 50))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 50, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(clip, &occlusion, false); - - EXPECT_EQ(gfx::Rect(50, 50, 150, 150).ToString(), - occlusion.occlusion_from_inside_target().ToString()); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectPartlyOverChild); - -template <class Types> -class OcclusionTrackerTestViewportRectPartlyOverChild - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestViewportRectPartlyOverChild(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(50, 50, 200, 200)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(parent, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100))); - EXPECT_FALSE( - occlusion.OccludedLayer(parent, gfx::Rect(200, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(200, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(0, 200, 100, 100))); - EXPECT_FALSE( - occlusion.OccludedLayer(parent, gfx::Rect(100, 200, 100, 100))); - EXPECT_FALSE( - occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100))); - - EXPECT_RECT_EQ(gfx::Rect(50, 50, 200, 200), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 300))); - EXPECT_RECT_EQ(gfx::Rect(200, 50, 50, 50), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 100))); - EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 100, 300, 100))); - EXPECT_RECT_EQ(gfx::Rect(200, 100, 50, 100), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(200, 100, 100, 100))); - EXPECT_RECT_EQ(gfx::Rect(100, 200, 100, 50), - occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(100, 200, 100, 100))); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectPartlyOverChild); - -template <class Types> -class OcclusionTrackerTestViewportRectOverNothing - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestViewportRectOverNothing(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(500, 500, 100, 100)); - - this->EnterLayer(layer, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - - this->LeaveLayer(layer, &occlusion); - this->VisitContributingSurface(layer, &occlusion); - this->EnterLayer(parent, &occlusion, false); - - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 100, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 0, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(0, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(100, 200, 100, 100))); - EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100))); - - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 300)).IsEmpty()); - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 0, 300, 100)).IsEmpty()); - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(0, 100, 300, 100)).IsEmpty()); - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(200, 100, 100, 100)).IsEmpty()); - EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - parent, gfx::Rect(100, 200, 100, 100)).IsEmpty()); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestViewportRectOverNothing); - -template <class Types> -class OcclusionTrackerTestLayerClipRectForLayerOffOrigin - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestLayerClipRectForLayerOffOrigin( - bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 300)); - typename Types::ContentLayerType* layer = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(200, 200), - true); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 1000, 1000)); - this->EnterLayer(layer, &occlusion, false); - - // This layer is translated when drawn into its target. So if the clip rect - // given from the target surface is not in that target space, then after - // translating these query rects into the target, they will fall outside the - // clip and be considered occluded. - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100))); - EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestLayerClipRectForLayerOffOrigin); - -template <class Types> class OcclusionTrackerTestOpaqueContentsRegionEmpty : public OcclusionTrackerTest<Types> { protected: @@ -2254,9 +1799,6 @@ class OcclusionTrackerTestOpaqueContentsRegionEmpty EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100))); EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100))); - // Occluded since its outside the surface bounds. - EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(200, 100, 100, 100))); - this->LeaveLayer(layer, &occlusion); this->VisitContributingSurface(layer, &occlusion); this->EnterLayer(parent, &occlusion, false); @@ -2515,7 +2057,8 @@ class OcclusionTrackerTestPerspectiveTransformBehindCamera // this will include many more pixels but must include at least the bottom // 11 rows. EXPECT_TRUE(occlusion.UnoccludedLayerContentRect( - layer, gfx::Rect(0, 0, 500, 500)).Contains(gfx::Rect(0, 489, 500, 11))); + layer, gfx::Rect(0, 26, 500, 474)). + Contains(gfx::Rect(0, 489, 500, 11))); } }; @@ -3795,238 +3338,6 @@ ALL_OCCLUSIONTRACKER_TEST( OcclusionTrackerTestTwoBackgroundFiltersReduceOcclusionTwice); template <class Types> -class OcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilterWithClip - : public OcclusionTrackerTest<Types> { - protected: - explicit - OcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilterWithClip( - bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - // Make a surface and its replica, Each 50x50, that are completely - // surrounded by opaque layers which are above them in the z-order. - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(300, 150)); - // We stick the filtered surface inside a clipping surface so that we can - // make sure the clip is honored when exposing pixels for - // the background filter. - typename Types::LayerType* clipping_surface = - this->CreateDrawingSurface(parent, - this->identity_matrix, - gfx::PointF(), - gfx::Size(300, 70), - false); - clipping_surface->SetMasksToBounds(true); - typename Types::LayerType* filtered_surface = - this->CreateDrawingLayer(clipping_surface, - this->identity_matrix, - gfx::PointF(50.f, 50.f), - gfx::Size(50, 50), - false); - this->CreateReplicaLayer(filtered_surface, - this->identity_matrix, - gfx::PointF(150.f, 0.f), - gfx::Size()); - typename Types::LayerType* occluding_layer1 = this->CreateDrawingLayer( - parent, this->identity_matrix, gfx::PointF(), gfx::Size(300, 50), true); - typename Types::LayerType* occluding_layer2 = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(0.f, 100.f), - gfx::Size(300, 50), - true); - typename Types::LayerType* occluding_layer3 = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(0.f, 50.f), - gfx::Size(50, 50), - true); - typename Types::LayerType* occluding_layer4 = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(100.f, 50.f), - gfx::Size(100, 50), - true); - typename Types::LayerType* occluding_layer5 = - this->CreateDrawingLayer(parent, - this->identity_matrix, - gfx::PointF(250.f, 50.f), - gfx::Size(50, 50), - true); - - // Filters make the layer own a surface. This filter is large enough that it - // goes outside the bottom of the clipping_surface. - FilterOperations filters; - filters.Append(FilterOperation::CreateBlurFilter(12.f)); - filtered_surface->SetBackgroundFilters(filters); - - // Save the distance of influence for the blur effect. - int outset_top, outset_right, outset_bottom, outset_left; - filters.GetOutsets( - &outset_top, &outset_right, &outset_bottom, &outset_left); - - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 1000, 1000)); - - // These layers occlude pixels directly beside the filtered_surface. Because - // filtered surface blends pixels in a radius, it will need to see some of - // the pixels (up to radius far) underneath the occluding layers. - this->VisitLayer(occluding_layer5, &occlusion); - this->VisitLayer(occluding_layer4, &occlusion); - this->VisitLayer(occluding_layer3, &occlusion); - this->VisitLayer(occluding_layer2, &occlusion); - this->VisitLayer(occluding_layer1, &occlusion); - - Region expected_occlusion; - expected_occlusion.Union(gfx::Rect(0, 0, 300, 50)); - expected_occlusion.Union(gfx::Rect(0, 50, 50, 50)); - expected_occlusion.Union(gfx::Rect(100, 50, 100, 50)); - expected_occlusion.Union(gfx::Rect(250, 50, 50, 50)); - expected_occlusion.Union(gfx::Rect(0, 100, 300, 50)); - - EXPECT_EQ(expected_occlusion.ToString(), - occlusion.occlusion_from_inside_target().ToString()); - EXPECT_EQ(gfx::Rect().ToString(), - occlusion.occlusion_from_outside_target().ToString()); - - // Everything outside the surface/replica is occluded but the - // surface/replica itself is not. - this->VisitLayer(filtered_surface, &occlusion); - - // The filtered layer/replica does not occlude. - Region expected_occlusion_outside_surface; - expected_occlusion_outside_surface.Union(gfx::Rect(-50, -50, 300, 50)); - expected_occlusion_outside_surface.Union(gfx::Rect(-50, 0, 50, 50)); - expected_occlusion_outside_surface.Union(gfx::Rect(50, 0, 100, 50)); - expected_occlusion_outside_surface.Union(gfx::Rect(200, 0, 50, 50)); - expected_occlusion_outside_surface.Union(gfx::Rect(-50, 50, 300, 50)); - - EXPECT_EQ(expected_occlusion_outside_surface.ToString(), - occlusion.occlusion_from_outside_target().ToString()); - EXPECT_EQ(gfx::Rect().ToString(), - occlusion.occlusion_from_inside_target().ToString()); - - // The surface has a background blur, so it needs pixels that are currently - // considered occluded in order to be drawn. So the pixels it needs should - // be removed some the occluded area so that when we get to the parent they - // are drawn. - this->VisitContributingSurface(filtered_surface, &occlusion); - - this->VisitLayer(clipping_surface, &occlusion); - this->EnterContributingSurface(clipping_surface, &occlusion, false); - - Region expected_blurred_occlusion; - expected_blurred_occlusion.Union(gfx::Rect(0, 0, 300, 50 - outset_top)); - expected_blurred_occlusion.Union(gfx::Rect( - 0, 50 - outset_top, 50 - outset_left, 20 + outset_top + outset_bottom)); - expected_blurred_occlusion.Union( - gfx::Rect(100 + outset_right, - 50 - outset_top, - 100 - outset_right - outset_left, - 20 + outset_top + outset_bottom)); - expected_blurred_occlusion.Union( - gfx::Rect(250 + outset_right, - 50 - outset_top, - 50 - outset_right, - 20 + outset_top + outset_bottom)); - expected_blurred_occlusion.Union(gfx::Rect(0, 100 + 5, 300, 50 - 5)); - - EXPECT_EQ(expected_blurred_occlusion.ToString(), - occlusion.occlusion_from_outside_target().ToString()); - EXPECT_EQ(gfx::Rect().ToString(), - occlusion.occlusion_from_inside_target().ToString()); - - gfx::Rect outset_rect; - gfx::Rect clipped_outset_rect; - gfx::Rect test_rect; - - // Nothing in the (clipped) blur outsets for the filtered_surface is - // occluded. - outset_rect = gfx::Rect(50 - outset_left, - 50 - outset_top, - 50 + outset_left + outset_right, - 50 + outset_top + outset_bottom); - clipped_outset_rect = outset_rect; - clipped_outset_rect.Intersect(gfx::Rect(0 - outset_left, - 0 - outset_top, - 300 + outset_left + outset_right, - 70 + outset_top + outset_bottom)); - clipped_outset_rect.Intersect(gfx::Rect(0, 0, 300, 70)); - test_rect = outset_rect; - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - - // Stuff outside the (clipped) blur outsets is still occluded though. - test_rect = outset_rect; - test_rect.Inset(0, 0, -1, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(0, 0, 0, -1); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(-1, 0, 0, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(0, -1, 0, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - - // Nothing in the (clipped) blur outsets for the filtered_surface's replica - // is occluded. - outset_rect = gfx::Rect(200 - outset_left, - 50 - outset_top, - 50 + outset_left + outset_right, - 50 + outset_top + outset_bottom); - clipped_outset_rect = outset_rect; - clipped_outset_rect.Intersect(gfx::Rect(0 - outset_left, - 0 - outset_top, - 300 + outset_left + outset_right, - 70 + outset_top + outset_bottom)); - clipped_outset_rect.Intersect(gfx::Rect(0, 0, 300, 70)); - test_rect = outset_rect; - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - - // Stuff outside the (clipped) blur outsets is still occluded though. - test_rect = outset_rect; - test_rect.Inset(0, 0, -1, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(0, 0, 0, -1); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(-1, 0, 0, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - test_rect = outset_rect; - test_rect.Inset(0, -1, 0, 0); - EXPECT_RECT_EQ( - clipped_outset_rect, - occlusion.UnoccludedLayerContentRect(clipping_surface, test_rect)); - } -}; - -ALL_OCCLUSIONTRACKER_TEST( - OcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilterWithClip); - -template <class Types> class OcclusionTrackerTestDontReduceOcclusionBelowBackgroundFilter : public OcclusionTrackerTest<Types> { protected: @@ -4479,51 +3790,6 @@ ALL_OCCLUSIONTRACKER_TEST( OcclusionTrackerTestPreventOcclusionOnContributingSurface) template <class Types> -class OcclusionTrackerTestPreventOcclusionByClipping - : public OcclusionTrackerTest<Types> { - protected: - explicit OcclusionTrackerTestPreventOcclusionByClipping(bool opaque_layers) - : OcclusionTrackerTest<Types>(opaque_layers) {} - void RunMyTest() { - typename Types::ContentLayerType* parent = this->CreateRoot( - this->identity_matrix, gfx::PointF(), gfx::Size(400, 400)); - typename Types::LayerType* unprevented = this->CreateDrawingLayer( - parent, this->identity_matrix, gfx::PointF(), gfx::Size(50, 50), false); - typename Types::LayerType* prevented = this->CreateDrawingLayer( - parent, this->identity_matrix, gfx::PointF(), gfx::Size(50, 50), false); - this->CalcDrawEtc(parent); - - TestOcclusionTrackerWithClip<typename Types::LayerType, - typename Types::RenderSurfaceType> occlusion( - gfx::Rect(0, 0, 10, 10)); - - this->EnterLayer(prevented, &occlusion, true); - - // This layer is not occluded because it is prevented. - EXPECT_FALSE(occlusion.OccludedLayer(prevented, - gfx::Rect(50, 50))); - - EXPECT_EQ(gfx::Rect(50, 50).ToString(), - occlusion.UnoccludedLayerContentRect( - prevented, - gfx::Rect(50, 50)).ToString()); - - this->LeaveLayer(prevented, &occlusion); - this->EnterLayer(unprevented, &occlusion, false); - - // This layer is clipped by the screen space clip rect. - EXPECT_EQ(gfx::Rect(10, 10).ToString(), - occlusion.UnoccludedLayerContentRect( - unprevented, - gfx::Rect(50, 50)).ToString()); - - this->LeaveLayer(unprevented, &occlusion); - } -}; - -ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestPreventOcclusionByClipping) - -template <class Types> class OcclusionTrackerTestScaledLayerIsClipped : public OcclusionTrackerTest<Types> { protected: |