diff options
author | sunxd <sunxd@chromium.org> | 2016-01-06 08:42:54 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-06 16:44:09 +0000 |
commit | 42238faf73f0d108a6a926f3fddf35887df071a1 (patch) | |
tree | 29705e4455357349e73fe0ff1f77b73205b16e13 /cc | |
parent | 4b2b759006ad470f493a425345d6e6e261c943a1 (diff) | |
download | chromium_src-42238faf73f0d108a6a926f3fddf35887df071a1.zip chromium_src-42238faf73f0d108a6a926f3fddf35887df071a1.tar.gz chromium_src-42238faf73f0d108a6a926f3fddf35887df071a1.tar.bz2 |
Revert of Determine a layer's IsAffectedByPageScale property without using Layer Tree (patchset #2 id:20001 of https://codereview.chromium.org/1544103002/ )
Reason for revert:
Revert the CL to see if it causes an improvement on the waterfall. Related to Issue 573267: 10.3% regression in blink_perf.layout at 367076:367083.
Original issue's description:
> Determine a layer's IsAffectedByPageScale property without using Layer Tree.
>
> The property is retrieved from TransformTree;
> Fix the order of updating the page scale layer and adding transform tree node;
> Fix the problem that transform tree sequence number not correctly updated for mask layers;
> Fix related cc unit tests where a property tree was not created.
>
> BUG=568777
> CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
>
> Committed: https://crrev.com/73c0fa89da59c8ea5e0d86d1136d7c1a7e68e097
> Cr-Commit-Position: refs/heads/master@{#367083}
BUG=568777,573267
Review URL: https://codereview.chromium.org/1565783002
Cr-Commit-Position: refs/heads/master@{#367837}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/layers/heads_up_display_layer_impl_unittest.cc | 14 | ||||
-rw-r--r-- | cc/layers/layer.cc | 5 | ||||
-rw-r--r-- | cc/layers/layer_impl.cc | 7 | ||||
-rw-r--r-- | cc/layers/layer_impl.h | 5 | ||||
-rw-r--r-- | cc/layers/picture_image_layer_impl_unittest.cc | 28 | ||||
-rw-r--r-- | cc/layers/picture_layer_impl_unittest.cc | 3 | ||||
-rw-r--r-- | cc/trees/property_tree_builder.cc | 10 |
7 files changed, 29 insertions, 43 deletions
diff --git a/cc/layers/heads_up_display_layer_impl_unittest.cc b/cc/layers/heads_up_display_layer_impl_unittest.cc index 1535787..e104c33 100644 --- a/cc/layers/heads_up_display_layer_impl_unittest.cc +++ b/cc/layers/heads_up_display_layer_impl_unittest.cc @@ -11,7 +11,6 @@ #include "cc/test/fake_output_surface.h" #include "cc/test/test_shared_bitmap_manager.h" #include "cc/test/test_task_graph_runner.h" -#include "cc/trees/layer_tree_impl.h" #include "testing/gtest/include/gtest/gtest.h" namespace cc { @@ -47,19 +46,16 @@ TEST(HeadsUpDisplayLayerImplTest, ResourcelessSoftwareDrawAfterResourceLoss) { HeadsUpDisplayLayerImpl::Create(host_impl.pending_tree(), 1); layer->SetBounds(gfx::Size(100, 100)); - HeadsUpDisplayLayerImpl* layer_ptr = layer.get(); - - host_impl.pending_tree()->SetRootLayer(std::move(layer)); - host_impl.pending_tree()->BuildPropertyTreesForTesting(); - // Check regular hardware draw is ok. - CheckDrawLayer(layer_ptr, host_impl.resource_provider(), DRAW_MODE_HARDWARE); + CheckDrawLayer( + layer.get(), host_impl.resource_provider(), DRAW_MODE_HARDWARE); // Simulate a resource loss on transitioning to resourceless software mode. - layer_ptr->ReleaseResources(); + layer->ReleaseResources(); // Should skip resourceless software draw and not crash in UpdateHudTexture. - CheckDrawLayer(layer_ptr, host_impl.resource_provider(), + CheckDrawLayer(layer.get(), + host_impl.resource_provider(), DRAW_MODE_RESOURCELESS_SOFTWARE); } diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 19b8a95..4aaa673 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc @@ -1352,6 +1352,11 @@ void Layer::PushPropertiesTo(LayerImpl* layer) { frame_timing_requests_dirty_ = false; } + bool is_page_scale_layer = this == layer_tree_host()->page_scale_layer(); + bool parent_affected = + layer->parent() && layer->parent()->IsAffectedByPageScale(); + layer->SetIsAffectedByPageScale(is_page_scale_layer || parent_affected); + // Reset any state that should be cleared for the next update. stacking_order_changed_ = false; update_rect_ = gfx::Rect(); diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc index b590f71..3837bca 100644 --- a/cc/layers/layer_impl.cc +++ b/cc/layers/layer_impl.cc @@ -698,13 +698,6 @@ void LayerImpl::PushPropertiesTo(LayerImpl* layer) { num_dependents_need_push_properties_ = 0; } -bool LayerImpl::IsAffectedByPageScale() const { - TransformTree& transform_tree = - layer_tree_impl()->property_trees()->transform_tree; - return transform_tree.Node(transform_tree_index()) - ->data.in_subtree_of_page_scale_layer; -} - gfx::Vector2dF LayerImpl::FixedContainerSizeDelta() const { LayerImpl* scroll_clip_layer = layer_tree_impl()->LayerById(scroll_clip_layer_id_); diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index baccc5d..42362c8 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h @@ -357,7 +357,10 @@ class CC_EXPORT LayerImpl : public LayerAnimationValueObserver, return is_container_for_fixed_position_layers_; } - bool IsAffectedByPageScale() const; + bool IsAffectedByPageScale() const { return is_affected_by_page_scale_; } + void SetIsAffectedByPageScale(bool is_affected) { + is_affected_by_page_scale_ = is_affected; + } gfx::Vector2dF FixedContainerSizeDelta() const; diff --git a/cc/layers/picture_image_layer_impl_unittest.cc b/cc/layers/picture_image_layer_impl_unittest.cc index 53b0061..92e6926 100644 --- a/cc/layers/picture_image_layer_impl_unittest.cc +++ b/cc/layers/picture_image_layer_impl_unittest.cc @@ -108,14 +108,10 @@ TEST_F(PictureImageLayerImplTest, CalculateContentsScale) { scoped_ptr<TestablePictureImageLayerImpl> layer(CreateLayer(1, PENDING_TREE)); layer->SetDrawsContent(true); - TestablePictureImageLayerImpl* layer_ptr = layer.get(); - host_impl_.pending_tree()->SetRootLayer(std::move(layer)); - host_impl_.pending_tree()->BuildPropertyTreesForTesting(); - gfx::Rect viewport(100, 200); - SetupDrawPropertiesAndUpdateTiles(layer_ptr, 2.f, 3.f, 4.f, 1.f, false, - viewport); - EXPECT_FLOAT_EQ(1.f, layer_ptr->MaximumTilingContentsScale()); + SetupDrawPropertiesAndUpdateTiles( + layer.get(), 2.f, 3.f, 4.f, 1.f, false, viewport); + EXPECT_FLOAT_EQ(1.f, layer->MaximumTilingContentsScale()); } TEST_F(PictureImageLayerImplTest, IgnoreIdealContentScale) { @@ -125,10 +121,6 @@ TEST_F(PictureImageLayerImplTest, IgnoreIdealContentScale) { gfx::Rect viewport(100, 200); - TestablePictureImageLayerImpl* pending_layer_ptr = pending_layer.get(); - host_impl_.pending_tree()->SetRootLayer(std::move(pending_layer)); - host_impl_.pending_tree()->BuildPropertyTreesForTesting(); - // Set PictureLayerImpl::ideal_contents_scale_ to 2.f which is not equal // to the content scale used by PictureImageLayerImpl. const float suggested_ideal_contents_scale = 2.f; @@ -136,13 +128,17 @@ TEST_F(PictureImageLayerImplTest, IgnoreIdealContentScale) { const float page_scale_factor = 4.f; const float maximum_animation_contents_scale = 1.f; const bool animating_transform_to_screen = false; - SetupDrawPropertiesAndUpdateTiles( - pending_layer_ptr, suggested_ideal_contents_scale, device_scale_factor, - page_scale_factor, maximum_animation_contents_scale, - animating_transform_to_screen, viewport); - EXPECT_EQ(1.f, pending_layer_ptr->tilings()->tiling_at(0)->contents_scale()); + SetupDrawPropertiesAndUpdateTiles(pending_layer.get(), + suggested_ideal_contents_scale, + device_scale_factor, + page_scale_factor, + maximum_animation_contents_scale, + animating_transform_to_screen, + viewport); + EXPECT_EQ(1.f, pending_layer->tilings()->tiling_at(0)->contents_scale()); // Push to active layer. + host_impl_.pending_tree()->SetRootLayer(std::move(pending_layer)); host_impl_.ActivateSyncTree(); TestablePictureImageLayerImpl* active_layer = diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc index 10c95b4..badd37f 100644 --- a/cc/layers/picture_layer_impl_unittest.cc +++ b/cc/layers/picture_layer_impl_unittest.cc @@ -264,9 +264,6 @@ class PictureLayerImplTest : public testing::Test { pending_root->AddChild(std::move(pending_layer)); pending_tree->SetRootLayer(std::move(pending_root)); - pending_tree->SetViewportLayersFromIds( - Layer::INVALID_ID, pending_tree->root_layer()->id(), Layer::INVALID_ID, - Layer::INVALID_ID); pending_layer_ = static_cast<FakePictureLayerImpl*>( host_impl_.pending_tree()->LayerById(id_)); diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc index 432aa6c..28721d4 100644 --- a/cc/trees/property_tree_builder.cc +++ b/cc/trees/property_tree_builder.cc @@ -291,9 +291,6 @@ bool AddTransformNodeIfNeeded( node->data.scrolls = is_scrollable; node->data.flattens_inherited_transform = data_for_children->should_flatten; - - if (layer == data_from_ancestor.page_scale_layer) - data_for_children->in_subtree_of_page_scale_layer = true; node->data.in_subtree_of_page_scale_layer = data_for_children->in_subtree_of_page_scale_layer; @@ -604,10 +601,6 @@ void BuildPropertyTreesInternal( LayerType* layer, const DataForRecursion<LayerType>& data_from_parent) { layer->set_property_tree_sequence_number(data_from_parent.sequence_number); - if (layer->mask_layer()) - layer->mask_layer()->set_property_tree_sequence_number( - data_from_parent.sequence_number); - DataForRecursion<LayerType> data_for_children(data_from_parent); bool created_render_surface = @@ -625,6 +618,9 @@ void BuildPropertyTreesInternal( AddClipNodeIfNeeded(data_from_parent, layer, created_render_surface, created_transform_node, &data_for_children); + if (layer == data_from_parent.page_scale_layer) + data_for_children.in_subtree_of_page_scale_layer = true; + data_for_children.is_hidden = layer->hide_layer_and_subtree() || data_from_parent.is_hidden; layer->set_is_hidden_from_property_trees(data_for_children.is_hidden); |