diff options
author | jaydasika <jaydasika@chromium.org> | 2015-12-17 18:37:09 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-18 02:37:59 +0000 |
commit | 224bca01fb103eb80a02c9500fd844d8b62b5d4b (patch) | |
tree | 6b871f0f6ca94a411d2478f947c30e97b8a7780e /cc/trees | |
parent | fdd35a81b4c360208bc0d6d7a2f61f5e8ad652db (diff) | |
download | chromium_src-224bca01fb103eb80a02c9500fd844d8b62b5d4b.zip chromium_src-224bca01fb103eb80a02c9500fd844d8b62b5d4b.tar.gz chromium_src-224bca01fb103eb80a02c9500fd844d8b62b5d4b.tar.bz2 |
cc:: Give a valid transform tree index to mask layers.
Mask layer's screen space transform is used while tracing. Both CDP and
property trees don't set it. With CDP, we always returned an identity
transform, but with property trees we have an invalid transform tree
index and crash. This CL gives the owning layer's transform tree index
to the mask layer and so its screen space transform will be the same as
its owning layer's.
BUG=570739
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1539723002
Cr-Commit-Position: refs/heads/master@{#365993}
Diffstat (limited to 'cc/trees')
-rw-r--r-- | cc/trees/layer_tree_host_common.cc | 2 | ||||
-rw-r--r-- | cc/trees/layer_tree_host_common_unittest.cc | 30 | ||||
-rw-r--r-- | cc/trees/property_tree_builder.cc | 4 |
3 files changed, 36 insertions, 0 deletions
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc index 2cea8bf..ff6ba40 100644 --- a/cc/trees/layer_tree_host_common.cc +++ b/cc/trees/layer_tree_host_common.cc @@ -2600,6 +2600,8 @@ static void ComputeMaskLayerDrawProperties(const LayerImpl* layer, mask_layer_draw_properties.visible_layer_rect = gfx::Rect(layer->bounds()); mask_layer_draw_properties.target_space_transform = layer->draw_properties().target_space_transform; + mask_layer_draw_properties.screen_space_transform = + layer->draw_properties().screen_space_transform; mask_layer_draw_properties.maximum_animation_contents_scale = layer->draw_properties().maximum_animation_contents_scale; mask_layer_draw_properties.starting_animation_contents_scale = diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc index 3c17309..feffcf3 100644 --- a/cc/trees/layer_tree_host_common_unittest.cc +++ b/cc/trees/layer_tree_host_common_unittest.cc @@ -9276,6 +9276,36 @@ TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) { EXPECT_EQ(gfx::Rect(-10, -10, 30, 30), render_surface2->clip_rect()); } +TEST_F(LayerTreeHostCommonTest, MaskLayerScreenSpaceTransform) { + // Tests that the mask layer gets its owning layer's screen space transform. + LayerImpl* root = root_layer(); + LayerImpl* child = AddChild<LayerImpl>(root); + + const gfx::Transform identity_matrix; + gfx::Transform transform; + transform.Translate(10, 10); + + SetLayerPropertiesForTesting(root, identity_matrix, gfx::Point3F(), + gfx::PointF(), gfx::Size(30, 30), true, false, + true); + SetLayerPropertiesForTesting(child, transform, gfx::Point3F(), gfx::PointF(), + gfx::Size(30, 30), true, false, false); + root->SetDrawsContent(true); + child->SetDrawsContent(false); + child->SetMaskLayer(LayerImpl::Create(root->layer_tree_impl(), 100)); + ExecuteCalculateDrawProperties(root); + + EXPECT_TRANSFORMATION_MATRIX_EQ(transform, + child->mask_layer()->ScreenSpaceTransform()); + transform.Translate(10, 10); + child->SetTransform(transform); + child->SetDrawsContent(true); + root->layer_tree_impl()->property_trees()->needs_rebuild = true; + ExecuteCalculateDrawProperties(root); + EXPECT_TRANSFORMATION_MATRIX_EQ(transform, + child->mask_layer()->ScreenSpaceTransform()); +} + TEST_F(LayerTreeHostCommonTest, LargeTransformTest) { LayerImpl* root = root_layer(); LayerImpl* render_surface1 = AddChild<LayerImpl>(root); diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc index cadd2eb..2978af6 100644 --- a/cc/trees/property_tree_builder.cc +++ b/cc/trees/property_tree_builder.cc @@ -301,6 +301,8 @@ bool AddTransformNodeIfNeeded( layer->set_should_flatten_transform_from_property_tree( data_from_ancestor.should_flatten); layer->SetTransformTreeIndex(parent_index); + if (layer->mask_layer()) + layer->mask_layer()->SetTransformTreeIndex(parent_index); return false; } @@ -308,6 +310,8 @@ bool AddTransformNodeIfNeeded( TransformNode* node = data_for_children->transform_tree->back(); layer->SetTransformTreeIndex(node->id); + if (layer->mask_layer()) + layer->mask_layer()->SetTransformTreeIndex(node->id); node->data.scrolls = is_scrollable; node->data.flattens_inherited_transform = data_for_children->should_flatten; |