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

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: fix cc_unittests after rebase 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 4676 matching lines...) Expand 10 before | Expand all | Expand 10 after
4687 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText()); 4687 EXPECT_EQ(expect_not_lcd_text, child_->CanUseLCDText());
4688 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText()); 4688 EXPECT_EQ(expect_lcd_text, grand_child_->CanUseLCDText());
4689 } 4689 }
4690 4690
4691 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest, 4691 INSTANTIATE_TEST_CASE_P(LayerTreeHostCommonTest,
4692 LCDTextTest, 4692 LCDTextTest,
4693 testing::Combine(testing::Bool(), 4693 testing::Combine(testing::Bool(),
4694 testing::Bool(), 4694 testing::Bool(),
4695 testing::Bool())); 4695 testing::Bool()));
4696 4696
4697 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_SingleLayerImpl) {
4698 FakeImplTaskRunnerProvider task_runner_provider;
4699 TestTaskGraphRunner task_graph_runner;
4700 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4701 host_impl.CreatePendingTree();
4702
4703 std::unique_ptr<LayerImpl> root =
4704 LayerImpl::Create(host_impl.pending_tree(), 1);
4705 root->SetBounds(gfx::Size(50, 50));
4706 root->SetDrawsContent(true);
4707 LayerImpl* root_layer = root.get();
4708
4709 std::unique_ptr<LayerImpl> child =
4710 LayerImpl::Create(host_impl.pending_tree(), 2);
4711 child->SetBounds(gfx::Size(40, 40));
4712 child->SetDrawsContent(true);
4713 LayerImpl* child_layer = child.get();
4714
4715 std::unique_ptr<LayerImpl> grand_child =
4716 LayerImpl::Create(host_impl.pending_tree(), 3);
4717 grand_child->SetBounds(gfx::Size(30, 30));
4718 grand_child->SetDrawsContent(true);
4719 grand_child->test_properties()->hide_layer_and_subtree = true;
4720 LayerImpl* grand_child_layer = grand_child.get();
4721
4722 child->test_properties()->AddChild(std::move(grand_child));
4723 root->test_properties()->AddChild(std::move(child));
4724 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4725
4726 RenderSurfaceList render_surface_list;
4727 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4728 root_layer, root_layer->bounds(), &render_surface_list);
4729 inputs.can_adjust_raster_scales = true;
4730 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4731
4732 // We should have one render surface and two layers. The grand child has
4733 // hidden itself.
4734 ASSERT_EQ(1u, render_surface_list.size());
4735 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4736 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4737 EXPECT_TRUE(child_layer->contributes_to_drawn_render_surface());
4738 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4739 }
4740
4741 TEST_F(LayerTreeHostCommonTest, SubtreeHidden_TwoLayersImpl) {
4742 FakeImplTaskRunnerProvider task_runner_provider;
4743 TestTaskGraphRunner task_graph_runner;
4744 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4745 host_impl.CreatePendingTree();
4746
4747 std::unique_ptr<LayerImpl> root =
4748 LayerImpl::Create(host_impl.pending_tree(), 1);
4749 root->SetBounds(gfx::Size(50, 50));
4750 root->SetDrawsContent(true);
4751 LayerImpl* root_layer = root.get();
4752
4753 std::unique_ptr<LayerImpl> child =
4754 LayerImpl::Create(host_impl.pending_tree(), 2);
4755 child->SetBounds(gfx::Size(40, 40));
4756 child->SetDrawsContent(true);
4757 child->test_properties()->hide_layer_and_subtree = true;
4758 LayerImpl* child_layer = child.get();
4759
4760 std::unique_ptr<LayerImpl> grand_child =
4761 LayerImpl::Create(host_impl.pending_tree(), 3);
4762 grand_child->SetBounds(gfx::Size(30, 30));
4763 grand_child->SetDrawsContent(true);
4764 LayerImpl* grand_child_layer = grand_child.get();
4765
4766 child->test_properties()->AddChild(std::move(grand_child));
4767 root->test_properties()->AddChild(std::move(child));
4768 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4769
4770 RenderSurfaceList render_surface_list;
4771 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
4772 root_layer, root_layer->bounds(), &render_surface_list);
4773 inputs.can_adjust_raster_scales = true;
4774 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4775
4776 // We should have one render surface and one layer. The child has
4777 // hidden itself and the grand child.
4778 ASSERT_EQ(1u, render_surface_list.size());
4779 ASSERT_EQ(1, GetRenderSurface(root_layer)->num_contributors());
4780 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4781 EXPECT_FALSE(child_layer->contributes_to_drawn_render_surface());
4782 EXPECT_FALSE(grand_child_layer->contributes_to_drawn_render_surface());
4783 }
4784
4785 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {} 4697 void EmptyCopyOutputCallback(std::unique_ptr<CopyOutputResult> result) {}
4786 4698
4787 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) { 4699 TEST_F(LayerTreeHostCommonTest, SubtreeHiddenWithCopyRequest) {
4788 FakeImplTaskRunnerProvider task_runner_provider; 4700 scoped_refptr<Layer> root = Layer::Create();
4789 TestTaskGraphRunner task_graph_runner; 4701 scoped_refptr<Layer> copy_grand_parent = Layer::Create();
4790 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4702 scoped_refptr<Layer> copy_parent = Layer::Create();
4791 host_impl.CreatePendingTree(); 4703 scoped_refptr<Layer> copy_layer = Layer::Create();
4704 scoped_refptr<Layer> copy_child = Layer::Create();
4705 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4706 scoped_refptr<Layer> copy_grand_parent_sibling_before = Layer::Create();
4707 scoped_refptr<Layer> copy_grand_parent_sibling_after = Layer::Create();
4792 4708
4793 std::unique_ptr<LayerImpl> root =
4794 LayerImpl::Create(host_impl.pending_tree(), 1);
4795 root->SetBounds(gfx::Size(50, 50)); 4709 root->SetBounds(gfx::Size(50, 50));
4796 root->SetDrawsContent(true); 4710 copy_grand_parent->SetBounds(gfx::Size(50, 50));
4797 LayerImpl* root_layer = root.get(); 4711 copy_parent->SetBounds(gfx::Size(50, 50));
4712 copy_parent->SetForceRenderSurfaceForTesting(true);
4713 copy_layer->SetBounds(gfx::Size(50, 50));
4714 copy_child->SetBounds(gfx::Size(50, 50));
4715 copy_grand_child->SetBounds(gfx::Size(50, 50));
4716 copy_grand_parent_sibling_before->SetBounds(gfx::Size(50, 50));
4717 copy_grand_parent_sibling_after->SetBounds(gfx::Size(50, 50));
4798 4718
4799 std::unique_ptr<LayerImpl> copy_grand_parent = 4719 root->AddChild(copy_grand_parent_sibling_before);
4800 LayerImpl::Create(host_impl.pending_tree(), 2); 4720 root->AddChild(copy_grand_parent);
4801 copy_grand_parent->SetBounds(gfx::Size(40, 40)); 4721 root->AddChild(copy_grand_parent_sibling_after);
4802 copy_grand_parent->SetDrawsContent(true); 4722 copy_grand_parent->AddChild(copy_parent);
4803 LayerImpl* copy_grand_parent_layer = copy_grand_parent.get(); 4723 copy_parent->AddChild(copy_layer);
4724 copy_layer->AddChild(copy_child);
4725 copy_child->AddChild(copy_grand_child);
4726 host()->SetRootLayer(root);
4804 4727
4805 std::unique_ptr<LayerImpl> copy_parent = 4728 copy_layer->RequestCopyOfOutput(
4806 LayerImpl::Create(host_impl.pending_tree(), 3);
4807 copy_parent->SetBounds(gfx::Size(30, 30));
4808 copy_parent->SetDrawsContent(true);
4809 copy_parent->test_properties()->force_render_surface = true;
4810 LayerImpl* copy_parent_layer = copy_parent.get();
4811
4812 std::unique_ptr<LayerImpl> copy_request =
4813 LayerImpl::Create(host_impl.pending_tree(), 4);
4814 copy_request->SetBounds(gfx::Size(20, 20));
4815 copy_request->SetDrawsContent(true);
4816 copy_request->test_properties()->force_render_surface = true;
4817 LayerImpl* copy_layer = copy_request.get();
4818
4819 std::unique_ptr<LayerImpl> copy_child =
4820 LayerImpl::Create(host_impl.pending_tree(), 5);
4821 copy_child->SetBounds(gfx::Size(20, 20));
4822 copy_child->SetDrawsContent(true);
4823 LayerImpl* copy_child_layer = copy_child.get();
4824
4825 std::unique_ptr<LayerImpl> copy_grand_child =
4826 LayerImpl::Create(host_impl.pending_tree(), 6);
4827 copy_grand_child->SetBounds(gfx::Size(20, 20));
4828 copy_grand_child->SetDrawsContent(true);
4829 LayerImpl* copy_grand_child_layer = copy_grand_child.get();
4830
4831 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_before =
4832 LayerImpl::Create(host_impl.pending_tree(), 7);
4833 copy_grand_parent_sibling_before->SetBounds(gfx::Size(40, 40));
4834 copy_grand_parent_sibling_before->SetDrawsContent(true);
4835 LayerImpl* copy_grand_parent_sibling_before_layer =
4836 copy_grand_parent_sibling_before.get();
4837
4838 std::unique_ptr<LayerImpl> copy_grand_parent_sibling_after =
4839 LayerImpl::Create(host_impl.pending_tree(), 8);
4840 copy_grand_parent_sibling_after->SetBounds(gfx::Size(40, 40));
4841 copy_grand_parent_sibling_after->SetDrawsContent(true);
4842 LayerImpl* copy_grand_parent_sibling_after_layer =
4843 copy_grand_parent_sibling_after.get();
4844
4845 copy_child->test_properties()->AddChild(std::move(copy_grand_child));
4846 copy_request->test_properties()->AddChild(std::move(copy_child));
4847 copy_parent->test_properties()->AddChild(std::move(copy_request));
4848 copy_grand_parent->test_properties()->AddChild(std::move(copy_parent));
4849 root->test_properties()->AddChild(
4850 std::move(copy_grand_parent_sibling_before));
4851 root->test_properties()->AddChild(std::move(copy_grand_parent));
4852 root->test_properties()->AddChild(std::move(copy_grand_parent_sibling_after));
4853 host_impl.pending_tree()->SetRootLayerForTesting(std::move(root));
4854
4855 // Hide the copy_grand_parent and its subtree. But make a copy request in that
4856 // hidden subtree on copy_layer. Also hide the copy grand child and its
4857 // subtree.
4858 copy_grand_parent_layer->test_properties()->hide_layer_and_subtree = true;
4859 copy_grand_parent_sibling_before_layer->test_properties()
4860 ->hide_layer_and_subtree = true;
4861 copy_grand_parent_sibling_after_layer->test_properties()
4862 ->hide_layer_and_subtree = true;
4863 copy_grand_child_layer->test_properties()->hide_layer_and_subtree = true;
4864
4865 copy_layer->test_properties()->copy_requests.push_back(
4866 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback))); 4729 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
4867 4730
4868 RenderSurfaceList render_surface_list; 4731 copy_grand_parent->SetHideLayerAndSubtree(true);
4869 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 4732 copy_grand_parent_sibling_before->SetHideLayerAndSubtree(true);
4870 root_layer, root_layer->bounds(), &render_surface_list); 4733 copy_grand_parent_sibling_after->SetHideLayerAndSubtree(true);
4871 inputs.can_adjust_raster_scales = true; 4734 copy_grand_child->SetHideLayerAndSubtree(true);
4872 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
4873 4735
4874 EXPECT_TRUE(root_layer->has_copy_requests_in_target_subtree()); 4736 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
4875 EXPECT_TRUE(copy_grand_parent_layer->has_copy_requests_in_target_subtree()); 4737 EXPECT_FALSE(copy_grand_parent->is_hidden());
4876 EXPECT_TRUE(copy_parent_layer->has_copy_requests_in_target_subtree()); 4738 EXPECT_TRUE(copy_grand_parent_sibling_after->is_hidden());
4877 EXPECT_TRUE(copy_layer->has_copy_requests_in_target_subtree()); 4739 EXPECT_TRUE(copy_grand_parent_sibling_before->is_hidden());
4740 EXPECT_TRUE(copy_grand_child->is_hidden());
4878 4741
4879 // We should have four render surfaces, one for the root, one for the grand 4742 EffectTree& tree = host()->property_trees()->effect_tree;
4880 // parent since it has opacity and two drawing descendants, one for the parent 4743 EffectNode* node = tree.Node(copy_grand_parent->effect_tree_index());
4881 // since it owns a surface, and one for the copy_layer.
4882 ASSERT_EQ(4u, render_surface_list.size());
4883 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
4884 EXPECT_EQ(copy_grand_parent_layer->id(), render_surface_list.at(1)->id());
4885 EXPECT_EQ(copy_parent_layer->id(), render_surface_list.at(2)->id());
4886 EXPECT_EQ(copy_layer->id(), render_surface_list.at(3)->id());
4887
4888 // The root render surface should have 2 contributing layers.
4889 EXPECT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4890 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4891 EXPECT_FALSE(copy_grand_parent_layer->contributes_to_drawn_render_surface());
4892 EXPECT_FALSE(copy_grand_parent_sibling_before_layer
4893 ->contributes_to_drawn_render_surface());
4894 EXPECT_FALSE(copy_grand_parent_sibling_after_layer
4895 ->contributes_to_drawn_render_surface());
4896
4897 // Nothing actually draws into the copy parent, so only the copy_layer will
4898 // appear in its list, since it needs to be drawn for the copy request.
4899 ASSERT_EQ(1, GetRenderSurface(copy_parent_layer)->num_contributors());
4900 EXPECT_FALSE(copy_parent_layer->contributes_to_drawn_render_surface());
4901
4902 // The copy layer's render surface should have 2 contributing layers.
4903 ASSERT_EQ(2, GetRenderSurface(copy_layer)->num_contributors());
4904 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface());
4905 EXPECT_TRUE(copy_child_layer->contributes_to_drawn_render_surface());
4906 EXPECT_FALSE(copy_grand_child_layer->contributes_to_drawn_render_surface());
4907
4908 // copy_grand_parent, copy_parent shouldn't be drawn because they are hidden,
4909 // but the copy_layer and copy_child should be drawn for the copy request.
4910 // copy grand child should not be drawn as its hidden even in the copy
4911 // request.
4912 EffectTree& tree =
4913 root_layer->layer_tree_impl()->property_trees()->effect_tree;
4914 EffectNode* node = tree.Node(copy_grand_parent_layer->effect_tree_index());
4915 EXPECT_FALSE(node->is_drawn); 4744 EXPECT_FALSE(node->is_drawn);
4916 node = tree.Node(copy_parent_layer->effect_tree_index()); 4745 node = tree.Node(copy_parent->effect_tree_index());
4917 EXPECT_FALSE(node->is_drawn); 4746 EXPECT_FALSE(node->is_drawn);
4918 node = tree.Node(copy_layer->effect_tree_index()); 4747 node = tree.Node(copy_layer->effect_tree_index());
4919 EXPECT_TRUE(node->is_drawn); 4748 EXPECT_TRUE(node->is_drawn);
4920 node = tree.Node(copy_child_layer->effect_tree_index()); 4749 node = tree.Node(copy_child->effect_tree_index());
4921 EXPECT_TRUE(node->is_drawn); 4750 EXPECT_TRUE(node->is_drawn);
4922 node = tree.Node(copy_grand_child_layer->effect_tree_index());
4923 EXPECT_FALSE(node->is_drawn);
4924
4925 // Though copy_layer is drawn, it shouldn't contribute to drawn surface as its
4926 // actually hidden.
4927 EXPECT_FALSE(GetRenderSurface(copy_layer)->contributes_to_drawn_surface());
4928 } 4751 }
4929 4752
4930 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) { 4753 TEST_F(LayerTreeHostCommonTest, ClippedOutCopyRequest) {
4931 FakeImplTaskRunnerProvider task_runner_provider; 4754 FakeImplTaskRunnerProvider task_runner_provider;
4932 TestTaskGraphRunner task_graph_runner; 4755 TestTaskGraphRunner task_graph_runner;
4933 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner); 4756 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &task_graph_runner);
4934 host_impl.CreatePendingTree(); 4757 host_impl.CreatePendingTree();
4935 4758
4936 std::unique_ptr<LayerImpl> root = 4759 std::unique_ptr<LayerImpl> root =
4937 LayerImpl::Create(host_impl.pending_tree(), 1); 4760 LayerImpl::Create(host_impl.pending_tree(), 1);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
4973 ASSERT_EQ(2u, render_surface_list.size()); 4796 ASSERT_EQ(2u, render_surface_list.size());
4974 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id()); 4797 EXPECT_EQ(root_layer->id(), render_surface_list.at(0)->id());
4975 4798
4976 // The root render surface should have only 2 contributing layer, since the 4799 // The root render surface should have only 2 contributing layer, since the
4977 // other layers are clipped away. 4800 // other layers are clipped away.
4978 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors()); 4801 ASSERT_EQ(2, GetRenderSurface(root_layer)->num_contributors());
4979 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface()); 4802 EXPECT_TRUE(root_layer->contributes_to_drawn_render_surface());
4980 } 4803 }
4981 4804
4982 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) { 4805 TEST_F(LayerTreeHostCommonTest, SingularTransformAndCopyRequests) {
4983 LayerImpl* root = root_layer_for_testing(); 4806 scoped_refptr<Layer> root = Layer::Create();
4807 scoped_refptr<Layer> singular_transform_layer = Layer::Create();
4808 scoped_refptr<Layer> copy_layer = Layer::Create();
4809 scoped_refptr<Layer> copy_child = Layer::Create();
4810 scoped_refptr<Layer> copy_grand_child = Layer::Create();
4811
4812 root->AddChild(singular_transform_layer);
4813 singular_transform_layer->AddChild(copy_layer);
4814 copy_layer->AddChild(copy_child);
4815 copy_child->AddChild(copy_grand_child);
4816 host()->SetRootLayer(root);
4817
4984 root->SetBounds(gfx::Size(50, 50)); 4818 root->SetBounds(gfx::Size(50, 50));
4985 root->SetDrawsContent(true); 4819 root->SetIsDrawable(true);
4986
4987 LayerImpl* singular_transform_layer = AddChild<LayerImpl>(root);
4988 singular_transform_layer->SetBounds(gfx::Size(100, 100)); 4820 singular_transform_layer->SetBounds(gfx::Size(100, 100));
4989 singular_transform_layer->SetDrawsContent(true);
4990 gfx::Transform singular; 4821 gfx::Transform singular;
4991 singular.Scale3d(6.f, 6.f, 0.f); 4822 singular.Scale3d(6.f, 6.f, 0.f);
4992 singular_transform_layer->test_properties()->transform = singular; 4823 singular_transform_layer->SetTransform(singular);
4824 singular_transform_layer->SetIsDrawable(true);
4825 copy_layer->SetBounds(gfx::Size(100, 100));
4826 copy_layer->SetIsDrawable(true);
4827 copy_layer->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
4828 base::Bind(&EmptyCopyOutputCallback)));
4829 copy_child->SetBounds(gfx::Size(100, 100));
4830 copy_child->SetIsDrawable(true);
4831 copy_grand_child->SetBounds(gfx::Size(100, 100));
4832 copy_grand_child->SetTransform(singular);
4833 copy_grand_child->SetIsDrawable(true);
4993 4834
4994 LayerImpl* copy_layer = AddChild<LayerImpl>(singular_transform_layer); 4835 ExecuteCalculateDrawProperties(root.get());
4995 copy_layer->SetBounds(gfx::Size(100, 100));
4996 copy_layer->SetDrawsContent(true);
4997 copy_layer->test_properties()->copy_requests.push_back(
4998 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback)));
4999 4836
5000 LayerImpl* copy_child = AddChild<LayerImpl>(copy_layer); 4837 host()->host_impl()->CreatePendingTree();
5001 copy_child->SetBounds(gfx::Size(100, 100)); 4838 host()->CommitAndCreatePendingTree();
5002 copy_child->SetDrawsContent(true); 4839 host()->host_impl()->ActivateSyncTree();
4840 LayerTreeImpl* layer_tree_impl = host()->host_impl()->active_tree();
5003 4841
5004 LayerImpl* copy_grand_child = AddChild<LayerImpl>(copy_child); 4842 LayerImpl* root_impl = layer_tree_impl->LayerById(root->id());
5005 copy_grand_child->SetBounds(gfx::Size(100, 100)); 4843 LayerImpl* singular_transform_layer_impl =
5006 copy_grand_child->SetDrawsContent(true); 4844 layer_tree_impl->LayerById(singular_transform_layer->id());
5007 copy_grand_child->test_properties()->transform = singular; 4845 LayerImpl* copy_layer_impl = layer_tree_impl->LayerById(copy_layer->id());
5008 4846 LayerImpl* copy_child_impl = layer_tree_impl->LayerById(copy_child->id());
5009 DCHECK(!copy_layer->test_properties()->copy_requests.empty()); 4847 LayerImpl* copy_grand_child_impl =
5010 ExecuteCalculateDrawProperties(root); 4848 layer_tree_impl->LayerById(copy_grand_child->id());
5011 DCHECK(copy_layer->test_properties()->copy_requests.empty()); 4849 ExecuteCalculateDrawProperties(root_impl);
5012 4850
5013 // A layer with singular transform should not contribute to drawn render 4851 // A layer with singular transform should not contribute to drawn render
5014 // surface. 4852 // surface.
5015 EXPECT_FALSE(singular_transform_layer->contributes_to_drawn_render_surface()); 4853 EXPECT_FALSE(
4854 singular_transform_layer_impl->contributes_to_drawn_render_surface());
5016 // Even though copy_layer and copy_child have singular screen space transform, 4855 // Even though copy_layer and copy_child have singular screen space transform,
5017 // they still contribute to drawn render surface as their transform to the 4856 // they still contribute to drawn render surface as their transform to the
5018 // closest ancestor with copy request is not singular. 4857 // closest ancestor with copy request is not singular.
5019 EXPECT_TRUE(copy_layer->contributes_to_drawn_render_surface()); 4858 EXPECT_TRUE(copy_layer_impl->contributes_to_drawn_render_surface());
5020 EXPECT_TRUE(copy_child->contributes_to_drawn_render_surface()); 4859 EXPECT_TRUE(copy_child_impl->contributes_to_drawn_render_surface());
5021 // copy_grand_child's transform to its closest ancestor with copy request is 4860 // copy_grand_child's transform to its closest ancestor with copy request is
5022 // also singular. So, it doesn't contribute to drawn render surface. 4861 // also singular. So, it doesn't contribute to drawn render surface.
5023 EXPECT_FALSE(copy_grand_child->contributes_to_drawn_render_surface()); 4862 EXPECT_FALSE(copy_grand_child_impl->contributes_to_drawn_render_surface());
5024 } 4863 }
5025 4864
5026 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) { 4865 TEST_F(LayerTreeHostCommonTest, VisibleRectInNonRootCopyRequest) {
5027 LayerImpl* root = root_layer_for_testing(); 4866 LayerImpl* root = root_layer_for_testing();
5028 root->SetBounds(gfx::Size(50, 50)); 4867 root->SetBounds(gfx::Size(50, 50));
5029 root->SetDrawsContent(true); 4868 root->SetDrawsContent(true);
5030 root->SetMasksToBounds(true); 4869 root->SetMasksToBounds(true);
5031 4870
5032 LayerImpl* copy_layer = AddChild<LayerImpl>(root); 4871 LayerImpl* copy_layer = AddChild<LayerImpl>(root);
5033 copy_layer->SetBounds(gfx::Size(100, 100)); 4872 copy_layer->SetBounds(gfx::Size(100, 100));
(...skipping 3665 matching lines...) Expand 10 before | Expand all | Expand 10 after
8699 8538
8700 child->SetTransform(singular); 8539 child->SetTransform(singular);
8701 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8540 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8702 update_list = GetUpdateLayerList(); 8541 update_list = GetUpdateLayerList();
8703 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8542 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8704 child->SetTransform(gfx::Transform()); 8543 child->SetTransform(gfx::Transform());
8705 8544
8706 child->SetHideLayerAndSubtree(true); 8545 child->SetHideLayerAndSubtree(true);
8707 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get()); 8546 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
8708 update_list = GetUpdateLayerList(); 8547 update_list = GetUpdateLayerList();
8548 EXPECT_TRUE(child->is_hidden());
8549 EXPECT_TRUE(grandchild->is_hidden());
8550 EXPECT_FALSE(VerifyLayerInList(child, update_list));
8709 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list)); 8551 EXPECT_FALSE(VerifyLayerInList(grandchild, update_list));
8710 child->SetHideLayerAndSubtree(false); 8552 child->SetHideLayerAndSubtree(false);
8711 8553
8712 gfx::Transform zero_z_scale; 8554 gfx::Transform zero_z_scale;
8713 zero_z_scale.Scale3d(1, 1, 0); 8555 zero_z_scale.Scale3d(1, 1, 0);
8714 child->SetTransform(zero_z_scale); 8556 child->SetTransform(zero_z_scale);
8715 8557
8716 // Add a transform animation with a start delay. Now, even though |child| has 8558 // Add a transform animation with a start delay. Now, even though |child| has
8717 // a singular transform, the subtree should still get processed. 8559 // a singular transform, the subtree should still get processed.
8718 int animation_id = 0; 8560 int animation_id = 0;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
8812 gfx::Transform rotate_back_and_translate; 8654 gfx::Transform rotate_back_and_translate;
8813 rotate_back_and_translate.RotateAboutYAxis(180); 8655 rotate_back_and_translate.RotateAboutYAxis(180);
8814 rotate_back_and_translate.Translate(-10, 0); 8656 rotate_back_and_translate.Translate(-10, 0);
8815 8657
8816 child_ptr->test_properties()->transform = singular; 8658 child_ptr->test_properties()->transform = singular;
8817 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8659 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8818 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8660 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8819 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8661 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8820 child_ptr->test_properties()->transform = gfx::Transform(); 8662 child_ptr->test_properties()->transform = gfx::Transform();
8821 8663
8822 child_ptr->test_properties()->hide_layer_and_subtree = true;
8823 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8824 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8825 child_ptr->test_properties()->hide_layer_and_subtree = false;
8826
8827 child_ptr->test_properties()->opacity = 0.f; 8664 child_ptr->test_properties()->opacity = 0.f;
8828 host_impl.active_tree()->property_trees()->needs_rebuild = true; 8665 host_impl.active_tree()->property_trees()->needs_rebuild = true;
8829 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr); 8666 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root_ptr);
8830 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); 8667 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect());
8831 child_ptr->test_properties()->opacity = 1.f; 8668 child_ptr->test_properties()->opacity = 1.f;
8832 8669
8833 root_ptr->test_properties()->transform = singular; 8670 root_ptr->test_properties()->transform = singular;
8834 // Force transform tree to have a node for child, so that ancestor's 8671 // Force transform tree to have a node for child, so that ancestor's
8835 // invertible transform can be tested. 8672 // invertible transform can be tested.
8836 child_ptr->test_properties()->transform = rotate; 8673 child_ptr->test_properties()->transform = rotate;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
9011 LayerImpl* child = AddChild<LayerImpl>(root); 8848 LayerImpl* child = AddChild<LayerImpl>(root);
9012 8849
9013 root->SetBounds(gfx::Size(100, 100)); 8850 root->SetBounds(gfx::Size(100, 100));
9014 child->SetBounds(gfx::Size(10, 10)); 8851 child->SetBounds(gfx::Size(10, 10));
9015 child->SetDrawsContent(true); 8852 child->SetDrawsContent(true);
9016 8853
9017 ExecuteCalculateDrawProperties(root); 8854 ExecuteCalculateDrawProperties(root);
9018 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 8855 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
9019 child->set_visible_layer_rect(gfx::Rect()); 8856 child->set_visible_layer_rect(gfx::Rect());
9020 8857
9021 child->test_properties()->hide_layer_and_subtree = true;
9022 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9023 ExecuteCalculateDrawProperties(root);
9024 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9025 child->test_properties()->hide_layer_and_subtree = false;
9026
9027 child->SetBounds(gfx::Size()); 8858 child->SetBounds(gfx::Size());
9028 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 8859 root->layer_tree_impl()->property_trees()->needs_rebuild = true;
9029 ExecuteCalculateDrawProperties(root); 8860 ExecuteCalculateDrawProperties(root);
9030 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect()); 8861 EXPECT_EQ(gfx::Rect(0, 0), child->visible_layer_rect());
9031 child->SetBounds(gfx::Size(10, 10)); 8862 child->SetBounds(gfx::Size(10, 10));
9032 8863
9033 gfx::Transform rotate; 8864 gfx::Transform rotate;
9034 child->test_properties()->double_sided = false; 8865 child->test_properties()->double_sided = false;
9035 rotate.RotateAboutXAxis(180.f); 8866 rotate.RotateAboutXAxis(180.f);
9036 child->test_properties()->transform = rotate; 8867 child->test_properties()->transform = rotate;
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
9543 test_layer->SetDrawsContent(true); 9374 test_layer->SetDrawsContent(true);
9544 ExecuteCalculateDrawProperties(root); 9375 ExecuteCalculateDrawProperties(root);
9545 9376
9546 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect()); 9377 EXPECT_EQ(gfx::Rect(30, 30), root->clip_rect());
9547 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect()); 9378 EXPECT_EQ(gfx::Rect(50, 50), render_surface->clip_rect());
9548 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect()); 9379 EXPECT_EQ(gfx::Rect(50, 50), test_layer->clip_rect());
9549 } 9380 }
9550 9381
9551 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) { 9382 TEST_F(LayerTreeHostCommonTest, SubtreeIsHiddenTest) {
9552 // Tests that subtree is hidden is updated. 9383 // Tests that subtree is hidden is updated.
9553 LayerImpl* root = root_layer_for_testing(); 9384 scoped_refptr<Layer> root = Layer::Create();
9554 LayerImpl* hidden = AddChild<LayerImpl>(root); 9385 scoped_refptr<Layer> hidden = Layer::Create();
9555 LayerImpl* test = AddChild<LayerImpl>(hidden); 9386 scoped_refptr<Layer> test = Layer::Create();
9556 9387
9557 root->SetBounds(gfx::Size(30, 30)); 9388 root->SetBounds(gfx::Size(30, 30));
9558 hidden->SetBounds(gfx::Size(30, 30)); 9389 hidden->SetBounds(gfx::Size(30, 30));
9559 hidden->test_properties()->force_render_surface = true; 9390 hidden->SetHideLayerAndSubtree(true);
9560 hidden->test_properties()->hide_layer_and_subtree = true;
9561 test->SetBounds(gfx::Size(30, 30)); 9391 test->SetBounds(gfx::Size(30, 30));
9562 test->test_properties()->force_render_surface = true;
9563 9392
9564 ExecuteCalculateDrawProperties(root); 9393 root->AddChild(hidden);
9565 EXPECT_EQ(0.f, 9394 hidden->AddChild(test);
9566 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9395 host()->SetRootLayer(root);
9567 9396
9568 hidden->test_properties()->hide_layer_and_subtree = false; 9397 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9569 root->layer_tree_impl()->property_trees()->needs_rebuild = true; 9398 EXPECT_TRUE(test->is_hidden());
9570 ExecuteCalculateDrawProperties(root); 9399 // Hidden layers should have invalid property tree indices.
9571 EXPECT_EQ(1.f, 9400 const int kInvalidNodeId = -1;
9572 GetRenderSurface(test)->OwningEffectNode()->screen_space_opacity); 9401 EXPECT_EQ(test->effect_tree_index(), kInvalidNodeId);
9402 EXPECT_EQ(test->scroll_tree_index(), kInvalidNodeId);
9403 EXPECT_EQ(test->clip_tree_index(), kInvalidNodeId);
9404 EXPECT_EQ(test->transform_tree_index(), kInvalidNodeId);
9405
9406 hidden->SetHideLayerAndSubtree(false);
9407 root->layer_tree_host()->property_trees()->needs_rebuild = true;
9408 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root.get());
9409 EXPECT_FALSE(test->is_hidden());
9410 EXPECT_NE(test->effect_tree_index(), kInvalidNodeId);
9411 EXPECT_NE(test->scroll_tree_index(), kInvalidNodeId);
9412 EXPECT_NE(test->clip_tree_index(), kInvalidNodeId);
9413 EXPECT_NE(test->transform_tree_index(), kInvalidNodeId);
9573 } 9414 }
9574 9415
9575 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) { 9416 TEST_F(LayerTreeHostCommonTest, TwoUnclippedRenderSurfaces) {
9576 LayerImpl* root = root_layer_for_testing(); 9417 LayerImpl* root = root_layer_for_testing();
9577 LayerImpl* clip_layer = AddChild<LayerImpl>(root); 9418 LayerImpl* clip_layer = AddChild<LayerImpl>(root);
9578 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer); 9419 LayerImpl* render_surface1 = AddChild<LayerImpl>(clip_layer);
9579 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1); 9420 LayerImpl* render_surface2 = AddChild<LayerImpl>(render_surface1);
9580 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2); 9421 LayerImpl* clip_child = AddChild<LayerImpl>(render_surface2);
9581 9422
9582 root->SetBounds(gfx::Size(30, 30)); 9423 root->SetBounds(gfx::Size(30, 30));
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
10155 9996
10156 // Check child layer draw properties. 9997 // Check child layer draw properties.
10157 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect()); 9998 EXPECT_EQ(gfx::Rect(10, 10), child->visible_layer_rect());
10158 EXPECT_EQ(gfx::Transform(), child->DrawTransform()); 9999 EXPECT_EQ(gfx::Transform(), child->DrawTransform());
10159 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect()); 10000 EXPECT_EQ(gfx::Rect(10, 10), child->clip_rect());
10160 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect()); 10001 EXPECT_EQ(gfx::Rect(10, 10), child->drawable_content_rect());
10161 } 10002 }
10162 10003
10163 } // namespace 10004 } // namespace
10164 } // namespace cc 10005 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698