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

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 2846653002: cc : Stop pushing layers from hidden subtrees at commit
Patch Set: add TODO Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_common.h" 5 #include "cc/trees/layer_tree_host_common.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 4716 matching lines...) Expand 10 before | Expand all | Expand 10 after
4727 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); 4727 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText());
4728 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); 4728 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText());
4729 } 4729 }
4730 4730
4731 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest, 4731 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest,
4732 LCDTextTest, 4732 LCDTextTest,
4733 testing::Combine(testing::Bool(), 4733 testing::Combine(testing::Bool(),
4734 testing::Bool(), 4734 testing::Bool(),
4735 testing::Bool())); 4735 testing::Bool()));
4736 4736
4737 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_SingleLayerImpl) {
4738 FakeImplTaskRunnerProvider task_runner_provider;
4739 TestTaskGraphRunner task_graph_runner;
4740 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4741 host_impl.CreatePendingTree();
4742
4743 std::unique_ptr<LayerImpl> root =
4744 LayerImpl::Create(host_impl.pending_tree(), 1);
4745 root->SetBounds(gfx::Size(50, 50));
4746 root->SetDrawsContent(true);
4747 LayerImpl* root_layer = root.get();
4748
4749 std::unique_ptr<LayerImpl> child =
4750 LayerImpl::Create(host_impl.pending_tree(), 2);
4751 child->SetBounds(gfx::Size(40, 40));
4752 child->SetDrawsContent(true);
4753 LayerImpl* child_layer = child.get();
4754
4755 std::unique_ptr<LayerImpl> grand_child =
4756 LayerImpl::Create(host_impl.pending_tree(), 3);
4757 grand_child->SetBounds(gfx::Size(30, 30));
4758 grand_child->SetDrawsContent(true);
4759 grand_child->test_properties()->hide_layer_and_subtree = true;
4760 LayerImpl* grand_child_layer = grand_child.get();
4761
4762 child->test_properties()->AddChild(std::move(grand_child));
4763 root->test_properties()->AddChild(std::move(child));
4764 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4765
4766 RenderSurfaceList render_surface_list;
4767 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4768 root_layer, root_layer->bounds(), &render_surface_list);
4769 inputs.can_adjust_raster_scales = true;
4770 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4771
4772 // We should have one render surface and two layers. The grand child has
4773 // hidden itself.
4774 ASSERT_EQ(1u, render_surface_list.size());
4775 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4776 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4777 EXPECT_TRUE(child_layer->contributes_to_drawn_render_surface());
4778 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4779 }
4780
4781 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_TwoLayersImpl) {
4782 FakeImplTaskRunnerProvider task_runner_provider;
4783 TestTaskGraphRunner task_graph_runner;
4784 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4785 host_impl.CreatePendingTree();
4786
4787 std::unique_ptr<LayerImpl> root =
4788 LayerImpl::Create(host_impl.pending_tree(), 1);
4789 root->SetBounds(gfx::Size(50, 50));
4790 root->SetDrawsContent(true);
4791 LayerImpl* root_layer = root.get();
4792
4793 std::unique_ptr<LayerImpl> child =
4794 LayerImpl::Create(host_impl.pending_tree(), 2);
4795 child->SetBounds(gfx::Size(40, 40));
4796 child->SetDrawsContent(true);
4797 child->test_properties()->hide_layer_and_subtree = true;
4798 LayerImpl* child_layer = child.get();
4799
4800 std::unique_ptr<LayerImpl> grand_child =
4801 LayerImpl::Create(host_impl.pending_tree(), 3);
4802 grand_child->SetBounds(gfx::Size(30, 30));
4803 grand_child->SetDrawsContent(true);
4804 LayerImpl* grand_child_layer = grand_child.get();
4805
4806 child->test_properties()->AddChild(std::move(grand_child));
4807 root->test_properties()->AddChild(std::move(child));
4808 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4809
4810 RenderSurfaceList render_surface_list;
4811 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4812 root_layer, root_layer->bounds(), &render_surface_list);
4813 inputs.can_adjust_raster_scales = true;
4814 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4815
4816 // We should have one render surface and one layer. The child has
4817 // hidden itself and the grand child.
4818 ASSERT_EQ(1u, render_surface_list.size());
4819 ASSERT_EQ(1, GetRenderSurface(root_layer)->num_contributors());
4820 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4821 EXPECT_FALSE(child_layer->contributes_to_drawn_render_surface());
4822 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4823 }
4824
4825 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {} 4737 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {}
4826 4738
4827 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) { 4739 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) {
4828 FakeImplTaskRunnerProvider task_runner_provider; 4740 scoped_refptr<Layer> root = Layer::Create();
4829 TestTaskGraphRunner task_graph_runner; 4741 scoped_refptr<Layer> copy_grand_parent = Layer::Create();
4830 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4742 scoped_refptr<Layer> copy_parent = Layer::Create();
4831 host_impl.CreatePendingTree(); 4743 scoped_refptr<Layer> copy_layer = Layer::Create();
4744 scoped_refptr<Layer> copy_child = Layer::Create();
4745 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4746 scoped_refptr<Layer> copy_grand_parent_sibling_before = Layer::Create();
4747 scoped_refptr<Layer> copy_grand_parent_sibling_after = Layer::Create();
4832 4748
4833 std::unique_ptr<LayerImpl> root =
4834 LayerImpl::Create(host_impl.pending_tree(), 1);
4835 root->SetBounds(gfx::Size(50, 50)); 4749 root->SetBounds(gfx::Size(50, 50));
4836 root->SetDrawsContent(true); 4750 copy_grand_parent->SetBounds(gfx::Size(50, 50));
4837 LayerImpl* root_layer = root.get(); 4751 copy_parent->SetBounds(gfx::Size(50, 50));
4752 copy_parent->SetForceRenderSurfaceForTesting(true);
4753 copy_layer->SetBounds(gfx::Size(50, 50));
4754 copy_child->SetBounds(gfx::Size(50, 50));
4755 copy_grand_child->SetBounds(gfx::Size(50, 50));
4756 copy_grand_parent_sibling_before->SetBounds(gfx::Size(50, 50));
4757 copy_grand_parent_sibling_after->SetBounds(gfx::Size(50, 50));
4838 4758
4839 std::unique_ptr<LayerImpl> copy_grand_parent = 4759 root->AddChild(copy_grand_parent_sibling_before);
4840 LayerImpl::Create(host_impl.pending_tree(), 2); 4760 root->AddChild(copy_grand_parent);
4841 copy_grand_parent->SetBounds(gfx::Size(40, 40)); 4761 root->AddChild(copy_grand_parent_sibling_after);
4842 copy_grand_parent->SetDrawsContent(true); 4762 copy_grand_parent->AddChild(copy_parent);
4843 LayerImpl* copy_grand_parent_layer = copy_grand_parent.get(); 4763 copy_parent->AddChild(copy_layer);
4764 copy_layer->AddChild(copy_child);
4765 copy_child->AddChild(copy_grand_child);
4766 host()->SetRootLayer(root);
4844 4767
4845 std::unique_ptr<LayerImpl> copy_parent = 4768 copy_layer->RequestCopyOfOutput(
4846 LayerImpl::Create(host_impl.pending_tree(), 3);
4847 copy_parent->SetBounds(gfx::Size(30, 30));
4848 copy_parent->SetDrawsContent(true);
4849 copy_parent->test_properties()->force_render_surface = true;
4850 LayerImpl* copy_parent_layer = copy_parent.get();
4851
4852 std::unique_ptr<LayerImpl> copy_request =
4853 LayerImpl::Create(host_impl.pending_tree(), 4);
4854 copy_request->SetBounds(gfx::Size(20, 20));
4855 copy_request->SetDrawsContent(true);
4856 copy_request->test_properties()->force_render_surface = true;
4857 LayerImpl* copy_layer = copy_request.get();
4858
4859 std::unique_ptr<LayerImpl> copy_child =
4860 LayerImpl::Create(host_impl.pending_tree(), 5);
4861 copy_child->SetBounds(gfx::Size(20, 20));
4862 copy_child->SetDrawsContent(true);
4863 LayerImpl* copy_child_layer = copy_child.get();
4864
4865 std::unique_ptr<LayerImpl> copy_grand_child =
4866 LayerImpl::Create(host_impl.pending_tree(), 6);
4867 copy_grand_child->SetBounds(gfx::Size(20, 20));
4868 copy_grand_child->SetDrawsContent(true);
4869 LayerImpl* copy_grand_child_layer = copy_grand_child.get();
4870
4871 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_before =
4872 LayerImpl::Create(host_impl.pending_tree(), 7);
4873 copy_grand_parent_sibling_before->SetBounds(gfx::Size(40, 40));
4874 copy_grand_parent_sibling_before->SetDrawsContent(true);
4875 LayerImpl* copy_grand_parent_sibling_before_layer =
4876 copy_grand_parent_sibling_before.get();
4877
4878 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_after =
4879 LayerImpl::Create(host_impl.pending_tree(), 8);
4880 copy_grand_parent_sibling_after->SetBounds(gfx::Size(40, 40));
4881 copy_grand_parent_sibling_after->SetDrawsContent(true);
4882 LayerImpl* copy_grand_parent_sibling_after_layer =
4883 copy_grand_parent_sibling_after.get();
4884
4885 copy_child->test_properties()->AddChild(std::move(copy_grand_child));
4886 copy_request->test_properties()->AddChild(std::move(copy_child));
4887 copy_parent->test_properties()->AddChild(std::move(copy_request));
4888 copy_grand_parent->test_properties()->AddChild(std::move(copy_parent));
4889 root->test_properties()->AddChild(
4890 std::move(copy_grand_parent_sibling_before));
4891 root->test_properties()->AddChild(std::move(copy_grand_parent));
4892 root->test_properties()->AddChild(std::move(copy_grand_parent_sibling_after));
4893 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4894
4895 // Hide the copy_grand_parent and its subtree. But make a copy request in that
4896 // hidden subtree on copy_layer. Also hide the copy grand child and its
4897 // subtree.
4898 copy_grand_parent_layer->test_properties()->hide_layer_and_subtree = true;
4899 copy_grand_parent_sibling_before_layer->test_properties()
4900 ->hide_layer_and_subtree = true;
4901 copy_grand_parent_sibling_after_layer->test_properties()
4902 ->hide_layer_and_subtree = true;
4903 copy_grand_child_layer->test_properties()->hide_layer_and_subtree = true;
4904
4905 copy_layer->test_properties()->copy_requests.push_back(
4906 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback))); 4769 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
4907 4770
4908 RenderSurfaceList render_surface_list; 4771 copy_grand_parent->SetHideLayerAndSubtree(true);
4909 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 4772 copy_grand_parent_sibling_before->SetHideLayerAndSubtree(true);
4910 root_layer, root_layer->bounds(), &render_surface_list); 4773 copy_grand_parent_sibling_after->SetHideLayerAndSubtree(true);
4911 inputs.can_adjust_raster_scales = true; 4774 copy_grand_child->SetHideLayerAndSubtree(true);
4912 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4913 4775
4914 EXPECT_TRUE(root_layer->has_copy_requests_in_target_subtree()); 4776 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
4915 EXPECT_TRUE(copy_grand_parent_layer->has_copy_requests_in_target_subtree()); 4777 EXPECT_FALSE(copy_grand_parent->is_hidden());
4916 EXPECT_TRUE(copy_parent_layer->has_copy_requests_in_target_subtree()); 4778 EXPECT_TRUE(copy_grand_parent_sibling_after->is_hidden());
4917 EXPECT_TRUE(copy_layer->has_copy_requests_in_target_subtree()); 4779 EXPECT_TRUE(copy_grand_parent_sibling_before->is_hidden());
4780 EXPECT_TRUE(copy_grand_child->is_hidden());
4918 4781
4919 // We should have four render surfaces, one for the root, one for the grand 4782 EffectTree& tree = host()->property_trees()->effect_tree;
4920 // parent since it has opacity and two drawing descendants, one for the parent 4783 EffectNode* node = tree.Node(copy_grand_parent->effect_tree_index());
4921 // since it owns a surface, and one for the copy_layer.
4922 ASSERT_EQ(4u, render_surface_list.size());
4923 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
4924 EXPECT_EQ(copy_grand_parent_layer->id(), render_surface_list.at(1)->id());
4925 EXPECT_EQ(copy_parent_layer->id(), render_surface_list.at(2)->id());
4926 EXPECT_EQ(copy_layer->id(), render_surface_list.at(3)->id());
4927
4928 // The root render surface should have 2 contributing layers.
4929 EXPECT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4930 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4931 EXPECT_FALSE(copy_grand_parent_layer->contributes_to_drawn_render_surface());
4932 EXPECT_FALSE(copy_grand_parent_sibling_before_layer
4933 ->contributes_to_drawn_render_surface());
4934 EXPECT_FALSE(copy_grand_parent_sibling_after_layer
4935 ->contributes_to_drawn_render_surface());
4936
4937 // Nothing actually draws into the copy parent, so only the copy_layer will
4938 // appear in its list, since it needs to be drawn for the copy request.
4939 ASSERT_EQ(1, GetRenderSurface(copy_parent_layer)->num_contributors());
4940 EXPECT_FALSE(copy_parent_layer->contributes_to_drawn_render_surface());
4941
4942 // The copy layer's render surface should have 2 contributing layers.
4943 ASSERT_EQ(2, GetRenderSurface(copy_layer)->num_contributors());
4944 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface());
4945 EXPECT_TRUE(copy_child_layer->contributes_to_drawn_render_surface());
4946 EXPECT_FALSE(copy_grand_child_layer->contributes_to_drawn_render_surface());
4947
4948 // copy_grand_parent, copy_parent shouldn't be drawn because they are hidden,
4949 // but the copy_layer and copy_child should be drawn for the copy request.
4950 // copy grand child should not be drawn as its hidden even in the copy
4951 // request.
4952 EffectTree& tree =
4953 root_layer->layer_tree_impl()->property_trees()->effect_tree;
4954 EffectNode* node = tree.Node(copy_grand_parent_layer->effect_tree_index());
4955 EXPECT_FALSE(node->is_drawn); 4784 EXPECT_FALSE(node->is_drawn);
4956 node = tree.Node(copy_parent_layer->effect_tree_index()); 4785 node = tree.Node(copy_parent->effect_tree_index());
4957 EXPECT_FALSE(node->is_drawn); 4786 EXPECT_FALSE(node->is_drawn);
4958 node = tree.Node(copy_layer->effect_tree_index()); 4787 node = tree.Node(copy_layer->effect_tree_index());
4959 EXPECT_TRUE(node->is_drawn); 4788 EXPECT_TRUE(node->is_drawn);
4960 node = tree.Node(copy_child_layer->effect_tree_index()); 4789 node = tree.Node(copy_child->effect_tree_index());
4961 EXPECT_TRUE(node->is_drawn); 4790 EXPECT_TRUE(node->is_drawn);
4962 node = tree.Node(copy_grand_child_layer->effect_tree_index());
4963 EXPECT_FALSE(node->is_drawn);
4964
4965 // Though copy_layer is drawn, it shouldn't contribute to drawn surface as its
4966 // actually hidden.
4967 EXPECT_FALSE(GetRenderSurface(copy_layer)->contributes_to_drawn_surface());
4968 } 4791 }
4969 4792
4970 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) { 4793 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) {
4971 FakeImplTaskRunnerProvider task_runner_provider; 4794 FakeImplTaskRunnerProvider task_runner_provider;
4972 TestTaskGraphRunner task_graph_runner; 4795 TestTaskGraphRunner task_graph_runner;
4973 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4796 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4974 host_impl.CreatePendingTree(); 4797 host_impl.CreatePendingTree();
4975 4798
4976 std::unique_ptr<LayerImpl> root = 4799 std::unique_ptr<LayerImpl> root =
4977 LayerImpl::Create(host_impl.pending_tree(), 1); 4800 LayerImpl::Create(host_impl.pending_tree(), 1);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
5013 ASSERT_EQ(2u, render_surface_list.size()); 4836 ASSERT_EQ(2u, render_surface_list.size());
5014 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id()); 4837 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
5015 4838
5016 // The root render surface should have only 2 contributing layer, since the 4839 // The root render surface should have only 2 contributing layer, since the
5017 // other layers are clipped away. 4840 // other layers are clipped away.
5018 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors()); 4841 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
5019 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface()); 4842 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
5020 } 4843 }
5021 4844
5022 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) { 4845 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) {
5023 LayerImpl* root = root_layer_for_testing(); 4846 scoped_refptr<Layer> root = Layer::Create();
4847 scoped_refptr<Layer> singular_transform_layer = Layer::Create();
4848 scoped_refptr<Layer> copy_layer = Layer::Create();
4849 scoped_refptr<Layer> copy_child = Layer::Create();
4850 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4851
4852 root->AddChild(singular_transform_layer);
4853 singular_transform_layer->AddChild(copy_layer);
4854 copy_layer->AddChild(copy_child);
4855 copy_child->AddChild(copy_grand_child);
4856 host()->SetRootLayer(root);
4857
5024 root->SetBounds(gfx::Size(50, 50)); 4858 root->SetBounds(gfx::Size(50, 50));
5025 root->SetDrawsContent(true); 4859 root->SetIsDrawable(true);
5026
5027 LayerImpl* singular_transform_layer = AddChild<LayerImpl>(root);
5028 singular_transform_layer->SetBounds(gfx::Size(100, 100)); 4860 singular_transform_layer->SetBounds(gfx::Size(100, 100));
5029 singular_transform_layer->SetDrawsContent(true);
5030 gfx::Transform singular; 4861 gfx::Transform singular;
5031 singular.Scale3d(6.f, 6.f, 0.f); 4862 singular.Scale3d(6.f, 6.f, 0.f);
5032 singular_transform_layer->test_properties()->transform = singular; 4863 singular_transform_layer->SetTransform(singular);
4864 singular_transform_layer->SetIsDrawable(true);
4865 copy_layer->SetBounds(gfx::Size(100, 100));
4866 copy_layer->SetIsDrawable(true);
4867 copy_layer->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
4868 base::Bind(&EmptyCopyOutputCallback)));
4869 copy_child->SetBounds(gfx::Size(100, 100));
4870 copy_child->SetIsDrawable(true);
4871 copy_grand_child->SetBounds(gfx::Size(100, 100));
4872 copy_grand_child->SetTransform(singular);
4873 copy_grand_child->SetIsDrawable(true);
5033 4874
5034 LayerImpl* copy_layer = AddChild<LayerImpl>(singular_transform_layer); 4875 ExecuteCalculateDrawProperties(root.get());
5035 copy_layer->SetBounds(gfx::Size(100, 100));
5036 copy_layer->SetDrawsContent(true);
5037 copy_layer->test_properties()->copy_requests.push_back(
5038 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
5039 4876
5040 LayerImpl* copy_child = AddChild<LayerImpl>(copy_layer); 4877 host()->host_impl()->CreatePendingTree();
5041 copy_child->SetBounds(gfx::Size(100, 100)); 4878 host()->CommitAndCreatePendingTree();
5042 copy_child->SetDrawsContent(true); 4879 host()->host_impl()->ActivateSyncTree();
4880 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree();
5043 4881
5044 LayerImpl* copy_grand_child = AddChild<LayerImpl>(copy_child); 4882 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id());
5045 copy_grand_child->SetBounds(gfx::Size(100, 100)); 4883 LayerImpl* singular_transform_layer_impl =
5046 copy_grand_child->SetDrawsContent(true); 4884 layer_tree_impl->LayerById(singular_transform_layer->id());
5047 copy_grand_child->test_properties()->transform = singular; 4885 LayerImpl* copy_layer_impl = layer_tree_impl->LayerById(copy_layer->id());
5048 4886 LayerImpl* copy_child_impl = layer_tree_impl->LayerById(copy_child->id());
5049 DCHECK(!copy_layer->test_properties()->copy_requests.empty()); 4887 LayerImpl* copy_grand_child_impl =
5050 ExecuteCalculateDrawProperties(root); 4888 layer_tree_impl->LayerById(copy_grand_child->id());
5051 DCHECK(copy_layer->test_properties()->copy_requests.empty()); 4889 ExecuteCalculateDrawProperties(root_impl);
5052 4890
5053 // A layer with singular transform should not contribute to drawn render 4891 // A layer with singular transform should not contribute to drawn render
5054 // surface. 4892 // surface.
5055 EXPECT_FALSE(singular_transform_layer->contributes_to_drawn_render_surface()); 4893 EXPECT_FALSE(
4894 singular_transform_layer_impl->contributes_to_drawn_render_surface());
5056 // Even though copy_layer and copy_child have singular screen space transform, 4895 // Even though copy_layer and copy_child have singular screen space transform,
5057 // they still contribute to drawn render surface as their transform to the 4896 // they still contribute to drawn render surface as their transform to the
5058 // closest ancestor with copy request is not singular. 4897 // closest ancestor with copy request is not singular.
5059 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface()); 4898 EXPECT_TRUE(copy_layer_impl->contributes_to_drawn_render_surface());
5060 EXPECT_TRUE(copy_child->contributes_to_drawn_render_surface()); 4899 EXPECT_TRUE(copy_child_impl->contributes_to_drawn_render_surface());
5061 // copy_grand_child's transform to its closest ancestor with copy request is 4900 // copy_grand_child's transform to its closest ancestor with copy request is
5062 // also singular. So, it doesn't contribute to drawn render surface. 4901 // also singular. So, it doesn't contribute to drawn render surface.
5063 EXPECT_FALSE(copy_grand_child->contributes_to_drawn_render_surface()); 4902 EXPECT_FALSE(copy_grand_child_impl->contributes_to_drawn_render_surface());
5064 } 4903 }
5065 4904
5066 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) { 4905 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) {
5067 LayerImpl* root = root_layer_for_testing(); 4906 LayerImpl* root = root_layer_for_testing();
5068 root->SetBounds(gfx::Size(50, 50)); 4907 root->SetBounds(gfx::Size(50, 50));
5069 root->SetDrawsContent(true); 4908 root->SetDrawsContent(true);
5070 root->SetMasksToBounds(true); 4909 root->SetMasksToBounds(true);
5071 4910
5072 LayerImpl* copy_layer = AddChild<LayerImpl>(root); 4911 LayerImpl* copy_layer = AddChild<LayerImpl>(root);
5073 copy_layer->SetBounds(gfx::Size(100, 100)); 4912 copy_layer->SetBounds(gfx::Size(100, 100));
(...skipping 3676 matching lines...) Expand 10 before | Expand all | Expand 10 after
8750 8589
8751 child->SetTransform(singular); 8590 child->SetTransform(singular);
8752 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8591 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8753 update_list = GetUpdateLayerList(); 8592 update_list = GetUpdateLayerList();
8754 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8593 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8755 child->SetTransform(gfx::Transform()); 8594 child->SetTransform(gfx::Transform());
8756 8595
8757 child->SetHideLayerAndSubtree(true); 8596 child->SetHideLayerAndSubtree(true);
8758 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8597 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8759 update_list = GetUpdateLayerList(); 8598 update_list = GetUpdateLayerList();
8599 EXPECT_TRUE(child->is_hidden());
8600 EXPECT_TRUE(grandchild->is_hidden());
8601 EXPECT_FALSE(VerifyLayerInList(child, update_list));
8760 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8602 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8761 child->SetHideLayerAndSubtree(false); 8603 child->SetHideLayerAndSubtree(false);
8762 8604
8763 gfx::Transform zero_z_scale; 8605 gfx::Transform zero_z_scale;
8764 zero_z_scale.Scale3d(1, 1, 0); 8606 zero_z_scale.Scale3d(1, 1, 0);
8765 child->SetTransform(zero_z_scale); 8607 child->SetTransform(zero_z_scale);
8766 8608
8767 // Add a transform animation with a start delay. Now, even though |child| has 8609 // Add a transform animation with a start delay. Now, even though |child| has
8768 // a singular transform, the subtree should still get processed. 8610 // a singular transform, the subtree should still get processed.
8769 int animation_id = 0; 8611 int animation_id = 0;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
8863 gfx::Transform rotate_back_and_translate; 8705 gfx::Transform rotate_back_and_translate;
8864 rotate_back_and_translate.RotateAboutYAxis(180); 8706 rotate_back_and_translate.RotateAboutYAxis(180);
8865 rotate_back_and_translate.Translate(-10, 0); 8707 rotate_back_and_translate.Translate(-10, 0);
8866 8708
8867 child_ptr->test_properties()->transform = singular; 8709 child_ptr->test_properties()->transform = singular;
8868 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8710 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8869 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8711 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8870 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8712 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8871 child_ptr->test_properties()->transform = gfx::Transform(); 8713 child_ptr->test_properties()->transform = gfx::Transform();
8872 8714
8873 child_ptr->test_properties()->hide_layer_and_subtree = true;
8874 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8875 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8876 child_ptr->test_properties()->hide_layer_and_subtree = false;
8877
8878 child_ptr->test_properties()->opacity = 0.f; 8715 child_ptr->test_properties()->opacity = 0.f;
8879 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8716 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8880 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8717 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8881 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8718 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8882 child_ptr->test_properties()->opacity = 1.f; 8719 child_ptr->test_properties()->opacity = 1.f;
8883 8720
8884 root_ptr->test_properties()->transform = singular; 8721 root_ptr->test_properties()->transform = singular;
8885 // Force transform tree to have a node for child, so that ancestor's 8722 // Force transform tree to have a node for child, so that ancestor's
8886 // invertible transform can be tested. 8723 // invertible transform can be tested.
8887 child_ptr->test_properties()->transform = rotate; 8724 child_ptr->test_properties()->transform = rotate;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
9062 LayerImpl* child = AddChild<LayerImpl>(root); 8899 LayerImpl* child = AddChild<LayerImpl>(root);
9063 8900
9064 root->SetBounds(gfx::Size(100, 100)); 8901 root->SetBounds(gfx::Size(100, 100));
9065 child->SetBounds(gfx::Size(10, 10)); 8902 child->SetBounds(gfx::Size(10, 10));
9066 child->SetDrawsContent(true); 8903 child->SetDrawsContent(true);
9067 8904
9068 ExecuteCalculateDrawProperties(root); 8905 ExecuteCalculateDrawProperties(root);
9069 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 8906 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
9070 child->set_visible_layer_rect(gfx::Rect()); 8907 child->set_visible_layer_rect(gfx::Rect());
9071 8908
9072 child->test_properties()->hide_layer_and_subtree = true;
9073 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9074 ExecuteCalculateDrawProperties(root);
9075 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9076 child->test_properties()->hide_layer_and_subtree = false;
9077
9078 child->SetBounds(gfx::Size()); 8909 child->SetBounds(gfx::Size());
9079 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 8910 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9080 ExecuteCalculateDrawProperties(root); 8911 ExecuteCalculateDrawProperties(root);
9081 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect()); 8912 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9082 child->SetBounds(gfx::Size(10, 10)); 8913 child->SetBounds(gfx::Size(10, 10));
9083 8914
9084 gfx::Transform rotate; 8915 gfx::Transform rotate;
9085 child->test_properties()->double_sided = false; 8916 child->test_properties()->double_sided = false;
9086 rotate.RotateAboutXAxis(180.f); 8917 rotate.RotateAboutXAxis(180.f);
9087 child->test_properties()->transform = rotate; 8918 child->test_properties()->transform = rotate;
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
9594 test_layer->SetDrawsContent(true); 9425 test_layer->SetDrawsContent(true);
9595 ExecuteCalculateDrawProperties(root); 9426 ExecuteCalculateDrawProperties(root);
9596 9427
9597 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect()); 9428 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect());
9598 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect()); 9429 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect());
9599 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect()); 9430 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect());
9600 } 9431 }
9601 9432
9602 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) { 9433 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) {
9603 // Tests that subtree is hidden is updated. 9434 // Tests that subtree is hidden is updated.
9604 LayerImpl* root = root_layer_for_testing(); 9435 scoped_refptr<Layer> root = Layer::Create();
9605 LayerImpl* hidden = AddChild<LayerImpl>(root); 9436 scoped_refptr<Layer> hidden = Layer::Create();
9606 LayerImpl* test = AddChild<LayerImpl>(hidden); 9437 scoped_refptr<Layer> test = Layer::Create();
9607 9438
9608 root->SetBounds(gfx::Size(30, 30)); 9439 root->SetBounds(gfx::Size(30, 30));
9609 hidden->SetBounds(gfx::Size(30, 30)); 9440 hidden->SetBounds(gfx::Size(30, 30));
9610 hidden->test_properties()->force_render_surface = true; 9441 hidden->SetHideLayerAndSubtree(true);
9611 hidden->test_properties()->hide_layer_and_subtree = true;
9612 test->SetBounds(gfx::Size(30, 30)); 9442 test->SetBounds(gfx::Size(30, 30));
9613 test->test_properties()->force_render_surface = true;
9614 9443
9615 ExecuteCalculateDrawProperties(root); 9444 root->AddChild(hidden);
9616 EXPECT_EQ(0.f, 9445 hidden->AddChild(test);
9617 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9446 host()->SetRootLayer(root);
9618 9447
9619 hidden->test_properties()->hide_layer_and_subtree = false; 9448 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9620 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 9449 EXPECT_TRUE(test->is_hidden());
9621 ExecuteCalculateDrawProperties(root); 9450 // Hidden layers should have invalid property tree indices.
9622 EXPECT_EQ(1.f, 9451 const int kInvalidNodeId = -1;
9623 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9452 EXPECT_EQ(test->effect_tree_index(), kInvalidNodeId);
9453 EXPECT_EQ(test->scroll_tree_index(), kInvalidNodeId);
9454 EXPECT_EQ(test->clip_tree_index(), kInvalidNodeId);
9455 EXPECT_EQ(test->transform_tree_index(), kInvalidNodeId);
9456
9457 hidden->SetHideLayerAndSubtree(false);
9458 root->layer_tree_host()->property_trees()->needs_rebuild = true;
9459 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9460 EXPECT_FALSE(test->is_hidden());
9461 EXPECT_NE(test->effect_tree_index(), kInvalidNodeId);
9462 EXPECT_NE(test->scroll_tree_index(), kInvalidNodeId);
9463 EXPECT_NE(test->clip_tree_index(), kInvalidNodeId);
9464 EXPECT_NE(test->transform_tree_index(), kInvalidNodeId);
9624 } 9465 }
9625 9466
9626 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) { 9467 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
9627 LayerImpl* root = root_layer_for_testing(); 9468 LayerImpl* root = root_layer_for_testing();
9628 LayerImpl* clip_layer = AddChild<LayerImpl>(root); 9469 LayerImpl* clip_layer = AddChild<LayerImpl>(root);
9629 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer); 9470 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
9630 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1); 9471 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1);
9631 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2); 9472 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2);
9632 9473
9633 root->SetBounds(gfx::Size(30, 30)); 9474 root->SetBounds(gfx::Size(30, 30));
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
10209 10050
10210 // Check child layer draw properties. 10051 // Check child layer draw properties.
10211 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 10052 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
10212 EXPECT_EQ(gfx::Transform(), child->DrawTransform()); 10053 EXPECT_EQ(gfx::Transform(), child->DrawTransform());
10213 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect()); 10054 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect());
10214 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect()); 10055 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect());
10215 } 10056 }
10216 10057
10217 } // namespace 10058 } // namespace
10218 } // namespace cc 10059 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698