| Index: cc/trees/layer_tree_host_common_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
|
| index a36b6d37d4952e6afe2cc66564ad8c38c3038b3c..c573146421330d16f1b747490f2cb5a2e169eff0 100644
|
| --- a/cc/trees/layer_tree_host_common_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_common_unittest.cc
|
| @@ -103,8 +103,6 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
|
| Layer* page_scale_layer,
|
| Layer* inner_viewport_scroll_layer,
|
| Layer* outer_viewport_scroll_layer) {
|
| - PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
|
| -
|
| EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
|
| gfx::Size device_viewport_size =
|
| gfx::Size(root_layer->bounds().width() * device_scale_factor,
|
| @@ -184,8 +182,6 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
|
|
|
| void ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(Layer* root_layer) {
|
| DCHECK(root_layer->layer_tree_host());
|
| - PropertyTreeBuilder::PreCalculateMetaInformation(root_layer);
|
| -
|
| bool can_render_to_separate_surface = true;
|
|
|
| const Layer* page_scale_layer =
|
| @@ -221,8 +217,6 @@ class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
|
| void ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(
|
| LayerImpl* root_layer) {
|
| DCHECK(root_layer->layer_tree_impl());
|
| - PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer);
|
| -
|
| bool can_render_to_separate_surface = true;
|
|
|
| const LayerImpl* page_scale_layer = nullptr;
|
| @@ -4010,7 +4004,8 @@ TEST_F(LayerTreeHostCommonTest,
|
| TEST_F(LayerTreeHostCommonTest, ClipRectOfSurfaceWhoseParentIsAClipChild) {
|
| LayerImpl* root = root_layer_for_testing();
|
| LayerImpl* clip_parent = AddChildToRoot<LayerImpl>();
|
| - LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* clip_layer = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
|
| LayerImpl* clip_child = AddChild<LayerImpl>(render_surface1);
|
| LayerImpl* render_surface2 = AddChild<LayerImpl>(clip_child);
|
|
|
| @@ -4022,6 +4017,8 @@ TEST_F(LayerTreeHostCommonTest, ClipRectOfSurfaceWhoseParentIsAClipChild) {
|
| base::MakeUnique<std::set<LayerImpl*>>();
|
| clip_parent->test_properties()->clip_children->insert(clip_child);
|
|
|
| + clip_layer->SetBounds(gfx::Size(50, 50));
|
| +
|
| render_surface1->SetBounds(gfx::Size(20, 20));
|
| render_surface1->SetDrawsContent(true);
|
| render_surface1->test_properties()->force_render_surface = true;
|
| @@ -4035,6 +4032,7 @@ TEST_F(LayerTreeHostCommonTest, ClipRectOfSurfaceWhoseParentIsAClipChild) {
|
| render_surface2->test_properties()->force_render_surface = true;
|
|
|
| clip_parent->SetMasksToBounds(true);
|
| + clip_layer->SetMasksToBounds(true);
|
| render_surface1->SetMasksToBounds(true);
|
|
|
| float device_scale_factor = 1.f;
|
| @@ -5815,37 +5813,40 @@ TEST_F(LayerTreeHostCommonTest, ClipParentWithInterveningRenderSurface) {
|
| EXPECT_TRUE(render_surface1->GetRenderSurface());
|
| EXPECT_TRUE(render_surface2->GetRenderSurface());
|
|
|
| - // Since the render surfaces could have expanded, they should not clip (their
|
| - // bounds would no longer be reliable). We should resort to layer clipping
|
| - // in this case.
|
| - EXPECT_EQ(gfx::Rect(0, 0, 0, 0),
|
| + // render_surface1 should apply the clip from clip_parent. Though there is a
|
| + // clip child, render_surface1 can apply the clip as there are no clips
|
| + // between the clip parent and render_surface1
|
| + EXPECT_EQ(gfx::Rect(1, 1, 40, 40),
|
| render_surface1->GetRenderSurface()->clip_rect());
|
| - EXPECT_FALSE(render_surface1->GetRenderSurface()->is_clipped());
|
| + EXPECT_TRUE(render_surface1->GetRenderSurface()->is_clipped());
|
| + EXPECT_EQ(gfx::Rect(), render_surface1->clip_rect());
|
| + EXPECT_FALSE(render_surface1->is_clipped());
|
| +
|
| + // render_surface2 could have expanded, as there is a clip between
|
| + // clip_child's clip (clip_parent) and render_surface2's clip (intervening).
|
| + // So, it should not be clipped (their bounds would no longer be reliable).
|
| + // We should resort to layer clipping in this case.
|
| EXPECT_EQ(gfx::Rect(0, 0, 0, 0),
|
| render_surface2->GetRenderSurface()->clip_rect());
|
| EXPECT_FALSE(render_surface2->GetRenderSurface()->is_clipped());
|
|
|
| - // NB: clip rects are in target space.
|
| - EXPECT_EQ(gfx::Rect(0, 0, 40, 40), render_surface1->clip_rect());
|
| - EXPECT_TRUE(render_surface1->is_clipped());
|
| -
|
| // This value is inherited from the clipping ancestor layer, 'intervening'.
|
| EXPECT_EQ(gfx::Rect(0, 0, 5, 5), render_surface2->clip_rect());
|
| EXPECT_TRUE(render_surface2->is_clipped());
|
|
|
| - // The content rects of both render surfaces should both have expanded to
|
| - // contain the clip child.
|
| + // The content rects of render_surface2 should have expanded to contain the
|
| + // clip child.
|
| EXPECT_EQ(gfx::Rect(0, 0, 40, 40),
|
| render_surface1->GetRenderSurface()->content_rect());
|
| - EXPECT_EQ(gfx::Rect(-1, -1, 40, 40),
|
| + EXPECT_EQ(gfx::Rect(-10, -10, 60, 60),
|
| render_surface2->GetRenderSurface()->content_rect());
|
|
|
| // The clip child should have inherited the clip parent's clip (projected to
|
| - // the right space, of course), and should have the correctly sized visible
|
| - // content rect.
|
| - EXPECT_EQ(gfx::Rect(-1, -1, 40, 40), clip_child->clip_rect());
|
| + // the right space, of course), but as render_surface1 already applies that
|
| + // clip, clip_child need not apply it again.
|
| + EXPECT_EQ(gfx::Rect(), clip_child->clip_rect());
|
| EXPECT_EQ(gfx::Rect(9, 9, 40, 40), clip_child->visible_layer_rect());
|
| - EXPECT_TRUE(clip_child->is_clipped());
|
| + EXPECT_FALSE(clip_child->is_clipped());
|
| }
|
|
|
| TEST_F(LayerTreeHostCommonTest, ClipParentScrolledInterveningLayer) {
|
| @@ -5898,37 +5899,39 @@ TEST_F(LayerTreeHostCommonTest, ClipParentScrolledInterveningLayer) {
|
| EXPECT_TRUE(render_surface1->GetRenderSurface());
|
| EXPECT_TRUE(render_surface2->GetRenderSurface());
|
|
|
| - // Since the render surfaces could have expanded, they should not clip (their
|
| - // bounds would no longer be reliable). We should resort to layer clipping
|
| - // in this case.
|
| - EXPECT_EQ(gfx::Rect(0, 0, 0, 0),
|
| + // render_surface1 should apply the clip from clip_parent. Though there is a
|
| + // clip child, render_surface1 can apply the clip as there are no clips
|
| + // between the clip parent and render_surface1
|
| + EXPECT_EQ(gfx::Rect(3, 3, 40, 40),
|
| render_surface1->GetRenderSurface()->clip_rect());
|
| - EXPECT_FALSE(render_surface1->GetRenderSurface()->is_clipped());
|
| + EXPECT_TRUE(render_surface1->GetRenderSurface()->is_clipped());
|
| + EXPECT_EQ(gfx::Rect(), render_surface1->clip_rect());
|
| + EXPECT_FALSE(render_surface1->is_clipped());
|
| +
|
| + // render_surface2 could have expanded, as there is a clip between
|
| + // clip_child's clip (clip_parent) and render_surface2's clip (intervening).
|
| + // So, it should not be clipped (their bounds would no longer be reliable).
|
| + // We should resort to layer clipping in this case.
|
| EXPECT_EQ(gfx::Rect(0, 0, 0, 0),
|
| render_surface2->GetRenderSurface()->clip_rect());
|
| EXPECT_FALSE(render_surface2->GetRenderSurface()->is_clipped());
|
| -
|
| - // NB: clip rects are in target space.
|
| - EXPECT_EQ(gfx::Rect(0, 0, 40, 40), render_surface1->clip_rect());
|
| - EXPECT_TRUE(render_surface1->is_clipped());
|
| -
|
| // This value is inherited from the clipping ancestor layer, 'intervening'.
|
| - EXPECT_EQ(gfx::Rect(2, 2, 3, 3), render_surface2->clip_rect());
|
| + EXPECT_EQ(gfx::Rect(0, 0, 5, 5), render_surface2->clip_rect());
|
| EXPECT_TRUE(render_surface2->is_clipped());
|
|
|
| - // The content rects of both render surfaces should both have expanded to
|
| - // contain the clip child.
|
| + // The content rects of render_surface2 should have expanded to contain the
|
| + // clip child.
|
| EXPECT_EQ(gfx::Rect(0, 0, 40, 40),
|
| render_surface1->GetRenderSurface()->content_rect());
|
| - EXPECT_EQ(gfx::Rect(2, 2, 40, 40),
|
| + EXPECT_EQ(gfx::Rect(-10, -10, 60, 60),
|
| render_surface2->GetRenderSurface()->content_rect());
|
|
|
| // The clip child should have inherited the clip parent's clip (projected to
|
| - // the right space, of course), and should have the correctly sized visible
|
| - // content rect.
|
| - EXPECT_EQ(gfx::Rect(2, 2, 40, 40), clip_child->clip_rect());
|
| + // the right space, of course), but as render_surface1 already applies that
|
| + // clip, clip_child need not apply it again.
|
| + EXPECT_EQ(gfx::Rect(), clip_child->clip_rect());
|
| EXPECT_EQ(gfx::Rect(12, 12, 40, 40), clip_child->visible_layer_rect());
|
| - EXPECT_TRUE(clip_child->is_clipped());
|
| + EXPECT_FALSE(clip_child->is_clipped());
|
| }
|
|
|
| TEST_F(LayerTreeHostCommonTest, DescendantsOfClipChildren) {
|
| @@ -5980,17 +5983,19 @@ TEST_F(LayerTreeHostCommonTest,
|
| //
|
| // root (a render surface)
|
| // + clip_parent (masks to bounds)
|
| - // + render_surface1
|
| - // + clip_child
|
| - // + render_surface2
|
| - // + non_clip_child
|
| + // + clip_layer (masks to bounds)
|
| + // + render_surface1
|
| + // + clip_child
|
| + // + render_surface2
|
| + // + non_clip_child
|
| //
|
| // In this example render_surface2 should be unaffected by clip_child.
|
| LayerImpl* root = root_layer_for_testing();
|
| LayerImpl* clip_parent = AddChildToRoot<LayerImpl>();
|
| - LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* clip_layer = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
|
| LayerImpl* clip_child = AddChild<LayerImpl>(render_surface1);
|
| - LayerImpl* render_surface2 = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* render_surface2 = AddChild<LayerImpl>(clip_layer);
|
| LayerImpl* non_clip_child = AddChild<LayerImpl>(render_surface2);
|
|
|
| clip_child->test_properties()->clip_parent = clip_parent;
|
| @@ -5999,7 +6004,7 @@ TEST_F(LayerTreeHostCommonTest,
|
| clip_parent->test_properties()->clip_children->insert(clip_child);
|
|
|
| clip_parent->SetMasksToBounds(true);
|
| - render_surface1->SetMasksToBounds(true);
|
| + clip_layer->SetMasksToBounds(true);
|
|
|
| render_surface1->SetDrawsContent(true);
|
| clip_child->SetDrawsContent(true);
|
| @@ -6008,6 +6013,7 @@ TEST_F(LayerTreeHostCommonTest,
|
|
|
| root->SetBounds(gfx::Size(15, 15));
|
| clip_parent->SetBounds(gfx::Size(10, 10));
|
| + clip_layer->SetBounds(gfx::Size(10, 10));
|
| render_surface1->SetPosition(gfx::PointF(5, 5));
|
| render_surface1->SetBounds(gfx::Size(5, 5));
|
| render_surface1->test_properties()->force_render_surface = true;
|
| @@ -6023,7 +6029,7 @@ TEST_F(LayerTreeHostCommonTest,
|
| EXPECT_TRUE(render_surface1->GetRenderSurface());
|
| EXPECT_TRUE(render_surface2->GetRenderSurface());
|
|
|
| - EXPECT_EQ(gfx::Rect(0, 0, 5, 5), render_surface1->clip_rect());
|
| + EXPECT_EQ(gfx::Rect(-5, -5, 10, 10), render_surface1->clip_rect());
|
| EXPECT_TRUE(render_surface1->is_clipped());
|
|
|
| // The render surface should not clip (it has unclipped descendants), instead
|
| @@ -6046,10 +6052,6 @@ TEST_F(LayerTreeHostCommonTest,
|
| // It also shouldn't have grown to accomodate the clip child.
|
| EXPECT_EQ(gfx::Rect(0, 0, 5, 5),
|
| render_surface2->GetRenderSurface()->content_rect());
|
| -
|
| - // Sanity check our num_unclipped_descendants values.
|
| - EXPECT_EQ(1u, render_surface1->test_properties()->num_unclipped_descendants);
|
| - EXPECT_EQ(0u, render_surface2->test_properties()->num_unclipped_descendants);
|
| }
|
|
|
| TEST_F(LayerTreeHostCommonTest,
|
| @@ -6124,7 +6126,6 @@ TEST_F(LayerTreeHostCommonTest, CanRenderToSeparateSurface) {
|
|
|
| {
|
| LayerImplList render_surface_layer_list;
|
| - FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root_layer);
|
| LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
|
| root_layer, root_layer->bounds(), &render_surface_layer_list);
|
| inputs.can_render_to_separate_surface = true;
|
| @@ -9764,9 +9765,8 @@ TEST_F(LayerTreeHostCommonTest, LayerTreeRebuildTest) {
|
| CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
|
|
|
| ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
|
| - EXPECT_EQ(parent->num_unclipped_descendants(), 1u);
|
| -
|
| EXPECT_GT(root->num_copy_requests_in_target_subtree(), 0);
|
| +
|
| ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
|
| EXPECT_GT(root->num_copy_requests_in_target_subtree(), 0);
|
| }
|
| @@ -9896,6 +9896,7 @@ TEST_F(LayerTreeHostCommonTest,
|
| clip_parent->SetMasksToBounds(true);
|
| between_clip_parent_and_child->test_properties()->transform = translate;
|
| between_clip_parent_and_child->SetBounds(gfx::Size(30, 30));
|
| + between_clip_parent_and_child->SetMasksToBounds(true);
|
| render_surface->SetBounds(gfx::Size(30, 30));
|
| render_surface->test_properties()->force_render_surface = true;
|
| test_layer->SetBounds(gfx::Size(30, 30));
|
| @@ -10015,7 +10016,8 @@ TEST_F(LayerTreeHostCommonTest, RenderSurfaceContentRectWithMultipleSurfaces) {
|
| LayerImpl* root = root_layer_for_testing();
|
| LayerImpl* unclipped_surface = AddChildToRoot<LayerImpl>();
|
| LayerImpl* clip_parent = AddChild<LayerImpl>(unclipped_surface);
|
| - LayerImpl* unclipped_desc_surface = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* clip_layer = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* unclipped_desc_surface = AddChild<LayerImpl>(clip_layer);
|
| LayerImpl* unclipped_desc_surface2 =
|
| AddChild<LayerImpl>(unclipped_desc_surface);
|
| LayerImpl* clip_child = AddChild<LayerImpl>(unclipped_desc_surface2);
|
| @@ -10028,8 +10030,9 @@ TEST_F(LayerTreeHostCommonTest, RenderSurfaceContentRectWithMultipleSurfaces) {
|
| unclipped_surface->test_properties()->force_render_surface = true;
|
| clip_parent->SetBounds(gfx::Size(50, 50));
|
| clip_parent->SetMasksToBounds(true);
|
| + clip_layer->SetMasksToBounds(true);
|
| + clip_layer->SetBounds(gfx::Size(100, 100));
|
| unclipped_desc_surface->SetBounds(gfx::Size(100, 100));
|
| - unclipped_desc_surface->SetMasksToBounds(true);
|
| unclipped_desc_surface->SetDrawsContent(true);
|
| unclipped_desc_surface->test_properties()->force_render_surface = true;
|
| unclipped_desc_surface2->SetBounds(gfx::Size(60, 60));
|
| @@ -10050,7 +10053,7 @@ TEST_F(LayerTreeHostCommonTest, RenderSurfaceContentRectWithMultipleSurfaces) {
|
| unclipped_surface->GetRenderSurface()->content_rect());
|
| EXPECT_EQ(gfx::Rect(50, 50),
|
| unclipped_desc_surface->GetRenderSurface()->content_rect());
|
| - EXPECT_EQ(gfx::Rect(50, 50),
|
| + EXPECT_EQ(gfx::Rect(60, 60),
|
| unclipped_desc_surface2->GetRenderSurface()->content_rect());
|
| EXPECT_EQ(gfx::Rect(50, 50),
|
| clipped_surface->GetRenderSurface()->content_rect());
|
| @@ -10161,13 +10164,16 @@ TEST_F(LayerTreeHostCommonTest, ClipParentDrawsIntoScaledRootSurface) {
|
| LayerImpl* root = root_layer_for_testing();
|
| LayerImpl* clip_layer = AddChild<LayerImpl>(root);
|
| LayerImpl* clip_parent = AddChild<LayerImpl>(clip_layer);
|
| - LayerImpl* unclipped_desc_surface = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* clip_parent_child = AddChild<LayerImpl>(clip_parent);
|
| + LayerImpl* unclipped_desc_surface = AddChild<LayerImpl>(clip_parent_child);
|
| LayerImpl* clip_child = AddChild<LayerImpl>(unclipped_desc_surface);
|
|
|
| root->SetBounds(gfx::Size(100, 100));
|
| clip_layer->SetBounds(gfx::Size(20, 20));
|
| clip_layer->SetMasksToBounds(true);
|
| clip_parent->SetBounds(gfx::Size(50, 50));
|
| + clip_parent_child->SetBounds(gfx::Size(20, 20));
|
| + clip_parent_child->SetMasksToBounds(true);
|
| unclipped_desc_surface->SetBounds(gfx::Size(100, 100));
|
| unclipped_desc_surface->SetDrawsContent(true);
|
| unclipped_desc_surface->test_properties()->force_render_surface = true;
|
| @@ -10265,12 +10271,15 @@ TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) {
|
|
|
| TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
|
| LayerImpl* root = root_layer_for_testing();
|
| - LayerImpl* render_surface1 = AddChild<LayerImpl>(root);
|
| + LayerImpl* clip_layer = AddChild<LayerImpl>(root);
|
| + LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
|
| LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1);
|
| LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2);
|
|
|
| root->SetBounds(gfx::Size(30, 30));
|
| root->SetMasksToBounds(true);
|
| + clip_layer->SetBounds(gfx::Size(30, 30));
|
| + clip_layer->SetMasksToBounds(true);
|
| render_surface1->SetPosition(gfx::PointF(10, 10));
|
| render_surface1->SetBounds(gfx::Size(30, 30));
|
| render_surface1->SetDrawsContent(true);
|
| @@ -10279,6 +10288,7 @@ TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
|
| render_surface2->SetDrawsContent(true);
|
| render_surface2->test_properties()->force_render_surface = true;
|
| clip_child->SetBounds(gfx::Size(30, 30));
|
| + clip_child->SetDrawsContent(true);
|
|
|
| clip_child->test_properties()->clip_parent = root;
|
| root->test_properties()->clip_children =
|
|
|