Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3913)

Unified Diff: cc/trees/occlusion_tracker_unittest.cc

Issue 205443002: Do not clip inside OcclusionTracker: Contributing Surfaces Edition. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: occlusion-surface: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/trees/occlusion_tracker_unittest.cc
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc
index f4e2edbca9176190558aa7034a81d64308dc6ec1..8f083f54262a536071e07706cecca5d46403dd89 100644
--- a/cc/trees/occlusion_tracker_unittest.cc
+++ b/cc/trees/occlusion_tracker_unittest.cc
@@ -93,6 +93,17 @@ class TestOcclusionTrackerWithClip : public TestOcclusionTracker<LayerType> {
return this->UnoccludedContentRect(
layer->render_target(), content_rect, layer->draw_transform());
}
+
+ gfx::Rect UnoccludedSurfaceContentRect(const LayerType* layer,
+ bool for_replica,
+ const gfx::Rect& content_rect) const {
+ typename LayerType::RenderSurfaceType* surface = layer->render_surface();
+ gfx::Transform draw_transform = for_replica
+ ? surface->replica_draw_transform()
+ : surface->draw_transform();
+ return this->UnoccludedContributingSurfaceContentRect(
+ layer, content_rect, draw_transform);
+ }
};
struct OcclusionTrackerTestMainThreadTypes {
@@ -1325,7 +1336,7 @@ class OcclusionTrackerTestOverlappingSurfaceSiblings
// There is nothing above child2's surface in the z-order.
EXPECT_RECT_EQ(gfx::Rect(-10, 420, 70, 80),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
child2, false, gfx::Rect(-10, 420, 70, 80)));
this->LeaveContributingSurface(child2, &occlusion);
@@ -1339,7 +1350,7 @@ class OcclusionTrackerTestOverlappingSurfaceSiblings
// child2's contents will occlude child1 below it.
EXPECT_RECT_EQ(gfx::Rect(-10, 430, 10, 70),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
child1, false, gfx::Rect(-10, 430, 80, 70)));
this->LeaveContributingSurface(child1, &occlusion);
@@ -1448,7 +1459,7 @@ class OcclusionTrackerTestOverlappingSurfaceSiblingsWithTwoTransforms
// There is nothing above child2's surface in the z-order.
EXPECT_RECT_EQ(gfx::Rect(-10, 420, 70, 80),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
child2, false, gfx::Rect(-10, 420, 70, 80)));
this->LeaveContributingSurface(child2, &occlusion);
@@ -1461,15 +1472,12 @@ class OcclusionTrackerTestOverlappingSurfaceSiblingsWithTwoTransforms
occlusion.occlusion_from_inside_target().ToString());
// child2's contents will occlude child1 below it.
- EXPECT_RECT_EQ(gfx::Rect(420, -20, 80, 90),
- occlusion.UnoccludedContributingSurfaceContentRect(
- child1, false, gfx::Rect(420, -20, 80, 90)));
- EXPECT_RECT_EQ(gfx::Rect(490, -10, 10, 80),
- occlusion.UnoccludedContributingSurfaceContentRect(
- child1, false, gfx::Rect(420, -10, 80, 90)));
- EXPECT_RECT_EQ(gfx::Rect(420, -20, 70, 10),
- occlusion.UnoccludedContributingSurfaceContentRect(
- child1, false, gfx::Rect(420, -20, 70, 90)));
+ EXPECT_EQ(gfx::Rect(20, 30, 80, 70).ToString(),
+ occlusion.occlusion_on_contributing_surface_from_inside_target()
+ .ToString());
+ EXPECT_EQ(gfx::Rect().ToString(),
+ occlusion.occlusion_on_contributing_surface_from_outside_target()
+ .ToString());
this->LeaveContributingSurface(child1, &occlusion);
this->EnterLayer(parent, &occlusion);
@@ -2212,7 +2220,7 @@ class OcclusionTrackerTestAnimationOpacity1OnMainThread
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 300, 300)));
this->LeaveContributingSurface(surface, &occlusion);
@@ -2332,7 +2340,7 @@ class OcclusionTrackerTestAnimationOpacity0OnMainThread
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 300, 300)));
this->LeaveContributingSurface(surface, &occlusion);
@@ -2624,7 +2632,7 @@ class OcclusionTrackerTestReplicaOccluded : public OcclusionTrackerTest<Types> {
// Surface is not occluded so it shouldn't think it is.
EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2681,10 +2689,10 @@ class OcclusionTrackerTestSurfaceWithReplicaUnoccluded
// Surface is occluded, but only the top 10px of the replica.
EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 100, 100)));
EXPECT_RECT_EQ(gfx::Rect(0, 10, 100, 90),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, true, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2747,10 +2755,10 @@ class OcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
// Surface and replica are occluded different amounts.
EXPECT_RECT_EQ(gfx::Rect(40, 0, 60, 100),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 100, 100)));
EXPECT_RECT_EQ(gfx::Rect(50, 0, 50, 100),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, true, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2818,7 +2826,7 @@ class OcclusionTrackerTestSurfaceChildOfSurface
// surface. Make sure the unoccluded rect does not get clipped away
// inappropriately.
EXPECT_RECT_EQ(gfx::Rect(0, 40, 100, 10),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface_child, false, gfx::Rect(0, 0, 100, 50)));
this->LeaveContributingSurface(surface_child, &occlusion);
@@ -2834,7 +2842,7 @@ class OcclusionTrackerTestSurfaceChildOfSurface
this->EnterContributingSurface(surface, &occlusion);
// The surface's parent does have a clip rect as it is the root layer.
EXPECT_RECT_EQ(gfx::Rect(0, 50, 100, 50),
- occlusion.UnoccludedContributingSurfaceContentRect(
+ occlusion.UnoccludedSurfaceContentRect(
surface, false, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2842,141 +2850,6 @@ class OcclusionTrackerTestSurfaceChildOfSurface
ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestSurfaceChildOfSurface);
template <class Types>
-class OcclusionTrackerTestTopmostSurfaceIsClippedToViewport
- : public OcclusionTrackerTest<Types> {
- protected:
- explicit OcclusionTrackerTestTopmostSurfaceIsClippedToViewport(
- bool opaque_layers)
- : OcclusionTrackerTest<Types>(opaque_layers) {}
- void RunMyTest() {
- // This test verifies that the top-most surface is considered occluded
- // outside of its target's clip rect and outside the viewport rect.
-
- typename Types::ContentLayerType* parent = this->CreateRoot(
- this->identity_matrix, gfx::PointF(), gfx::Size(100, 200));
- typename Types::LayerType* surface =
- this->CreateDrawingSurface(parent,
- this->identity_matrix,
- gfx::PointF(),
- gfx::Size(100, 300),
- true);
- this->CalcDrawEtc(parent);
- {
- // Make a viewport rect that is larger than the root layer.
- TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
- gfx::Rect(0, 0, 1000, 1000));
-
- this->VisitLayer(surface, &occlusion);
-
- // The root layer always has a clip rect. So the parent of |surface| has a
- // clip rect giving the surface itself a clip rect.
- this->EnterContributingSurface(surface, &occlusion);
- // Make sure the parent's clip rect clips the unoccluded region of the
- // child surface.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 200),
- occlusion.UnoccludedContributingSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 300)));
- }
- this->ResetLayerIterator();
- {
- // Make a viewport rect that is smaller than the root layer.
- TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
- gfx::Rect(0, 0, 100, 100));
-
- this->VisitLayer(surface, &occlusion);
-
- // The root layer always has a clip rect. So the parent of |surface| has a
- // clip rect giving the surface itself a clip rect.
- this->EnterContributingSurface(surface, &occlusion);
- // Make sure the viewport rect clips the unoccluded region of the child
- // surface.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100),
- occlusion.UnoccludedContributingSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 300)));
- }
- }
-};
-
-ALL_OCCLUSIONTRACKER_TEST(
- OcclusionTrackerTestTopmostSurfaceIsClippedToViewport);
-
-template <class Types>
-class OcclusionTrackerTestSurfaceChildOfClippingSurface
- : public OcclusionTrackerTest<Types> {
- protected:
- explicit OcclusionTrackerTestSurfaceChildOfClippingSurface(bool opaque_layers)
- : OcclusionTrackerTest<Types>(opaque_layers) {}
- void RunMyTest() {
- // This test verifies that the surface cliprect does not end up empty and
- // clip away the entire unoccluded rect.
-
- typename Types::ContentLayerType* parent = this->CreateRoot(
- this->identity_matrix, gfx::PointF(), gfx::Size(80, 200));
- parent->SetMasksToBounds(true);
- typename Types::LayerType* surface =
- this->CreateDrawingSurface(parent,
- this->identity_matrix,
- gfx::PointF(),
- gfx::Size(100, 100),
- true);
- typename Types::LayerType* surface_child =
- this->CreateDrawingSurface(surface,
- this->identity_matrix,
- gfx::PointF(),
- gfx::Size(100, 100),
- false);
- typename Types::LayerType* topmost = this->CreateDrawingLayer(
- parent, this->identity_matrix, gfx::PointF(), gfx::Size(100, 50), true);
- this->CalcDrawEtc(parent);
-
- TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
- gfx::Rect(0, 0, 1000, 1000));
-
- // |topmost| occludes everything partially so we know occlusion is happening
- // at all.
- this->VisitLayer(topmost, &occlusion);
-
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(0, 0, 80, 50).ToString(),
- occlusion.occlusion_from_inside_target().ToString());
-
- // surface_child is not opaque and does not occlude, so we have a non-empty
- // unoccluded area on surface.
- this->VisitLayer(surface_child, &occlusion);
-
- EXPECT_EQ(gfx::Rect(0, 0, 80, 50).ToString(),
- occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(0, 0, 0, 0).ToString(),
- occlusion.occlusion_from_inside_target().ToString());
-
- // The root layer always has a clip rect. So the parent of |surface| has a
- // clip rect. However, the owning layer for |surface| does not mask to
- // bounds, so it doesn't have a clip rect of its own. Thus the parent of
- // |surface_child| exercises different code paths as its parent does not
- // have a clip rect.
-
- this->EnterContributingSurface(surface_child, &occlusion);
- // The surface_child's parent does not have a clip rect as it owns a render
- // surface.
- EXPECT_EQ(
- gfx::Rect(0, 50, 80, 50).ToString(),
- occlusion.UnoccludedContributingSurfaceContentRect(
- surface_child, false, gfx::Rect(0, 0, 100, 100)).ToString());
- this->LeaveContributingSurface(surface_child, &occlusion);
-
- this->VisitLayer(surface, &occlusion);
- this->EnterContributingSurface(surface, &occlusion);
- // The surface's parent does have a clip rect as it is the root layer.
- EXPECT_EQ(gfx::Rect(0, 50, 80, 50).ToString(),
- occlusion.UnoccludedContributingSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 100)).ToString());
- }
-};
-
-ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestSurfaceChildOfClippingSurface);
-
-template <class Types>
class OcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilter
: public OcclusionTrackerTest<Types> {
protected:
« no previous file with comments | « cc/trees/occlusion_tracker.cc ('k') | cc/trees/quad_culler.cc » ('j') | cc/trees/quad_culler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698