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

Unified Diff: cc/trees/occlusion_tracker_unittest.cc

Issue 202523002: cc: Replace Region with SimpleEnclosedRegion for occlusion tracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: simpleregion: . Created 6 years, 4 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
« cc/trees/occlusion_tracker.cc ('K') | « cc/trees/occlusion_tracker.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/occlusion_tracker_unittest.cc
diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc
index e6464a254dcd8b82f20b42161df255ac94458d42..5794c5876f9897dc24afc2171137bf716bec471c 100644
--- a/cc/trees/occlusion_tracker_unittest.cc
+++ b/cc/trees/occlusion_tracker_unittest.cc
@@ -33,9 +33,11 @@ class TestContentLayer : public Layer {
SetIsDrawable(true);
}
- virtual Region VisibleContentOpaqueRegion() const OVERRIDE {
- if (override_opaque_contents_rect_)
- return gfx::IntersectRects(opaque_contents_rect_, visible_content_rect());
+ virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE {
+ if (override_opaque_contents_rect_) {
+ return SimpleEnclosedRegion(
+ gfx::IntersectRects(opaque_contents_rect_, visible_content_rect()));
+ }
return Layer::VisibleContentOpaqueRegion();
}
void SetOpaqueContentsRect(const gfx::Rect& opaque_contents_rect) {
@@ -57,9 +59,11 @@ class TestContentLayerImpl : public LayerImpl {
SetDrawsContent(true);
}
- virtual Region VisibleContentOpaqueRegion() const OVERRIDE {
- if (override_opaque_contents_rect_)
- return gfx::IntersectRects(opaque_contents_rect_, visible_content_rect());
+ virtual SimpleEnclosedRegion VisibleContentOpaqueRegion() const OVERRIDE {
+ if (override_opaque_contents_rect_) {
+ return SimpleEnclosedRegion(
+ gfx::IntersectRects(opaque_contents_rect_, visible_content_rect()));
+ }
return LayerImpl::VisibleContentOpaqueRegion();
}
void SetOpaqueContentsRect(const gfx::Rect& opaque_contents_rect) {
@@ -179,13 +183,7 @@ template <typename Types> class OcclusionTrackerTest : public testing::Test {
virtual void RunMyTest() = 0;
- virtual void TearDown() {
- Types::DestroyLayer(&root_);
- render_surface_layer_list_.reset();
- render_surface_layer_list_impl_.clear();
- replica_layers_.clear();
- mask_layers_.clear();
- }
+ virtual void TearDown() { DestroyLayers(); }
typename Types::HostType* GetHost();
@@ -287,6 +285,14 @@ template <typename Types> class OcclusionTrackerTest : public testing::Test {
return layer;
}
+ void DestroyLayers() {
+ Types::DestroyLayer(&root_);
+ render_surface_layer_list_.reset();
+ render_surface_layer_list_impl_.clear();
+ replica_layers_.clear();
+ mask_layers_.clear();
+ ResetLayerIterator();
+ }
void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {}
@@ -336,14 +342,14 @@ template <typename Types> class OcclusionTrackerTest : public testing::Test {
void EnterLayer(typename Types::LayerType* layer,
typename Types::OcclusionTrackerType* occlusion) {
- ASSERT_EQ(layer, *layer_iterator_);
+ ASSERT_EQ(*layer_iterator_, layer);
ASSERT_TRUE(layer_iterator_.represents_itself());
occlusion->EnterLayer(layer_iterator_);
}
void LeaveLayer(typename Types::LayerType* layer,
typename Types::OcclusionTrackerType* occlusion) {
- ASSERT_EQ(layer, *layer_iterator_);
+ ASSERT_EQ(*layer_iterator_, layer);
ASSERT_TRUE(layer_iterator_.represents_itself());
occlusion->LeaveLayer(layer_iterator_);
++layer_iterator_;
@@ -358,7 +364,7 @@ template <typename Types> class OcclusionTrackerTest : public testing::Test {
void EnterContributingSurface(
typename Types::LayerType* layer,
typename Types::OcclusionTrackerType* occlusion) {
- ASSERT_EQ(layer, *layer_iterator_);
+ ASSERT_EQ(*layer_iterator_, layer);
ASSERT_TRUE(layer_iterator_.represents_target_render_surface());
occlusion->EnterLayer(layer_iterator_);
occlusion->LeaveLayer(layer_iterator_);
@@ -370,7 +376,7 @@ template <typename Types> class OcclusionTrackerTest : public testing::Test {
void LeaveContributingSurface(
typename Types::LayerType* layer,
typename Types::OcclusionTrackerType* occlusion) {
- ASSERT_EQ(layer, *layer_iterator_);
+ ASSERT_EQ(*layer_iterator_, layer);
ASSERT_TRUE(layer_iterator_.represents_contributing_render_surface());
occlusion->LeaveLayer(layer_iterator_);
++layer_iterator_;
@@ -544,38 +550,32 @@ class OcclusionTrackerTestIdentityTransforms
EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- 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, 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)));
- EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 29, 70, 70)));
- EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 29, 70, 70)));
- EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 29, 69, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 30, 69, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 31, 69, 69)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 31, 70, 69)));
- EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 31, 70, 69)));
+ EXPECT_EQ(gfx::Rect(29, 30, 1, 70),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 30, 70, 70)));
+ EXPECT_EQ(gfx::Rect(29, 29, 70, 70),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 29, 70, 70)));
+ EXPECT_EQ(gfx::Rect(30, 29, 70, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 29, 70, 70)));
+ EXPECT_EQ(gfx::Rect(31, 29, 69, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 29, 69, 70)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 30, 69, 70)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 31, 69, 69)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 31, 70, 69)));
+ EXPECT_EQ(gfx::Rect(29, 31, 1, 69),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 31, 70, 69)));
}
};
@@ -619,12 +619,12 @@ class OcclusionTrackerTestQuadsMismatchLayer
EXPECT_TRUE(occlusion.UnoccludedContentRect(gfx::Rect(0, 0, 10, 10),
quad_transform).IsEmpty());
- EXPECT_RECT_EQ(gfx::Rect(40, 40, 10, 10),
- occlusion.UnoccludedContentRect(gfx::Rect(40, 40, 10, 10),
- quad_transform));
- EXPECT_RECT_EQ(gfx::Rect(40, 30, 5, 10),
- occlusion.UnoccludedContentRect(gfx::Rect(35, 30, 10, 10),
- quad_transform));
+ EXPECT_EQ(gfx::Rect(40, 40, 10, 10),
+ occlusion.UnoccludedContentRect(gfx::Rect(40, 40, 10, 10),
+ quad_transform));
+ EXPECT_EQ(gfx::Rect(40, 30, 5, 10),
+ occlusion.UnoccludedContentRect(gfx::Rect(35, 30, 10, 10),
+ quad_transform));
}
};
@@ -665,38 +665,32 @@ class OcclusionTrackerTestRotatedChild : public OcclusionTrackerTest<Types> {
EXPECT_EQ(gfx::Rect(30, 30, 70, 70).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- 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, 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, 69, 70)));
- EXPECT_RECT_EQ(gfx::Rect(29, 29, 70, 70),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 29, 70, 70)));
- EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 29, 70, 70)));
- EXPECT_RECT_EQ(gfx::Rect(31, 29, 69, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 29, 69, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 30, 69, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 31, 69, 69)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 31, 70, 69)));
- EXPECT_RECT_EQ(gfx::Rect(29, 31, 1, 69),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 31, 70, 69)));
+ EXPECT_EQ(gfx::Rect(29, 30, 1, 70),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 30, 69, 70)));
+ EXPECT_EQ(gfx::Rect(29, 29, 70, 70),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 29, 70, 70)));
+ EXPECT_EQ(gfx::Rect(30, 29, 70, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 29, 70, 70)));
+ EXPECT_EQ(gfx::Rect(31, 29, 69, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 29, 69, 70)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 30, 69, 70)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 31, 69, 69)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 31, 70, 69)));
+ EXPECT_EQ(gfx::Rect(29, 31, 1, 69),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 31, 70, 69)));
}
};
@@ -735,35 +729,29 @@ class OcclusionTrackerTestTranslatedChild : public OcclusionTrackerTest<Types> {
EXPECT_EQ(gfx::Rect(50, 50, 50, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- 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, 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());
- EXPECT_RECT_EQ(gfx::Rect(49, 50, 1, 50),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(49, 50, 50, 50)));
- EXPECT_RECT_EQ(gfx::Rect(49, 49, 50, 50),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(49, 49, 50, 50)));
- EXPECT_RECT_EQ(gfx::Rect(50, 49, 50, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(50, 49, 50, 50)));
- EXPECT_RECT_EQ(gfx::Rect(51, 49, 49, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(51, 49, 49, 50)));
+ EXPECT_EQ(gfx::Rect(49, 50, 1, 50),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(49, 50, 50, 50)));
+ EXPECT_EQ(gfx::Rect(49, 49, 50, 50),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(49, 49, 50, 50)));
+ EXPECT_EQ(gfx::Rect(50, 49, 50, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(50, 49, 50, 50)));
+ EXPECT_EQ(gfx::Rect(51, 49, 49, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(51, 49, 49, 50)));
EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
parent, gfx::Rect(51, 50, 49, 50)).IsEmpty());
EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
parent, gfx::Rect(51, 51, 49, 49)).IsEmpty());
EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
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, 49)));
+ EXPECT_EQ(gfx::Rect(49, 51, 1, 49),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(49, 51, 50, 49)));
}
};
@@ -814,12 +802,6 @@ class OcclusionTrackerTestChildInRotatedChild
EXPECT_EQ(gfx::Rect(30, 40, 70, 60).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- 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, 69, 60)));
- EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 41, 70, 59)));
-
/* Justification for the above occlusion from |layer|:
100
+---------------------+
@@ -912,15 +894,15 @@ class OcclusionTrackerTestScaledRenderSurface
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_inside_target().ToString());
- EXPECT_RECT_EQ(
+ EXPECT_EQ(
gfx::Rect(0, 0, 25, 25),
occlusion.UnoccludedLayerContentRect(layer2, gfx::Rect(0, 0, 25, 25)));
- EXPECT_RECT_EQ(gfx::Rect(10, 25, 15, 25),
- occlusion.UnoccludedLayerContentRect(
- layer2, gfx::Rect(10, 25, 25, 25)));
- EXPECT_RECT_EQ(gfx::Rect(25, 10, 25, 15),
- occlusion.UnoccludedLayerContentRect(
- layer2, gfx::Rect(25, 10, 25, 25)));
+ EXPECT_EQ(gfx::Rect(10, 25, 15, 25),
+ occlusion.UnoccludedLayerContentRect(layer2,
+ gfx::Rect(10, 25, 25, 25)));
+ EXPECT_EQ(gfx::Rect(25, 10, 25, 15),
+ occlusion.UnoccludedLayerContentRect(layer2,
+ gfx::Rect(25, 10, 25, 25)));
EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
layer2, gfx::Rect(25, 25, 25, 25)).IsEmpty());
}
@@ -935,171 +917,60 @@ class OcclusionTrackerTestVisitTargetTwoTimes
explicit OcclusionTrackerTestVisitTargetTwoTimes(bool opaque_layers)
: OcclusionTrackerTest<Types>(opaque_layers) {}
void RunMyTest() {
- gfx::Transform child_transform;
- child_transform.Translate(250.0, 250.0);
- child_transform.Rotate(90.0);
- child_transform.Translate(-250.0, -250.0);
-
typename Types::ContentLayerType* root = this->CreateRoot(
this->identity_matrix, gfx::PointF(), gfx::Size(200, 200));
- typename Types::ContentLayerType* parent = this->CreateDrawingLayer(
- root, this->identity_matrix, gfx::PointF(), gfx::Size(100, 100), true);
- parent->SetMasksToBounds(true);
- typename Types::LayerType* child = this->CreateSurface(
- parent, child_transform, gfx::PointF(30.f, 30.f), gfx::Size(500, 500));
- child->SetMasksToBounds(true);
- typename Types::ContentLayerType* layer =
- this->CreateDrawingLayer(child,
+ typename Types::LayerType* surface = this->CreateSurface(
+ root, this->identity_matrix, gfx::PointF(30.f, 30.f), gfx::Size());
+ typename Types::ContentLayerType* surface_child =
+ this->CreateDrawingLayer(surface,
this->identity_matrix,
gfx::PointF(10.f, 10.f),
- gfx::Size(500, 500),
+ gfx::Size(50, 50),
true);
- // |child2| makes |parent|'s surface get considered by OcclusionTracker
- // first, instead of |child|'s. This exercises different code in
- // LeaveToRenderTarget, as the target surface has already been seen.
- typename Types::ContentLayerType* child2 =
- this->CreateDrawingLayer(parent,
+ // |top_layer| makes |root|'s surface get considered by OcclusionTracker
+ // first, instead of |surface|'s. This exercises different code in
+ // LeaveToRenderTarget, as the target surface has already been seen when
+ // leaving |surface| later.
+ typename Types::ContentLayerType* top_layer =
+ this->CreateDrawingLayer(root,
this->identity_matrix,
- gfx::PointF(30.f, 30.f),
- gfx::Size(60, 20),
+ gfx::PointF(40.f, 90.f),
+ gfx::Size(50, 20),
true);
this->CalcDrawEtc(root);
TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
gfx::Rect(0, 0, 1000, 1000));
- this->VisitLayer(child2, &occlusion);
+ this->VisitLayer(top_layer, &occlusion);
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(30, 30, 60, 20).ToString(),
+ EXPECT_EQ(gfx::Rect(40, 90, 50, 20).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- this->VisitLayer(layer, &occlusion);
+ this->VisitLayer(surface_child, &occlusion);
- EXPECT_EQ(gfx::Rect(0, 440, 20, 60).ToString(),
+ EXPECT_EQ(gfx::Rect(10, 60, 50, 20).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(),
+ EXPECT_EQ(gfx::Rect(10, 10, 50, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- this->EnterContributingSurface(child, &occlusion);
+ this->EnterContributingSurface(surface, &occlusion);
- EXPECT_EQ(gfx::Rect(0, 440, 20, 60).ToString(),
+ EXPECT_EQ(gfx::Rect(10, 60, 50, 20).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(),
+ EXPECT_EQ(gfx::Rect(10, 10, 50, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- // Occlusion in |child2| should get merged with the |child| surface we are
- // leaving now.
- this->LeaveContributingSurface(child, &occlusion);
- this->EnterLayer(parent, &occlusion);
+ // Occlusion from |top_layer| already in the root target should get merged
+ // with the occlusion from the |surface| we are leaving now.
+ this->LeaveContributingSurface(surface, &occlusion);
+ this->EnterLayer(root, &occlusion);
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(UnionRegions(gfx::Rect(30, 30, 60, 10), gfx::Rect(30, 40, 70, 60))
- .ToString(),
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
+ EXPECT_EQ(gfx::Rect(40, 40, 50, 70).ToString(),
occlusion.occlusion_from_inside_target().ToString());
-
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 30, 70, 70)));
- EXPECT_RECT_EQ(gfx::Rect(90, 30, 10, 10),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 30, 70, 70)));
-
- EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 30, 60, 10)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(29, 30, 60, 10)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 29, 60, 10)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(31, 30, 60, 10)));
- EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 31, 60, 10)));
-
- 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.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 30, 60, 10)).IsEmpty());
- EXPECT_RECT_EQ(gfx::Rect(29, 30, 1, 10),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 30, 60, 10)));
- EXPECT_RECT_EQ(gfx::Rect(30, 29, 60, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 29, 60, 10)));
- EXPECT_RECT_EQ(gfx::Rect(90, 30, 1, 10),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 30, 60, 10)));
- EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 31, 60, 10)).IsEmpty());
-
- EXPECT_TRUE(occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 40, 70, 60)).IsEmpty());
- EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 40, 70, 60)));
- // This rect is mostly occluded by |child2|.
- EXPECT_RECT_EQ(gfx::Rect(90, 39, 10, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 39, 70, 60)));
- // This rect extends past top/right ends of |child2|.
- EXPECT_RECT_EQ(gfx::Rect(30, 29, 70, 11),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 29, 70, 70)));
- // This rect extends past left/right ends of |child2|.
- EXPECT_RECT_EQ(gfx::Rect(20, 39, 80, 60),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(20, 39, 80, 60)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 40, 69, 60)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 41, 70, 59)));
-
- /* Justification for the above occlusion from |layer|:
- 100
- +---------------------+
enne (OOO) 2014/08/21 20:48:05 This beautiful ascii art diagram, nuoooo~!
danakj 2014/08/21 21:15:31 Don't worry there is more still xD
- | |
- | 30 | rotate(90)
- | 30 + ------------+--------------------+
- 100 | | 10 | | | ==>
- | |10+----------|----------------------+
- | + ------------+ | | |
- | | | | | |
- | | | | | |
- +----|--|-------------+ | |
- | | | |
- | | | |
- | | | |500
- | | | |
- | | | |
- | | | |
- | | | |
- +--|-------------------------------+ |
- | |
- +---------------------------------+
- 500
-
-
- +---------------------+
- | |30 Visible region of |layer|: /////
- | 30 60 | |child2|: \\\\\
- | 30 +------------+--------------------+
- | |\\\\\\\\\\\\| |10 |
- | +--|\\\\\\\\\\\\|-----------------+ |
- | | +------------+//| 420 | |
- | | |///////////////|60 | |
- | | |///////////////| | |
- +--|--|---------------+ | |
- 20|10| 70 | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | |10|
- | +------------------------------|--+
- | 490 |
- +---------------------------------+
- 500
- */
}
};
@@ -1153,8 +1024,7 @@ class OcclusionTrackerTestSurfaceRotatedOffAxis
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_inside_target().ToString());
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(75, 55, 1, 1)));
- EXPECT_RECT_EQ(
+ EXPECT_EQ(
gfx::Rect(75, 55, 1, 1),
occlusion.UnoccludedLayerContentRect(parent, gfx::Rect(75, 55, 1, 1)));
}
@@ -1213,22 +1083,17 @@ class OcclusionTrackerTestSurfaceWithTwoOpaqueChildren
EXPECT_EQ(gfx::Rect(10, 430, 60, 70).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- EXPECT_TRUE(occlusion.OccludedLayer(child, gfx::Rect(10, 430, 60, 70)));
- EXPECT_FALSE(occlusion.OccludedLayer(child, gfx::Rect(9, 430, 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(
+ EXPECT_EQ(
gfx::Rect(9, 430, 1, 70),
occlusion.UnoccludedLayerContentRect(child, gfx::Rect(9, 430, 60, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- child, gfx::Rect(11, 430, 59, 70)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- child, gfx::Rect(10, 431, 60, 69)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(child,
+ gfx::Rect(11, 430, 59, 70)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(child,
+ gfx::Rect(10, 431, 60, 69)));
this->LeaveContributingSurface(child, &occlusion);
this->EnterLayer(parent, &occlusion);
@@ -1238,24 +1103,20 @@ class OcclusionTrackerTestSurfaceWithTwoOpaqueChildren
EXPECT_EQ(gfx::Rect(30, 40, 70, 60).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- 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.UnoccludedLayerContentRect(
parent, gfx::Rect(30, 40, 70, 60)).IsEmpty());
- EXPECT_RECT_EQ(gfx::Rect(29, 40, 1, 60),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(29, 40, 70, 60)));
- EXPECT_RECT_EQ(gfx::Rect(30, 39, 70, 1),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 39, 70, 60)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(31, 40, 69, 60)));
- EXPECT_RECT_EQ(gfx::Rect(),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(30, 41, 70, 59)));
+ EXPECT_EQ(gfx::Rect(29, 40, 1, 60),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(29, 40, 70, 60)));
+ EXPECT_EQ(gfx::Rect(30, 39, 70, 1),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 39, 70, 60)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(31, 40, 69, 60)));
+ EXPECT_EQ(gfx::Rect(),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(30, 41, 70, 59)));
/* Justification for the above occlusion from |layer1| and |layer2|:
@@ -1293,29 +1154,20 @@ class OcclusionTrackerTestOverlappingSurfaceSiblings
explicit OcclusionTrackerTestOverlappingSurfaceSiblings(bool opaque_layers)
: OcclusionTrackerTest<Types>(opaque_layers) {}
void RunMyTest() {
- gfx::Transform child_transform;
- child_transform.Translate(250.0, 250.0);
- child_transform.Rotate(90.0);
- child_transform.Translate(-250.0, -250.0);
-
typename Types::ContentLayerType* parent = this->CreateRoot(
this->identity_matrix, gfx::PointF(), gfx::Size(100, 100));
parent->SetMasksToBounds(true);
typename Types::LayerType* child1 = this->CreateSurface(
- parent, child_transform, gfx::PointF(30.f, 30.f), gfx::Size(10, 10));
+ parent, this->identity_matrix, gfx::PointF(10.f, 0.f), gfx::Size());
typename Types::LayerType* child2 = this->CreateSurface(
- parent, child_transform, gfx::PointF(20.f, 40.f), gfx::Size(10, 10));
- typename Types::ContentLayerType* layer1 =
- this->CreateDrawingLayer(child1,
- this->identity_matrix,
- gfx::PointF(-10.f, -10.f),
- gfx::Size(510, 510),
- true);
+ parent, this->identity_matrix, gfx::PointF(30.f, 0.f), gfx::Size());
+ typename Types::ContentLayerType* layer1 = this->CreateDrawingLayer(
+ child1, this->identity_matrix, gfx::PointF(), gfx::Size(40, 50), true);
typename Types::ContentLayerType* layer2 =
this->CreateDrawingLayer(child2,
this->identity_matrix,
- gfx::PointF(-10.f, -10.f),
- gfx::Size(510, 510),
+ gfx::PointF(10.f, 0.f),
+ gfx::Size(40, 50),
true);
this->CalcDrawEtc(parent);
@@ -1325,72 +1177,30 @@ class OcclusionTrackerTestOverlappingSurfaceSiblings
this->VisitLayer(layer2, &occlusion);
this->EnterContributingSurface(child2, &occlusion);
+ // layer2's occlusion.
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(-10, 420, 70, 80).ToString(),
+ EXPECT_EQ(gfx::Rect(10, 0, 40, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- // There is nothing above child2's surface in the z-order.
- EXPECT_RECT_EQ(gfx::Rect(-10, 420, 70, 80),
- occlusion.UnoccludedSurfaceContentRect(
- child2, false, gfx::Rect(-10, 420, 70, 80)));
-
this->LeaveContributingSurface(child2, &occlusion);
this->VisitLayer(layer1, &occlusion);
this->EnterContributingSurface(child1, &occlusion);
- EXPECT_EQ(gfx::Rect(0, 430, 70, 80).ToString(),
+ // layer2's occlusion in the target space of layer1.
+ EXPECT_EQ(gfx::Rect(30, 0, 40, 50).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect(-10, 430, 80, 70).ToString(),
+ // layer1's occlusion.
+ EXPECT_EQ(gfx::Rect(0, 0, 40, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
- // child2's contents will occlude child1 below it.
- EXPECT_RECT_EQ(gfx::Rect(-10, 430, 10, 70),
- occlusion.UnoccludedSurfaceContentRect(
- child1, false, gfx::Rect(-10, 430, 80, 70)));
-
this->LeaveContributingSurface(child1, &occlusion);
this->EnterLayer(parent, &occlusion);
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(UnionRegions(gfx::Rect(30, 20, 70, 10), gfx::Rect(20, 30, 80, 70))
- .ToString(),
+ // The occlusion from from layer1 and layer2 is merged.
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
+ EXPECT_EQ(gfx::Rect(10, 0, 70, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
-
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(20, 20, 80, 80)));
-
- EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(30, 20, 70, 80)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(29, 20, 70, 80)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(30, 19, 70, 80)));
-
- EXPECT_TRUE(occlusion.OccludedLayer(parent, gfx::Rect(20, 30, 80, 70)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(19, 30, 80, 70)));
- EXPECT_FALSE(occlusion.OccludedLayer(parent, gfx::Rect(20, 29, 80, 70)));
-
- /* Justification for the above occlusion:
- 100
- +---------------------+
- | 20 | layer1
- | 30+ ---------------------------------+
- 100 | 30| | layer2 |
- |20+----------------------------------+ |
- | | | | | |
- | | | | | |
- | | | | | |
- +--|-|----------------+ | |
- | | | | 510
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | | | |
- | +--------------------------------|-+
- | |
- +----------------------------------+
- 510
- */
}
};
@@ -1454,9 +1264,9 @@ class OcclusionTrackerTestOverlappingSurfaceSiblingsWithTwoTransforms
this->EnterContributingSurface(child2, &occlusion);
// There is nothing above child2's surface in the z-order.
- EXPECT_RECT_EQ(gfx::Rect(-10, 420, 70, 80),
- occlusion.UnoccludedSurfaceContentRect(
- child2, false, gfx::Rect(-10, 420, 70, 80)));
+ EXPECT_EQ(gfx::Rect(-10, 420, 70, 80),
+ occlusion.UnoccludedSurfaceContentRect(
+ child2, false, gfx::Rect(-10, 420, 70, 80)));
this->LeaveContributingSurface(child2, &occlusion);
this->VisitLayer(layer1, &occlusion);
@@ -1620,14 +1430,10 @@ class OcclusionTrackerTestReplicaDoesOcclude
void RunMyTest() {
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(0.f, 100.f),
- gfx::Size(50, 50),
- true);
+ typename Types::LayerType* surface = this->CreateDrawingSurface(
+ parent, this->identity_matrix, gfx::PointF(), gfx::Size(50, 50), true);
this->CreateReplicaLayer(
- surface, this->identity_matrix, gfx::PointF(50.f, 50.f), gfx::Size());
+ surface, this->identity_matrix, gfx::PointF(0.f, 50.f), gfx::Size());
this->CalcDrawEtc(parent);
TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
@@ -1642,10 +1448,8 @@ class OcclusionTrackerTestReplicaDoesOcclude
this->EnterLayer(parent, &occlusion);
// The surface and replica should both be occluding the parent.
- EXPECT_EQ(
- UnionRegions(gfx::Rect(0, 100, 50, 50),
- gfx::Rect(50, 150, 50, 50)).ToString(),
- occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_EQ(gfx::Rect(50, 100).ToString(),
+ occlusion.occlusion_from_inside_target().ToString());
}
};
@@ -1668,7 +1472,7 @@ class OcclusionTrackerTestReplicaWithClipping
gfx::Size(50, 50),
true);
this->CreateReplicaLayer(
- surface, this->identity_matrix, gfx::PointF(50.f, 50.f), gfx::Size());
+ surface, this->identity_matrix, gfx::PointF(0.f, 50.f), gfx::Size());
this->CalcDrawEtc(parent);
TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
@@ -1676,17 +1480,19 @@ class OcclusionTrackerTestReplicaWithClipping
this->VisitLayer(surface, &occlusion);
+ // The surface layer's occlusion in its own space.
EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
this->VisitContributingSurface(surface, &occlusion);
this->EnterLayer(parent, &occlusion);
- // The surface and replica should both be occluding the parent.
- EXPECT_EQ(
- UnionRegions(gfx::Rect(0, 100, 50, 50),
- gfx::Rect(50, 150, 50, 20)).ToString(),
- occlusion.occlusion_from_inside_target().ToString());
+ // The surface and replica should both be occluding the parent, the
+ // replica's occlusion is clipped by the parent.
+ EXPECT_EQ(gfx::Rect(0, 100, 50, 70).ToString(),
+ occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
}
};
@@ -1752,16 +1558,15 @@ class OcclusionTrackerTestOpaqueContentsRegionEmpty
gfx::Rect(0, 0, 1000, 1000));
this->EnterLayer(layer, &occlusion);
- EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
- EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 0, 100, 100)));
- EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 100, 100, 100)));
- EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100, 100, 100)));
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
+ EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty());
this->LeaveLayer(layer, &occlusion);
this->VisitContributingSurface(layer, &occlusion);
this->EnterLayer(parent, &occlusion);
EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
+ EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty());
}
};
@@ -1794,13 +1599,6 @@ class OcclusionTrackerTestOpaqueContentsRegionNonEmpty
EXPECT_EQ(gfx::Rect(100, 100, 100, 100).ToString(),
occlusion.occlusion_from_inside_target().ToString());
-
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100)));
- EXPECT_TRUE(
- occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100)));
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100)));
}
{
TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
@@ -1813,13 +1611,6 @@ class OcclusionTrackerTestOpaqueContentsRegionNonEmpty
EXPECT_EQ(gfx::Rect(120, 120, 180, 180).ToString(),
occlusion.occlusion_from_inside_target().ToString());
-
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100)));
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100)));
- EXPECT_TRUE(
- occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100)));
}
{
TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
@@ -1832,13 +1623,6 @@ class OcclusionTrackerTestOpaqueContentsRegionNonEmpty
EXPECT_EQ(gfx::Rect(250, 250, 50, 50).ToString(),
occlusion.occlusion_from_inside_target().ToString());
-
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(0, 100, 100, 100)));
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(100, 100, 100, 100)));
- EXPECT_FALSE(
- occlusion.OccludedLayer(parent, gfx::Rect(200, 200, 100, 100)));
}
}
};
@@ -1872,7 +1656,7 @@ class OcclusionTrackerTest3dTransform : public OcclusionTrackerTest<Types> {
// The layer is rotated in 3d but without preserving 3d, so it only gets
// resized.
- EXPECT_RECT_EQ(
+ EXPECT_EQ(
gfx::Rect(0, 0, 200, 200),
occlusion.UnoccludedLayerContentRect(layer, gfx::Rect(0, 0, 200, 200)));
}
@@ -1966,7 +1750,7 @@ class OcclusionTrackerTestPerspectiveTransform
gfx::Rect(0, 0, 1000, 1000));
this->EnterLayer(layer, &occlusion);
- EXPECT_RECT_EQ(
+ EXPECT_EQ(
gfx::Rect(0, 0, 200, 200),
occlusion.UnoccludedLayerContentRect(layer, gfx::Rect(0, 0, 200, 200)));
}
@@ -2195,18 +1979,18 @@ class OcclusionTrackerTestAnimationOpacity1OnMainThread
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300),
- occlusion.UnoccludedLayerContentRect(
- surface_child, gfx::Rect(0, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(100, 0, 100, 300),
+ occlusion.UnoccludedLayerContentRect(surface_child,
+ gfx::Rect(0, 0, 200, 300)));
this->LeaveLayer(surface_child, &occlusion);
this->EnterLayer(surface, &occlusion);
EXPECT_EQ(gfx::Rect(0, 0, 200, 300).ToString(),
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300),
- occlusion.UnoccludedLayerContentRect(
- surface, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(200, 0, 50, 300),
+ occlusion.UnoccludedLayerContentRect(surface,
+ gfx::Rect(0, 0, 300, 300)));
this->LeaveLayer(surface, &occlusion);
this->EnterContributingSurface(surface, &occlusion);
@@ -2215,9 +1999,9 @@ class OcclusionTrackerTestAnimationOpacity1OnMainThread
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(0, 0, 250, 300),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 300, 300)));
this->LeaveContributingSurface(surface, &occlusion);
// Occlusion from outside the animating surface still exists.
@@ -2230,9 +2014,9 @@ class OcclusionTrackerTestAnimationOpacity1OnMainThread
this->EnterLayer(parent, &occlusion);
// Occlusion is not added for the animating |layer|.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(0, 0, 250, 300),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(0, 0, 300, 300)));
}
};
@@ -2304,9 +2088,9 @@ class OcclusionTrackerTestAnimationOpacity0OnMainThread
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(0, 0, 250, 300),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(0, 0, 300, 300)));
this->LeaveLayer(parent2, &occlusion);
this->VisitLayer(surface_child2, &occlusion);
@@ -2315,18 +2099,18 @@ class OcclusionTrackerTestAnimationOpacity0OnMainThread
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(100, 0, 100, 300),
- occlusion.UnoccludedLayerContentRect(
- surface_child, gfx::Rect(0, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(100, 0, 100, 300),
+ occlusion.UnoccludedLayerContentRect(surface_child,
+ gfx::Rect(0, 0, 200, 300)));
this->LeaveLayer(surface_child, &occlusion);
this->EnterLayer(surface, &occlusion);
EXPECT_EQ(gfx::Rect(0, 0, 200, 300).ToString(),
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect(250, 0, 50, 300).ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(200, 0, 50, 300),
- occlusion.UnoccludedLayerContentRect(
- surface, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(200, 0, 50, 300),
+ occlusion.UnoccludedLayerContentRect(surface,
+ gfx::Rect(0, 0, 300, 300)));
this->LeaveLayer(surface, &occlusion);
this->EnterContributingSurface(surface, &occlusion);
@@ -2335,9 +2119,9 @@ class OcclusionTrackerTestAnimationOpacity0OnMainThread
occlusion.occlusion_from_inside_target().ToString());
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(0, 0, 250, 300),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 300, 300)));
this->LeaveContributingSurface(surface, &occlusion);
// Occlusion from outside the animating surface still exists.
@@ -2350,9 +2134,9 @@ class OcclusionTrackerTestAnimationOpacity0OnMainThread
this->EnterLayer(parent, &occlusion);
// Occlusion is not added for the animating |layer|.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 250, 300),
- occlusion.UnoccludedLayerContentRect(
- parent, gfx::Rect(0, 0, 300, 300)));
+ EXPECT_EQ(gfx::Rect(0, 0, 250, 300),
+ occlusion.UnoccludedLayerContentRect(parent,
+ gfx::Rect(0, 0, 300, 300)));
}
};
@@ -2527,8 +2311,8 @@ class OcclusionTrackerTestSurfaceOcclusionTranslatesToParent
occlusion.occlusion_from_inside_target().ToString());
// Clear any stored occlusion.
- occlusion.set_occlusion_from_outside_target(Region());
- occlusion.set_occlusion_from_inside_target(Region());
+ occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion());
+ occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion());
this->VisitLayer(surface, &occlusion);
this->VisitContributingSurface(surface, &occlusion);
@@ -2627,9 +2411,9 @@ class OcclusionTrackerTestReplicaOccluded : public OcclusionTrackerTest<Types> {
this->EnterContributingSurface(surface, &occlusion);
// Surface is not occluded so it shouldn't think it is.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 100, 100),
- occlusion.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(0, 0, 100, 100),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2684,12 +2468,12 @@ class OcclusionTrackerTestSurfaceWithReplicaUnoccluded
this->EnterContributingSurface(surface, &occlusion);
// Surface is occluded, but only the top 10px of the replica.
- EXPECT_RECT_EQ(gfx::Rect(0, 0, 0, 0),
- occlusion.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 100)));
- EXPECT_RECT_EQ(gfx::Rect(0, 10, 100, 90),
- occlusion.UnoccludedSurfaceContentRect(
- surface, true, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(0, 0, 0, 0),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(0, 10, 100, 90),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, true, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2704,7 +2488,7 @@ class OcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
: OcclusionTrackerTest<Types>(opaque_layers) {}
void RunMyTest() {
typename Types::ContentLayerType* parent = this->CreateRoot(
- this->identity_matrix, gfx::PointF(), gfx::Size(100, 200));
+ this->identity_matrix, gfx::PointF(), gfx::Size(200, 100));
typename Types::LayerType* surface =
this->CreateDrawingSurface(parent,
this->identity_matrix,
@@ -2713,14 +2497,18 @@ class OcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
true);
this->CreateReplicaLayer(surface,
this->identity_matrix,
- gfx::PointF(0.f, 100.f),
+ gfx::PointF(100.f, 0.f),
gfx::Size(100, 100));
- typename Types::LayerType* over_surface = this->CreateDrawingLayer(
- parent, this->identity_matrix, gfx::PointF(), gfx::Size(40, 100), true);
+ typename Types::LayerType* over_surface =
+ this->CreateDrawingLayer(parent,
+ this->identity_matrix,
+ gfx::PointF(60.f, 0.f),
+ gfx::Size(40, 100),
+ true);
typename Types::LayerType* over_replica =
this->CreateDrawingLayer(parent,
this->identity_matrix,
- gfx::PointF(0.f, 100.f),
+ gfx::PointF(100.f, 0.f),
gfx::Size(50, 100),
true);
this->CalcDrawEtc(parent);
@@ -2735,8 +2523,7 @@ class OcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
EXPECT_EQ(gfx::Rect().ToString(),
occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(UnionRegions(gfx::Rect(0, 0, 40, 100), gfx::Rect(0, 100, 50, 100))
- .ToString(),
+ EXPECT_EQ(gfx::Rect(60, 0, 90, 100).ToString(),
occlusion.occlusion_from_inside_target().ToString());
this->VisitLayer(surface, &occlusion);
@@ -2750,12 +2537,12 @@ class OcclusionTrackerTestSurfaceAndReplicaOccludedDifferently
this->EnterContributingSurface(surface, &occlusion);
// Surface and replica are occluded different amounts.
- EXPECT_RECT_EQ(gfx::Rect(40, 0, 60, 100),
- occlusion.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 100)));
- EXPECT_RECT_EQ(gfx::Rect(50, 0, 50, 100),
- occlusion.UnoccludedSurfaceContentRect(
- surface, true, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(0, 0, 60, 100),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(50, 0, 50, 100),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, true, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2821,9 +2608,9 @@ class OcclusionTrackerTestSurfaceChildOfSurface
// The surface_child's parent does not have a clip rect as it owns a render
// surface. Make sure the unoccluded rect does not get clipped away
// inappropriately.
- EXPECT_RECT_EQ(gfx::Rect(0, 40, 100, 10),
- occlusion.UnoccludedSurfaceContentRect(
- surface_child, false, gfx::Rect(0, 0, 100, 50)));
+ EXPECT_EQ(gfx::Rect(0, 40, 100, 10),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface_child, false, gfx::Rect(0, 0, 100, 50)));
this->LeaveContributingSurface(surface_child, &occlusion);
// When the surface_child's occlusion is transformed up to its parent, make
@@ -2837,9 +2624,9 @@ 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.UnoccludedSurfaceContentRect(
- surface, false, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_EQ(gfx::Rect(0, 50, 100, 50),
+ occlusion.UnoccludedSurfaceContentRect(
+ surface, false, gfx::Rect(0, 0, 100, 100)));
}
};
@@ -2856,146 +2643,113 @@ class OcclusionTrackerTestDontOccludePixelsNeededForBackgroundFilter
gfx::Transform scale_by_half;
scale_by_half.Scale(0.5, 0.5);
- // Make a 50x50 filtered surface that is completely surrounded by opaque
- // layers which are above it in the z-order. The surface is scaled to test
- // that the pixel moving is done in the target space, where the background
- // filter is applied.
- typename Types::ContentLayerType* parent = this->CreateRoot(
- this->identity_matrix, gfx::PointF(), gfx::Size(200, 150));
- typename Types::LayerType* filtered_surface =
- this->CreateDrawingLayer(parent,
- scale_by_half,
- gfx::PointF(50.f, 50.f),
- gfx::Size(100, 100),
- false);
- typename Types::LayerType* occluding_layer1 = this->CreateDrawingLayer(
- parent, this->identity_matrix, gfx::PointF(), gfx::Size(200, 50), true);
- typename Types::LayerType* occluding_layer2 =
- this->CreateDrawingLayer(parent,
- this->identity_matrix,
- gfx::PointF(0.f, 100.f),
- gfx::Size(200, 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);
-
- // Filters make the layer own a surface.
FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(10.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> 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_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, 200, 50));
- expected_occlusion.Union(gfx::Rect(0, 50, 50, 50));
- expected_occlusion.Union(gfx::Rect(100, 50, 100, 50));
- expected_occlusion.Union(gfx::Rect(0, 100, 200, 50));
-
- EXPECT_EQ(expected_occlusion.ToString(),
- occlusion.occlusion_from_inside_target().ToString());
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
-
- this->VisitLayer(filtered_surface, &occlusion);
-
- // The filtered layer does not occlude.
- Region expected_occlusion_outside_surface;
- expected_occlusion_outside_surface.Union(gfx::Rect(-50, -50, 200, 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(-50, 50, 200, 50));
+ enum Direction {
+ LEFT,
+ RIGHT,
+ TOP,
+ BOTTOM,
+ LAST_DIRECTION = BOTTOM,
+ };
+
+ for (int i = 0; i <= LAST_DIRECTION; ++i) {
+ SCOPED_TRACE(i);
+
+ // Make a 50x50 filtered surface that is adjacent to occluding layers
+ // which are above it in the z-order in various configurations. The
+ // surface isscaled to test that the pixel moving is done in the target
enne (OOO) 2014/08/21 20:48:05 typo?
danakj 2014/08/21 21:15:31 Done.
+ // space, where the background filter is applied.
+ typename Types::ContentLayerType* parent = this->CreateRoot(
+ this->identity_matrix, gfx::PointF(), gfx::Size(200, 200));
+ typename Types::LayerType* filtered_surface =
+ this->CreateDrawingLayer(parent,
+ scale_by_half,
+ gfx::PointF(50.f, 50.f),
+ gfx::Size(100, 100),
+ false);
+ filtered_surface->SetBackgroundFilters(filters);
+
+ gfx::Rect occlusion_rect;
+ switch (i) {
+ case LEFT:
+ occlusion_rect = gfx::Rect(0, 0, 50, 200);
+ break;
+ case RIGHT:
+ occlusion_rect = gfx::Rect(100, 0, 50, 200);
+ break;
+ case TOP:
+ occlusion_rect = gfx::Rect(0, 0, 200, 50);
+ break;
+ case BOTTOM:
+ occlusion_rect = gfx::Rect(0, 100, 200, 50);
+ break;
+ }
+
+ typename Types::LayerType* occluding_layer =
+ this->CreateDrawingLayer(parent,
+ this->identity_matrix,
+ occlusion_rect.origin(),
+ occlusion_rect.size(),
+ true);
+ this->CalcDrawEtc(parent);
- EXPECT_EQ(expected_occlusion_outside_surface.ToString(),
- occlusion.occlusion_from_outside_target().ToString());
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_inside_target().ToString());
+ TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
+ gfx::Rect(0, 0, 200, 200));
- // 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 layer occludes 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_layer, &occlusion);
- this->EnterLayer(parent, &occlusion);
+ EXPECT_EQ(occlusion_rect.ToString(),
+ occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
- Region expected_blurred_occlusion;
- expected_blurred_occlusion.Union(gfx::Rect(0, 0, 200, 50 - outset_top));
- expected_blurred_occlusion.Union(gfx::Rect(
- 0, 50 - outset_top, 50 - outset_left, 50 + outset_top + outset_bottom));
- expected_blurred_occlusion.Union(
- gfx::Rect(100 + outset_right,
- 50 - outset_top,
- 100 - outset_right,
- 50 + outset_top + outset_bottom));
- expected_blurred_occlusion.Union(
- gfx::Rect(0, 100 + outset_bottom, 200, 50 - outset_bottom));
+ this->VisitLayer(filtered_surface, &occlusion);
- EXPECT_EQ(expected_blurred_occlusion.ToString(),
- occlusion.occlusion_from_inside_target().ToString());
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
+ // The occlusion is used fully inside the surface.
+ gfx::Rect occlusion_inside_surface =
+ occlusion_rect - gfx::Vector2d(50, 50);
+ EXPECT_TRUE(occlusion.occlusion_from_inside_target().IsEmpty());
+ EXPECT_EQ(occlusion_inside_surface.ToString(),
+ occlusion.occlusion_from_outside_target().ToString());
- gfx::Rect outset_rect;
- gfx::Rect test_rect;
+ // 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->EnterLayer(parent, &occlusion);
- // Nothing in the 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);
- test_rect = outset_rect;
- EXPECT_EQ(
- outset_rect.ToString(),
- occlusion.UnoccludedLayerContentRect(parent, test_rect).ToString());
+ gfx::Rect expected_occlusion = occlusion_rect;
+ switch (i) {
+ case LEFT:
+ expected_occlusion.Inset(0, 0, outset_right, 0);
+ break;
+ case RIGHT:
+ expected_occlusion.Inset(outset_right, 0, 0, 0);
+ break;
+ case TOP:
+ expected_occlusion.Inset(0, 0, 0, outset_right);
+ break;
+ case BOTTOM:
+ expected_occlusion.Inset(0, outset_right, 0, 0);
+ break;
+ }
+
+ EXPECT_EQ(expected_occlusion.ToString(),
+ occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
- // Stuff outside the blur outsets is still occluded though.
- test_rect = outset_rect;
- test_rect.Inset(0, 0, -1, 0);
- EXPECT_EQ(
- outset_rect.ToString(),
- occlusion.UnoccludedLayerContentRect(parent, test_rect).ToString());
- test_rect = outset_rect;
- test_rect.Inset(0, 0, 0, -1);
- EXPECT_EQ(
- outset_rect.ToString(),
- occlusion.UnoccludedLayerContentRect(parent, test_rect).ToString());
- test_rect = outset_rect;
- test_rect.Inset(-1, 0, 0, 0);
- EXPECT_EQ(
- outset_rect.ToString(),
- occlusion.UnoccludedLayerContentRect(parent, test_rect).ToString());
- test_rect = outset_rect;
- test_rect.Inset(0, -1, 0, 0);
- EXPECT_EQ(
- outset_rect.ToString(),
- occlusion.UnoccludedLayerContentRect(parent, test_rect).ToString());
+ this->DestroyLayers();
+ }
}
};
@@ -3133,21 +2887,28 @@ class OcclusionTrackerTestDontReduceOcclusionBelowBackgroundFilter
this->VisitContributingSurface(filtered_surface, &occlusion);
this->VisitLayer(behind_replica_layer, &occlusion);
- this->VisitLayer(behind_surface_layer, &occlusion);
// The layers behind the surface are not blurred, and their occlusion does
// not change, until we leave the surface. So it should not be modified by
// the filter here.
- gfx::Rect occlusion_behind_surface = gfx::Rect(60, 60, 30, 30);
gfx::Rect occlusion_behind_replica = gfx::Rect(210, 60, 30, 30);
-
- Region expected_opaque_bounds =
- UnionRegions(occlusion_behind_surface, occlusion_behind_replica);
- EXPECT_EQ(expected_opaque_bounds.ToString(),
+ EXPECT_EQ(occlusion_behind_replica.ToString(),
occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
+ // Clear the occlusion so the |behind_surface_layer| can add its occlusion
+ // without existing occlusion interfering.
+ occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion());
+
+ this->VisitLayer(behind_surface_layer, &occlusion);
+
+ // The layers behind the surface are not blurred, and their occlusion does
+ // not change, until we leave the surface. So it should not be modified by
+ // the filter here.
+ gfx::Rect occlusion_behind_surface = gfx::Rect(60, 60, 30, 30);
+ EXPECT_EQ(occlusion_behind_surface.ToString(),
+ occlusion.occlusion_from_inside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
}
};
@@ -3318,24 +3079,21 @@ class OcclusionTrackerTestReduceOcclusionWhenBackgroundFilterIsPartiallyOccluded
gfx::Rect occlusion_beside_surface = gfx::Rect(90, 40, 10, 10);
gfx::Rect occlusion_beside_replica = gfx::Rect(200, 40, 10, 10);
- Region expected_occlusion;
- expected_occlusion.Union(occlusion_above_surface);
- expected_occlusion.Union(occlusion_above_replica);
- expected_occlusion.Union(occlusion_beside_surface);
+ SimpleEnclosedRegion expected_occlusion;
expected_occlusion.Union(occlusion_beside_replica);
+ expected_occlusion.Union(occlusion_beside_surface);
+ expected_occlusion.Union(occlusion_above_replica);
+ expected_occlusion.Union(occlusion_above_surface);
- ASSERT_EQ(expected_occlusion.ToString(),
+ EXPECT_EQ(expected_occlusion.ToString(),
occlusion.occlusion_from_inside_target().ToString());
- EXPECT_EQ(gfx::Rect().ToString(),
- occlusion.occlusion_from_outside_target().ToString());
+ EXPECT_TRUE(occlusion.occlusion_from_outside_target().IsEmpty());
- Region::Iterator expected_rects(expected_occlusion);
- Region::Iterator target_surface_rects(
- occlusion.occlusion_from_inside_target());
- for (; expected_rects.has_rect();
- expected_rects.next(), target_surface_rects.next()) {
- ASSERT_TRUE(target_surface_rects.has_rect());
- EXPECT_EQ(expected_rects.rect(), target_surface_rects.rect());
+ const SimpleEnclosedRegion& actual_occlusion =
+ occlusion.occlusion_from_inside_target();
+ for (size_t i = 0; i < expected_occlusion.GetRegionComplexity(); ++i) {
+ ASSERT_LT(i, actual_occlusion.GetRegionComplexity());
+ EXPECT_EQ(expected_occlusion.GetRect(i), actual_occlusion.GetRect(i));
}
}
};
@@ -3561,5 +3319,95 @@ class OcclusionTrackerTestHiddenCopyRequestDoesNotOcclude
ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestHiddenCopyRequestDoesNotOcclude)
+template <class Types>
+class OcclusionTrackerTestOccludedLayer : public OcclusionTrackerTest<Types> {
+ protected:
+ explicit OcclusionTrackerTestOccludedLayer(bool opaque_layers)
+ : OcclusionTrackerTest<Types>(opaque_layers) {}
+ void RunMyTest() {
+ gfx::Transform translate;
+ translate.Translate(10.0, 20.0);
+ typename Types::ContentLayerType* root = this->CreateRoot(
+ this->identity_matrix, gfx::Point(), gfx::Size(200, 200));
+ typename Types::LayerType* surface = this->CreateSurface(
+ root, this->identity_matrix, gfx::Point(), gfx::Size(200, 200));
+ typename Types::LayerType* layer = this->CreateDrawingLayer(
+ surface, translate, gfx::Point(), gfx::Size(200, 200), false);
+ typename Types::ContentLayerType* outside_layer = this->CreateDrawingLayer(
+ root, this->identity_matrix, gfx::Point(), gfx::Size(200, 200), false);
+ this->CalcDrawEtc(root);
+
+ TestOcclusionTrackerWithClip<typename Types::LayerType> occlusion(
+ gfx::Rect(0, 0, 200, 200));
+ this->VisitLayer(outside_layer, &occlusion);
+ this->EnterLayer(layer, &occlusion);
+
+ // No occlusion, is not occluded.
+ occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion());
+ occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion());
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(100, 100)));
+
+ // Partial occlusion from outside, is not occluded.
+ occlusion.set_occlusion_from_outside_target(
+ SimpleEnclosedRegion(50, 50, 100, 100));
+ occlusion.set_occlusion_from_inside_target(SimpleEnclosedRegion());
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 30, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 80, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 0, 100, 100)));
+
+ // Full occlusion from outside, is occluded.
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 100, 100)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(130, 120, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(80, 70, 50, 50)));
+
+ // Partial occlusion from inside, is not occluded.
+ occlusion.set_occlusion_from_outside_target(SimpleEnclosedRegion());
+ occlusion.set_occlusion_from_inside_target(
+ SimpleEnclosedRegion(50, 50, 100, 100));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 30, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 80, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 0, 100, 100)));
+
+ // Full occlusion from inside, is occluded.
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 100, 100)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(130, 120, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(80, 70, 50, 50)));
+
+ // Partial occlusion from both, is not occluded.
+ occlusion.set_occlusion_from_outside_target(
+ SimpleEnclosedRegion(50, 50, 100, 50));
+ occlusion.set_occlusion_from_inside_target(
+ SimpleEnclosedRegion(50, 100, 100, 50));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 30, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 0, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(40, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 0, 80, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(0, 80, 100, 100)));
+ EXPECT_FALSE(occlusion.OccludedLayer(layer, gfx::Rect(90, 0, 100, 100)));
+
+ // Full occlusion from both, is occluded.
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 100, 100)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(40, 30, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(130, 120, 10, 10)));
+ EXPECT_TRUE(occlusion.OccludedLayer(layer, gfx::Rect(80, 70, 50, 50)));
+ }
+};
+
+ALL_OCCLUSIONTRACKER_TEST(OcclusionTrackerTestOccludedLayer)
+
} // namespace
} // namespace cc
« cc/trees/occlusion_tracker.cc ('K') | « cc/trees/occlusion_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698