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

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: . 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 4685 matching lines...) Expand 10 before | Expand all | Expand 10 after
4696 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); 4696 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText());
4697 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); 4697 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText());
4698 } 4698 }
4699 4699
4700 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest, 4700 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest,
4701 LCDTextTest, 4701 LCDTextTest,
4702 testing::Combine(testing::Bool(), 4702 testing::Combine(testing::Bool(),
4703 testing::Bool(), 4703 testing::Bool(),
4704 testing::Bool())); 4704 testing::Bool()));
4705 4705
4706 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_SingleLayerImpl) {
4707 FakeImplTaskRunnerProvider task_runner_provider;
4708 TestTaskGraphRunner task_graph_runner;
4709 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4710 host_impl.CreatePendingTree();
4711
4712 std::unique_ptr<LayerImpl> root =
4713 LayerImpl::Create(host_impl.pending_tree(), 1);
4714 root->SetBounds(gfx::Size(50, 50));
4715 root->SetDrawsContent(true);
4716 LayerImpl* root_layer = root.get();
4717
4718 std::unique_ptr<LayerImpl> child =
4719 LayerImpl::Create(host_impl.pending_tree(), 2);
4720 child->SetBounds(gfx::Size(40, 40));
4721 child->SetDrawsContent(true);
4722 LayerImpl* child_layer = child.get();
4723
4724 std::unique_ptr<LayerImpl> grand_child =
4725 LayerImpl::Create(host_impl.pending_tree(), 3);
4726 grand_child->SetBounds(gfx::Size(30, 30));
4727 grand_child->SetDrawsContent(true);
4728 grand_child->test_properties()->hide_layer_and_subtree = true;
4729 LayerImpl* grand_child_layer = grand_child.get();
4730
4731 child->test_properties()->AddChild(std::move(grand_child));
4732 root->test_properties()->AddChild(std::move(child));
4733 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4734
4735 RenderSurfaceList render_surface_list;
4736 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4737 root_layer, root_layer->bounds(), &render_surface_list);
4738 inputs.can_adjust_raster_scales = true;
4739 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4740
4741 // We should have one render surface and two layers. The grand child has
4742 // hidden itself.
4743 ASSERT_EQ(1u, render_surface_list.size());
4744 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4745 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4746 EXPECT_TRUE(child_layer->contributes_to_drawn_render_surface());
4747 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4748 }
4749
4750 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_TwoLayersImpl) {
4751 FakeImplTaskRunnerProvider task_runner_provider;
4752 TestTaskGraphRunner task_graph_runner;
4753 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4754 host_impl.CreatePendingTree();
4755
4756 std::unique_ptr<LayerImpl> root =
4757 LayerImpl::Create(host_impl.pending_tree(), 1);
4758 root->SetBounds(gfx::Size(50, 50));
4759 root->SetDrawsContent(true);
4760 LayerImpl* root_layer = root.get();
4761
4762 std::unique_ptr<LayerImpl> child =
4763 LayerImpl::Create(host_impl.pending_tree(), 2);
4764 child->SetBounds(gfx::Size(40, 40));
4765 child->SetDrawsContent(true);
4766 child->test_properties()->hide_layer_and_subtree = true;
4767 LayerImpl* child_layer = child.get();
4768
4769 std::unique_ptr<LayerImpl> grand_child =
4770 LayerImpl::Create(host_impl.pending_tree(), 3);
4771 grand_child->SetBounds(gfx::Size(30, 30));
4772 grand_child->SetDrawsContent(true);
4773 LayerImpl* grand_child_layer = grand_child.get();
4774
4775 child->test_properties()->AddChild(std::move(grand_child));
4776 root->test_properties()->AddChild(std::move(child));
4777 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4778
4779 RenderSurfaceList render_surface_list;
4780 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4781 root_layer, root_layer->bounds(), &render_surface_list);
4782 inputs.can_adjust_raster_scales = true;
4783 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4784
4785 // We should have one render surface and one layer. The child has
4786 // hidden itself and the grand child.
4787 ASSERT_EQ(1u, render_surface_list.size());
4788 ASSERT_EQ(1, GetRenderSurface(root_layer)->num_contributors());
4789 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4790 EXPECT_FALSE(child_layer->contributes_to_drawn_render_surface());
4791 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4792 }
4793
4794 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {} 4706 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {}
4795 4707
4796 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) { 4708 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) {
4797 FakeImplTaskRunnerProvider task_runner_provider; 4709 scoped_refptr<Layer> root = Layer::Create();
4798 TestTaskGraphRunner task_graph_runner; 4710 scoped_refptr<Layer> copy_grand_parent = Layer::Create();
4799 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4711 scoped_refptr<Layer> copy_parent = Layer::Create();
4800 host_impl.CreatePendingTree(); 4712 scoped_refptr<Layer> copy_layer = Layer::Create();
4713 scoped_refptr<Layer> copy_child = Layer::Create();
4714 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4715 scoped_refptr<Layer> copy_grand_parent_sibling_before = Layer::Create();
4716 scoped_refptr<Layer> copy_grand_parent_sibling_after = Layer::Create();
4801 4717
4802 std::unique_ptr<LayerImpl> root =
4803 LayerImpl::Create(host_impl.pending_tree(), 1);
4804 root->SetBounds(gfx::Size(50, 50)); 4718 root->SetBounds(gfx::Size(50, 50));
4805 root->SetDrawsContent(true); 4719 copy_grand_parent->SetBounds(gfx::Size(50, 50));
4806 LayerImpl* root_layer = root.get(); 4720 copy_parent->SetBounds(gfx::Size(50, 50));
4721 copy_parent->SetForceRenderSurfaceForTesting(true);
4722 copy_layer->SetBounds(gfx::Size(50, 50));
4723 copy_child->SetBounds(gfx::Size(50, 50));
4724 copy_grand_child->SetBounds(gfx::Size(50, 50));
4725 copy_grand_parent_sibling_before->SetBounds(gfx::Size(50, 50));
4726 copy_grand_parent_sibling_after->SetBounds(gfx::Size(50, 50));
4807 4727
4808 std::unique_ptr<LayerImpl> copy_grand_parent = 4728 root->AddChild(copy_grand_parent_sibling_before);
4809 LayerImpl::Create(host_impl.pending_tree(), 2); 4729 root->AddChild(copy_grand_parent);
4810 copy_grand_parent->SetBounds(gfx::Size(40, 40)); 4730 root->AddChild(copy_grand_parent_sibling_after);
4811 copy_grand_parent->SetDrawsContent(true); 4731 copy_grand_parent->AddChild(copy_parent);
4812 LayerImpl* copy_grand_parent_layer = copy_grand_parent.get(); 4732 copy_parent->AddChild(copy_layer);
4733 copy_layer->AddChild(copy_child);
4734 copy_child->AddChild(copy_grand_child);
4735 host()->SetRootLayer(root);
4813 4736
4814 std::unique_ptr<LayerImpl> copy_parent = 4737 copy_layer->RequestCopyOfOutput(
4815 LayerImpl::Create(host_impl.pending_tree(), 3);
4816 copy_parent->SetBounds(gfx::Size(30, 30));
4817 copy_parent->SetDrawsContent(true);
4818 copy_parent->test_properties()->force_render_surface = true;
4819 LayerImpl* copy_parent_layer = copy_parent.get();
4820
4821 std::unique_ptr<LayerImpl> copy_request =
4822 LayerImpl::Create(host_impl.pending_tree(), 4);
4823 copy_request->SetBounds(gfx::Size(20, 20));
4824 copy_request->SetDrawsContent(true);
4825 copy_request->test_properties()->force_render_surface = true;
4826 LayerImpl* copy_layer = copy_request.get();
4827
4828 std::unique_ptr<LayerImpl> copy_child =
4829 LayerImpl::Create(host_impl.pending_tree(), 5);
4830 copy_child->SetBounds(gfx::Size(20, 20));
4831 copy_child->SetDrawsContent(true);
4832 LayerImpl* copy_child_layer = copy_child.get();
4833
4834 std::unique_ptr<LayerImpl> copy_grand_child =
4835 LayerImpl::Create(host_impl.pending_tree(), 6);
4836 copy_grand_child->SetBounds(gfx::Size(20, 20));
4837 copy_grand_child->SetDrawsContent(true);
4838 LayerImpl* copy_grand_child_layer = copy_grand_child.get();
4839
4840 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_before =
4841 LayerImpl::Create(host_impl.pending_tree(), 7);
4842 copy_grand_parent_sibling_before->SetBounds(gfx::Size(40, 40));
4843 copy_grand_parent_sibling_before->SetDrawsContent(true);
4844 LayerImpl* copy_grand_parent_sibling_before_layer =
4845 copy_grand_parent_sibling_before.get();
4846
4847 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_after =
4848 LayerImpl::Create(host_impl.pending_tree(), 8);
4849 copy_grand_parent_sibling_after->SetBounds(gfx::Size(40, 40));
4850 copy_grand_parent_sibling_after->SetDrawsContent(true);
4851 LayerImpl* copy_grand_parent_sibling_after_layer =
4852 copy_grand_parent_sibling_after.get();
4853
4854 copy_child->test_properties()->AddChild(std::move(copy_grand_child));
4855 copy_request->test_properties()->AddChild(std::move(copy_child));
4856 copy_parent->test_properties()->AddChild(std::move(copy_request));
4857 copy_grand_parent->test_properties()->AddChild(std::move(copy_parent));
4858 root->test_properties()->AddChild(
4859 std::move(copy_grand_parent_sibling_before));
4860 root->test_properties()->AddChild(std::move(copy_grand_parent));
4861 root->test_properties()->AddChild(std::move(copy_grand_parent_sibling_after));
4862 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4863
4864 // Hide the copy_grand_parent and its subtree. But make a copy request in that
4865 // hidden subtree on copy_layer. Also hide the copy grand child and its
4866 // subtree.
4867 copy_grand_parent_layer->test_properties()->hide_layer_and_subtree = true;
4868 copy_grand_parent_sibling_before_layer->test_properties()
4869 ->hide_layer_and_subtree = true;
4870 copy_grand_parent_sibling_after_layer->test_properties()
4871 ->hide_layer_and_subtree = true;
4872 copy_grand_child_layer->test_properties()->hide_layer_and_subtree = true;
4873
4874 copy_layer->test_properties()->copy_requests.push_back(
4875 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback))); 4738 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
4876 4739
4877 RenderSurfaceList render_surface_list; 4740 copy_grand_parent->SetHideLayerAndSubtree(true);
4878 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 4741 copy_grand_parent_sibling_before->SetHideLayerAndSubtree(true);
4879 root_layer, root_layer->bounds(), &render_surface_list); 4742 copy_grand_parent_sibling_after->SetHideLayerAndSubtree(true);
4880 inputs.can_adjust_raster_scales = true; 4743 copy_grand_child->SetHideLayerAndSubtree(true);
4881 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4882 4744
4883 EXPECT_TRUE(root_layer->has_copy_requests_in_target_subtree()); 4745 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
4884 EXPECT_TRUE(copy_grand_parent_layer->has_copy_requests_in_target_subtree()); 4746 EXPECT_FALSE(copy_grand_parent->is_hidden());
4885 EXPECT_TRUE(copy_parent_layer->has_copy_requests_in_target_subtree()); 4747 EXPECT_TRUE(copy_grand_parent_sibling_after->is_hidden());
4886 EXPECT_TRUE(copy_layer->has_copy_requests_in_target_subtree()); 4748 EXPECT_TRUE(copy_grand_parent_sibling_before->is_hidden());
4749 EXPECT_TRUE(copy_grand_child->is_hidden());
4887 4750
4888 // We should have four render surfaces, one for the root, one for the grand 4751 EffectTree& tree = host()->property_trees()->effect_tree;
4889 // parent since it has opacity and two drawing descendants, one for the parent 4752 EffectNode* node = tree.Node(copy_grand_parent->effect_tree_index());
4890 // since it owns a surface, and one for the copy_layer.
4891 ASSERT_EQ(4u, render_surface_list.size());
4892 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
4893 EXPECT_EQ(copy_grand_parent_layer->id(), render_surface_list.at(1)->id());
4894 EXPECT_EQ(copy_parent_layer->id(), render_surface_list.at(2)->id());
4895 EXPECT_EQ(copy_layer->id(), render_surface_list.at(3)->id());
4896
4897 // The root render surface should have 2 contributing layers.
4898 EXPECT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4899 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4900 EXPECT_FALSE(copy_grand_parent_layer->contributes_to_drawn_render_surface());
4901 EXPECT_FALSE(copy_grand_parent_sibling_before_layer
4902 ->contributes_to_drawn_render_surface());
4903 EXPECT_FALSE(copy_grand_parent_sibling_after_layer
4904 ->contributes_to_drawn_render_surface());
4905
4906 // Nothing actually draws into the copy parent, so only the copy_layer will
4907 // appear in its list, since it needs to be drawn for the copy request.
4908 ASSERT_EQ(1, GetRenderSurface(copy_parent_layer)->num_contributors());
4909 EXPECT_FALSE(copy_parent_layer->contributes_to_drawn_render_surface());
4910
4911 // The copy layer's render surface should have 2 contributing layers.
4912 ASSERT_EQ(2, GetRenderSurface(copy_layer)->num_contributors());
4913 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface());
4914 EXPECT_TRUE(copy_child_layer->contributes_to_drawn_render_surface());
4915 EXPECT_FALSE(copy_grand_child_layer->contributes_to_drawn_render_surface());
4916
4917 // copy_grand_parent, copy_parent shouldn't be drawn because they are hidden,
4918 // but the copy_layer and copy_child should be drawn for the copy request.
4919 // copy grand child should not be drawn as its hidden even in the copy
4920 // request.
4921 EffectTree& tree =
4922 root_layer->layer_tree_impl()->property_trees()->effect_tree;
4923 EffectNode* node = tree.Node(copy_grand_parent_layer->effect_tree_index());
4924 EXPECT_FALSE(node->is_drawn); 4753 EXPECT_FALSE(node->is_drawn);
4925 node = tree.Node(copy_parent_layer->effect_tree_index()); 4754 node = tree.Node(copy_parent->effect_tree_index());
4926 EXPECT_FALSE(node->is_drawn); 4755 EXPECT_FALSE(node->is_drawn);
4927 node = tree.Node(copy_layer->effect_tree_index()); 4756 node = tree.Node(copy_layer->effect_tree_index());
4928 EXPECT_TRUE(node->is_drawn); 4757 EXPECT_TRUE(node->is_drawn);
4929 node = tree.Node(copy_child_layer->effect_tree_index()); 4758 node = tree.Node(copy_child->effect_tree_index());
4930 EXPECT_TRUE(node->is_drawn); 4759 EXPECT_TRUE(node->is_drawn);
4931 node = tree.Node(copy_grand_child_layer->effect_tree_index());
4932 EXPECT_FALSE(node->is_drawn);
4933
4934 // Though copy_layer is drawn, it shouldn't contribute to drawn surface as its
4935 // actually hidden.
4936 EXPECT_FALSE(GetRenderSurface(copy_layer)->contributes_to_drawn_surface());
4937 } 4760 }
4938 4761
4939 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) { 4762 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) {
4940 FakeImplTaskRunnerProvider task_runner_provider; 4763 FakeImplTaskRunnerProvider task_runner_provider;
4941 TestTaskGraphRunner task_graph_runner; 4764 TestTaskGraphRunner task_graph_runner;
4942 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4765 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4943 host_impl.CreatePendingTree(); 4766 host_impl.CreatePendingTree();
4944 4767
4945 std::unique_ptr<LayerImpl> root = 4768 std::unique_ptr<LayerImpl> root =
4946 LayerImpl::Create(host_impl.pending_tree(), 1); 4769 LayerImpl::Create(host_impl.pending_tree(), 1);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4982 ASSERT_EQ(2u, render_surface_list.size()); 4805 ASSERT_EQ(2u, render_surface_list.size());
4983 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id()); 4806 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
4984 4807
4985 // The root render surface should have only 2 contributing layer, since the 4808 // The root render surface should have only 2 contributing layer, since the
4986 // other layers are clipped away. 4809 // other layers are clipped away.
4987 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors()); 4810 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4988 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface()); 4811 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4989 } 4812 }
4990 4813
4991 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) { 4814 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) {
4992 LayerImpl* root = root_layer_for_testing(); 4815 scoped_refptr<Layer> root = Layer::Create();
4816 scoped_refptr<Layer> singular_transform_layer = Layer::Create();
4817 scoped_refptr<Layer> copy_layer = Layer::Create();
4818 scoped_refptr<Layer> copy_child = Layer::Create();
4819 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4820
4821 root->AddChild(singular_transform_layer);
4822 singular_transform_layer->AddChild(copy_layer);
4823 copy_layer->AddChild(copy_child);
4824 copy_child->AddChild(copy_grand_child);
4825 host()->SetRootLayer(root);
4826
4993 root->SetBounds(gfx::Size(50, 50)); 4827 root->SetBounds(gfx::Size(50, 50));
4994 root->SetDrawsContent(true); 4828 root->SetIsDrawable(true);
4995
4996 LayerImpl* singular_transform_layer = AddChild<LayerImpl>(root);
4997 singular_transform_layer->SetBounds(gfx::Size(100, 100)); 4829 singular_transform_layer->SetBounds(gfx::Size(100, 100));
4998 singular_transform_layer->SetDrawsContent(true);
4999 gfx::Transform singular; 4830 gfx::Transform singular;
5000 singular.Scale3d(6.f, 6.f, 0.f); 4831 singular.Scale3d(6.f, 6.f, 0.f);
5001 singular_transform_layer->test_properties()->transform = singular; 4832 singular_transform_layer->SetTransform(singular);
4833 singular_transform_layer->SetIsDrawable(true);
4834 copy_layer->SetBounds(gfx::Size(100, 100));
4835 copy_layer->SetIsDrawable(true);
4836 copy_layer->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
4837 base::Bind(&EmptyCopyOutputCallback)));
4838 copy_child->SetBounds(gfx::Size(100, 100));
4839 copy_child->SetIsDrawable(true);
4840 copy_grand_child->SetBounds(gfx::Size(100, 100));
4841 copy_grand_child->SetTransform(singular);
4842 copy_grand_child->SetIsDrawable(true);
5002 4843
5003 LayerImpl* copy_layer = AddChild<LayerImpl>(singular_transform_layer); 4844 ExecuteCalculateDrawProperties(root.get());
5004 copy_layer->SetBounds(gfx::Size(100, 100));
5005 copy_layer->SetDrawsContent(true);
5006 copy_layer->test_properties()->copy_requests.push_back(
5007 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
5008 4845
5009 LayerImpl* copy_child = AddChild<LayerImpl>(copy_layer); 4846 host()->host_impl()->CreatePendingTree();
5010 copy_child->SetBounds(gfx::Size(100, 100)); 4847 host()->CommitAndCreatePendingTree();
5011 copy_child->SetDrawsContent(true); 4848 host()->host_impl()->ActivateSyncTree();
4849 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree();
5012 4850
5013 LayerImpl* copy_grand_child = AddChild<LayerImpl>(copy_child); 4851 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id());
5014 copy_grand_child->SetBounds(gfx::Size(100, 100)); 4852 LayerImpl* singular_transform_layer_impl =
5015 copy_grand_child->SetDrawsContent(true); 4853 layer_tree_impl->LayerById(singular_transform_layer->id());
5016 copy_grand_child->test_properties()->transform = singular; 4854 LayerImpl* copy_layer_impl = layer_tree_impl->LayerById(copy_layer->id());
5017 4855 LayerImpl* copy_child_impl = layer_tree_impl->LayerById(copy_child->id());
5018 DCHECK(!copy_layer->test_properties()->copy_requests.empty()); 4856 LayerImpl* copy_grand_child_impl =
5019 ExecuteCalculateDrawProperties(root); 4857 layer_tree_impl->LayerById(copy_grand_child->id());
5020 DCHECK(copy_layer->test_properties()->copy_requests.empty()); 4858 ExecuteCalculateDrawProperties(root_impl);
5021 4859
5022 // A layer with singular transform should not contribute to drawn render 4860 // A layer with singular transform should not contribute to drawn render
5023 // surface. 4861 // surface.
5024 EXPECT_FALSE(singular_transform_layer->contributes_to_drawn_render_surface()); 4862 EXPECT_FALSE(
4863 singular_transform_layer_impl->contributes_to_drawn_render_surface());
5025 // Even though copy_layer and copy_child have singular screen space transform, 4864 // Even though copy_layer and copy_child have singular screen space transform,
5026 // they still contribute to drawn render surface as their transform to the 4865 // they still contribute to drawn render surface as their transform to the
5027 // closest ancestor with copy request is not singular. 4866 // closest ancestor with copy request is not singular.
5028 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface()); 4867 EXPECT_TRUE(copy_layer_impl->contributes_to_drawn_render_surface());
5029 EXPECT_TRUE(copy_child->contributes_to_drawn_render_surface()); 4868 EXPECT_TRUE(copy_child_impl->contributes_to_drawn_render_surface());
5030 // copy_grand_child's transform to its closest ancestor with copy request is 4869 // copy_grand_child's transform to its closest ancestor with copy request is
5031 // also singular. So, it doesn't contribute to drawn render surface. 4870 // also singular. So, it doesn't contribute to drawn render surface.
5032 EXPECT_FALSE(copy_grand_child->contributes_to_drawn_render_surface()); 4871 EXPECT_FALSE(copy_grand_child_impl->contributes_to_drawn_render_surface());
5033 } 4872 }
5034 4873
5035 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) { 4874 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) {
5036 LayerImpl* root = root_layer_for_testing(); 4875 LayerImpl* root = root_layer_for_testing();
5037 root->SetBounds(gfx::Size(50, 50)); 4876 root->SetBounds(gfx::Size(50, 50));
5038 root->SetDrawsContent(true); 4877 root->SetDrawsContent(true);
5039 root->SetMasksToBounds(true); 4878 root->SetMasksToBounds(true);
5040 4879
5041 LayerImpl* copy_layer = AddChild<LayerImpl>(root); 4880 LayerImpl* copy_layer = AddChild<LayerImpl>(root);
5042 copy_layer->SetBounds(gfx::Size(100, 100)); 4881 copy_layer->SetBounds(gfx::Size(100, 100));
(...skipping 3676 matching lines...) Expand 10 before | Expand all | Expand 10 after
8719 8558
8720 child->SetTransform(singular); 8559 child->SetTransform(singular);
8721 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8560 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8722 update_list = GetUpdateLayerList(); 8561 update_list = GetUpdateLayerList();
8723 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8562 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8724 child->SetTransform(gfx::Transform()); 8563 child->SetTransform(gfx::Transform());
8725 8564
8726 child->SetHideLayerAndSubtree(true); 8565 child->SetHideLayerAndSubtree(true);
8727 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8566 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8728 update_list = GetUpdateLayerList(); 8567 update_list = GetUpdateLayerList();
8568 EXPECT_TRUE(child->is_hidden());
8569 EXPECT_TRUE(grandchild->is_hidden());
8570 EXPECT_FALSE(VerifyLayerInList(child, update_list));
8729 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8571 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8730 child->SetHideLayerAndSubtree(false); 8572 child->SetHideLayerAndSubtree(false);
8731 8573
8732 gfx::Transform zero_z_scale; 8574 gfx::Transform zero_z_scale;
8733 zero_z_scale.Scale3d(1, 1, 0); 8575 zero_z_scale.Scale3d(1, 1, 0);
8734 child->SetTransform(zero_z_scale); 8576 child->SetTransform(zero_z_scale);
8735 8577
8736 // Add a transform animation with a start delay. Now, even though |child| has 8578 // Add a transform animation with a start delay. Now, even though |child| has
8737 // a singular transform, the subtree should still get processed. 8579 // a singular transform, the subtree should still get processed.
8738 int animation_id = 0; 8580 int animation_id = 0;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
8832 gfx::Transform rotate_back_and_translate; 8674 gfx::Transform rotate_back_and_translate;
8833 rotate_back_and_translate.RotateAboutYAxis(180); 8675 rotate_back_and_translate.RotateAboutYAxis(180);
8834 rotate_back_and_translate.Translate(-10, 0); 8676 rotate_back_and_translate.Translate(-10, 0);
8835 8677
8836 child_ptr->test_properties()->transform = singular; 8678 child_ptr->test_properties()->transform = singular;
8837 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8679 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8838 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8680 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8839 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8681 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8840 child_ptr->test_properties()->transform = gfx::Transform(); 8682 child_ptr->test_properties()->transform = gfx::Transform();
8841 8683
8842 child_ptr->test_properties()->hide_layer_and_subtree = true;
8843 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8844 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8845 child_ptr->test_properties()->hide_layer_and_subtree = false;
8846
8847 child_ptr->test_properties()->opacity = 0.f; 8684 child_ptr->test_properties()->opacity = 0.f;
8848 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8685 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8849 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8686 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8850 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8687 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8851 child_ptr->test_properties()->opacity = 1.f; 8688 child_ptr->test_properties()->opacity = 1.f;
8852 8689
8853 root_ptr->test_properties()->transform = singular; 8690 root_ptr->test_properties()->transform = singular;
8854 // Force transform tree to have a node for child, so that ancestor's 8691 // Force transform tree to have a node for child, so that ancestor's
8855 // invertible transform can be tested. 8692 // invertible transform can be tested.
8856 child_ptr->test_properties()->transform = rotate; 8693 child_ptr->test_properties()->transform = rotate;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
9031 LayerImpl* child = AddChild<LayerImpl>(root); 8868 LayerImpl* child = AddChild<LayerImpl>(root);
9032 8869
9033 root->SetBounds(gfx::Size(100, 100)); 8870 root->SetBounds(gfx::Size(100, 100));
9034 child->SetBounds(gfx::Size(10, 10)); 8871 child->SetBounds(gfx::Size(10, 10));
9035 child->SetDrawsContent(true); 8872 child->SetDrawsContent(true);
9036 8873
9037 ExecuteCalculateDrawProperties(root); 8874 ExecuteCalculateDrawProperties(root);
9038 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 8875 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
9039 child->set_visible_layer_rect(gfx::Rect()); 8876 child->set_visible_layer_rect(gfx::Rect());
9040 8877
9041 child->test_properties()->hide_layer_and_subtree = true;
9042 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9043 ExecuteCalculateDrawProperties(root);
9044 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9045 child->test_properties()->hide_layer_and_subtree = false;
9046
9047 child->SetBounds(gfx::Size()); 8878 child->SetBounds(gfx::Size());
9048 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 8879 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9049 ExecuteCalculateDrawProperties(root); 8880 ExecuteCalculateDrawProperties(root);
9050 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect()); 8881 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9051 child->SetBounds(gfx::Size(10, 10)); 8882 child->SetBounds(gfx::Size(10, 10));
9052 8883
9053 gfx::Transform rotate; 8884 gfx::Transform rotate;
9054 child->test_properties()->double_sided = false; 8885 child->test_properties()->double_sided = false;
9055 rotate.RotateAboutXAxis(180.f); 8886 rotate.RotateAboutXAxis(180.f);
9056 child->test_properties()->transform = rotate; 8887 child->test_properties()->transform = rotate;
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
9563 test_layer->SetDrawsContent(true); 9394 test_layer->SetDrawsContent(true);
9564 ExecuteCalculateDrawProperties(root); 9395 ExecuteCalculateDrawProperties(root);
9565 9396
9566 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect()); 9397 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect());
9567 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect()); 9398 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect());
9568 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect()); 9399 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect());
9569 } 9400 }
9570 9401
9571 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) { 9402 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) {
9572 // Tests that subtree is hidden is updated. 9403 // Tests that subtree is hidden is updated.
9573 LayerImpl* root = root_layer_for_testing(); 9404 scoped_refptr<Layer> root = Layer::Create();
9574 LayerImpl* hidden = AddChild<LayerImpl>(root); 9405 scoped_refptr<Layer> hidden = Layer::Create();
9575 LayerImpl* test = AddChild<LayerImpl>(hidden); 9406 scoped_refptr<Layer> test = Layer::Create();
9576 9407
9577 root->SetBounds(gfx::Size(30, 30)); 9408 root->SetBounds(gfx::Size(30, 30));
9578 hidden->SetBounds(gfx::Size(30, 30)); 9409 hidden->SetBounds(gfx::Size(30, 30));
9579 hidden->test_properties()->force_render_surface = true; 9410 hidden->SetHideLayerAndSubtree(true);
9580 hidden->test_properties()->hide_layer_and_subtree = true;
9581 test->SetBounds(gfx::Size(30, 30)); 9411 test->SetBounds(gfx::Size(30, 30));
9582 test->test_properties()->force_render_surface = true;
9583 9412
9584 ExecuteCalculateDrawProperties(root); 9413 root->AddChild(hidden);
9585 EXPECT_EQ(0.f, 9414 hidden->AddChild(test);
9586 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9415 host()->SetRootLayer(root);
9587 9416
9588 hidden->test_properties()->hide_layer_and_subtree = false; 9417 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9589 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 9418 EXPECT_TRUE(test->is_hidden());
9590 ExecuteCalculateDrawProperties(root); 9419 // Hidden layers should have invalid property tree indices.
9591 EXPECT_EQ(1.f, 9420 const int kInvalidNodeId = -1;
9592 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9421 EXPECT_EQ(test->effect_tree_index(), kInvalidNodeId);
9422 EXPECT_EQ(test->scroll_tree_index(), kInvalidNodeId);
9423 EXPECT_EQ(test->clip_tree_index(), kInvalidNodeId);
9424 EXPECT_EQ(test->transform_tree_index(), kInvalidNodeId);
9425
9426 hidden->SetHideLayerAndSubtree(false);
9427 root->layer_tree_host()->property_trees()->needs_rebuild = true;
9428 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9429 EXPECT_FALSE(test->is_hidden());
9430 EXPECT_NE(test->effect_tree_index(), kInvalidNodeId);
9431 EXPECT_NE(test->scroll_tree_index(), kInvalidNodeId);
9432 EXPECT_NE(test->clip_tree_index(), kInvalidNodeId);
9433 EXPECT_NE(test->transform_tree_index(), kInvalidNodeId);
9593 } 9434 }
9594 9435
9595 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) { 9436 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
9596 LayerImpl* root = root_layer_for_testing(); 9437 LayerImpl* root = root_layer_for_testing();
9597 LayerImpl* clip_layer = AddChild<LayerImpl>(root); 9438 LayerImpl* clip_layer = AddChild<LayerImpl>(root);
9598 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer); 9439 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
9599 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1); 9440 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1);
9600 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2); 9441 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2);
9601 9442
9602 root->SetBounds(gfx::Size(30, 30)); 9443 root->SetBounds(gfx::Size(30, 30));
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
10178 10019
10179 // Check child layer draw properties. 10020 // Check child layer draw properties.
10180 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 10021 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
10181 EXPECT_EQ(gfx::Transform(), child->DrawTransform()); 10022 EXPECT_EQ(gfx::Transform(), child->DrawTransform());
10182 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect()); 10023 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect());
10183 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect()); 10024 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect());
10184 } 10025 }
10185 10026
10186 } // namespace 10027 } // namespace
10187 } // namespace cc 10028 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698