OLD | NEW |
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 #include "ui/gfx/transform.h" | 57 #include "ui/gfx/transform.h" |
58 | 58 |
59 namespace cc { | 59 namespace cc { |
60 namespace { | 60 namespace { |
61 | 61 |
62 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings { | 62 class VerifyTreeCalcsLayerTreeSettings : public LayerTreeSettings { |
63 public: | 63 public: |
64 VerifyTreeCalcsLayerTreeSettings() { | 64 VerifyTreeCalcsLayerTreeSettings() { |
65 verify_transform_tree_calculations = true; | 65 verify_transform_tree_calculations = true; |
66 verify_clip_tree_calculations = true; | 66 verify_clip_tree_calculations = true; |
| 67 verify_visible_rect_calculations = true; |
67 } | 68 } |
68 }; | 69 }; |
69 | 70 |
70 class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest { | 71 class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest { |
71 public: | 72 public: |
72 LayerTreeHostCommonTestBase() | 73 LayerTreeHostCommonTestBase() |
73 : LayerTestCommon::LayerImplTest(VerifyTreeCalcsLayerTreeSettings()) {} | 74 : LayerTestCommon::LayerImplTest(VerifyTreeCalcsLayerTreeSettings()) {} |
74 explicit LayerTreeHostCommonTestBase(const LayerTreeSettings& settings) | 75 explicit LayerTreeHostCommonTestBase(const LayerTreeSettings& settings) |
75 : LayerTestCommon::LayerImplTest(settings) {} | 76 : LayerTestCommon::LayerImplTest(settings) {} |
76 | 77 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 // empty. | 115 // empty. |
115 DCHECK(!root_layer->bounds().IsEmpty()); | 116 DCHECK(!root_layer->bounds().IsEmpty()); |
116 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( | 117 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( |
117 root_layer, device_viewport_size); | 118 root_layer, device_viewport_size); |
118 inputs.device_scale_factor = device_scale_factor; | 119 inputs.device_scale_factor = device_scale_factor; |
119 inputs.page_scale_factor = page_scale_factor; | 120 inputs.page_scale_factor = page_scale_factor; |
120 inputs.page_scale_layer = page_scale_layer; | 121 inputs.page_scale_layer = page_scale_layer; |
121 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); | 122 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
122 } | 123 } |
123 | 124 |
124 void ExecuteCalculateDrawProperties(LayerImpl* root_layer, | 125 void ExecuteCalculateDrawProperties( |
125 float device_scale_factor, | 126 LayerImpl* root_layer, |
126 float page_scale_factor, | 127 float device_scale_factor, |
127 LayerImpl* page_scale_layer) { | 128 float page_scale_factor, |
| 129 LayerImpl* page_scale_layer, |
| 130 bool skip_verify_visible_rect_calculations = false) { |
128 if (device_scale_factor != | 131 if (device_scale_factor != |
129 root_layer->layer_tree_impl()->device_scale_factor()) | 132 root_layer->layer_tree_impl()->device_scale_factor()) |
130 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; | 133 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; |
131 | 134 |
132 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); | 135 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); |
133 | 136 |
134 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); | 137 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); |
135 | 138 |
136 gfx::Size device_viewport_size = | 139 gfx::Size device_viewport_size = |
137 gfx::Size(root_layer->bounds().width() * device_scale_factor, | 140 gfx::Size(root_layer->bounds().width() * device_scale_factor, |
138 root_layer->bounds().height() * device_scale_factor); | 141 root_layer->bounds().height() * device_scale_factor); |
139 | 142 |
140 render_surface_layer_list_impl_.reset(new LayerImplList); | 143 render_surface_layer_list_impl_.reset(new LayerImplList); |
141 | 144 |
142 // We are probably not testing what is intended if the root_layer bounds are | 145 // We are probably not testing what is intended if the root_layer bounds are |
143 // empty. | 146 // empty. |
144 DCHECK(!root_layer->bounds().IsEmpty()); | 147 DCHECK(!root_layer->bounds().IsEmpty()); |
145 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( | 148 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
146 root_layer, device_viewport_size, | 149 root_layer, device_viewport_size, |
147 render_surface_layer_list_impl_.get()); | 150 render_surface_layer_list_impl_.get()); |
148 inputs.device_scale_factor = device_scale_factor; | 151 inputs.device_scale_factor = device_scale_factor; |
149 inputs.page_scale_factor = page_scale_factor; | 152 inputs.page_scale_factor = page_scale_factor; |
150 inputs.page_scale_layer = page_scale_layer; | 153 inputs.page_scale_layer = page_scale_layer; |
151 inputs.can_adjust_raster_scales = true; | 154 inputs.can_adjust_raster_scales = true; |
| 155 if (skip_verify_visible_rect_calculations) |
| 156 inputs.verify_visible_rect_calculations = false; |
152 | 157 |
153 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); | 158 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); |
154 } | 159 } |
155 | 160 |
156 template <class LayerType> | 161 template <class LayerType> |
157 void ExecuteCalculateDrawProperties(LayerType* root_layer) { | 162 void ExecuteCalculateDrawProperties(LayerType* root_layer) { |
158 LayerType* page_scale_application_layer = nullptr; | 163 LayerType* page_scale_application_layer = nullptr; |
159 ExecuteCalculateDrawProperties(root_layer, 1.f, 1.f, | 164 ExecuteCalculateDrawProperties(root_layer, 1.f, 1.f, |
160 page_scale_application_layer); | 165 page_scale_application_layer); |
161 } | 166 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 gfx::Vector2dF elastic_overscroll = | 227 gfx::Vector2dF elastic_overscroll = |
223 root_layer->layer_tree_impl()->elastic_overscroll()->Current( | 228 root_layer->layer_tree_impl()->elastic_overscroll()->Current( |
224 root_layer->layer_tree_impl()->IsActiveTree()); | 229 root_layer->layer_tree_impl()->IsActiveTree()); |
225 float page_scale_factor = 1.f; | 230 float page_scale_factor = 1.f; |
226 float device_scale_factor = 1.f; | 231 float device_scale_factor = 1.f; |
227 gfx::Size device_viewport_size = | 232 gfx::Size device_viewport_size = |
228 gfx::Size(root_layer->bounds().width() * device_scale_factor, | 233 gfx::Size(root_layer->bounds().width() * device_scale_factor, |
229 root_layer->bounds().height() * device_scale_factor); | 234 root_layer->bounds().height() * device_scale_factor); |
230 update_layer_list_impl_.reset(new LayerImplList); | 235 update_layer_list_impl_.reset(new LayerImplList); |
231 root_layer->layer_tree_impl()->BuildLayerListForTesting(); | 236 root_layer->layer_tree_impl()->BuildLayerListForTesting(); |
| 237 bool verify_visible_rect_calculations = true; |
232 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( | 238 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( |
233 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 239 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
234 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 240 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
235 elastic_overscroll, page_scale_factor, device_scale_factor, | 241 elastic_overscroll, page_scale_factor, device_scale_factor, |
236 gfx::Rect(device_viewport_size), gfx::Transform(), | 242 gfx::Rect(device_viewport_size), gfx::Transform(), |
237 can_render_to_separate_surface, | 243 can_render_to_separate_surface, verify_visible_rect_calculations, |
238 root_layer->layer_tree_impl()->property_trees(), | 244 root_layer->layer_tree_impl()->property_trees(), |
239 update_layer_list_impl_.get()); | 245 update_layer_list_impl_.get()); |
240 } | 246 } |
241 | 247 |
242 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces( | 248 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces( |
243 LayerImpl* root_layer) { | 249 LayerImpl* root_layer) { |
244 gfx::Size device_viewport_size = | 250 gfx::Size device_viewport_size = |
245 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height()); | 251 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height()); |
246 render_surface_layer_list_impl_.reset(new LayerImplList); | 252 render_surface_layer_list_impl_.reset(new LayerImplList); |
247 | 253 |
(...skipping 8544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8792 significant_transform->SetBounds(gfx::Size(30, 30)); | 8798 significant_transform->SetBounds(gfx::Size(30, 30)); |
8793 layer_clips_subtree->SetBounds(gfx::Size(30, 30)); | 8799 layer_clips_subtree->SetBounds(gfx::Size(30, 30)); |
8794 layer_clips_subtree->SetMasksToBounds(true); | 8800 layer_clips_subtree->SetMasksToBounds(true); |
8795 layer_clips_subtree->test_properties()->force_render_surface = true; | 8801 layer_clips_subtree->test_properties()->force_render_surface = true; |
8796 render_surface->test_properties()->transform = transform2; | 8802 render_surface->test_properties()->transform = transform2; |
8797 render_surface->SetBounds(gfx::Size(30, 30)); | 8803 render_surface->SetBounds(gfx::Size(30, 30)); |
8798 render_surface->test_properties()->force_render_surface = true; | 8804 render_surface->test_properties()->force_render_surface = true; |
8799 test_layer->SetBounds(gfx::Size(30, 30)); | 8805 test_layer->SetBounds(gfx::Size(30, 30)); |
8800 test_layer->SetDrawsContent(true); | 8806 test_layer->SetDrawsContent(true); |
8801 | 8807 |
8802 ExecuteCalculateDrawProperties(root); | 8808 float device_scale_factor = 1.f; |
| 8809 float page_scale_factor = 1.f; |
| 8810 LayerImpl* page_scale_layer = nullptr; |
| 8811 // Visible rects computed by combining clips in target space and root space |
| 8812 // don't match because of rotation transforms. So, we skip |
| 8813 // verify_visible_rect_calculations. |
| 8814 bool skip_verify_visible_rect_calculations = true; |
| 8815 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor, |
| 8816 page_scale_layer, |
| 8817 skip_verify_visible_rect_calculations); |
8803 | 8818 |
8804 TransformTree& transform_tree = | 8819 TransformTree& transform_tree = |
8805 root->layer_tree_impl()->property_trees()->transform_tree; | 8820 root->layer_tree_impl()->property_trees()->transform_tree; |
8806 TransformNode* transform_node = | 8821 TransformNode* transform_node = |
8807 transform_tree.Node(significant_transform->transform_tree_index()); | 8822 transform_tree.Node(significant_transform->transform_tree_index()); |
8808 EXPECT_EQ(transform_node->owner_id, significant_transform->id()); | 8823 EXPECT_EQ(transform_node->owner_id, significant_transform->id()); |
8809 | 8824 |
8810 EXPECT_TRUE(root->has_render_surface()); | 8825 EXPECT_TRUE(root->has_render_surface()); |
8811 EXPECT_FALSE(significant_transform->has_render_surface()); | 8826 EXPECT_FALSE(significant_transform->has_render_surface()); |
8812 EXPECT_TRUE(layer_clips_subtree->has_render_surface()); | 8827 EXPECT_TRUE(layer_clips_subtree->has_render_surface()); |
8813 EXPECT_TRUE(render_surface->has_render_surface()); | 8828 EXPECT_TRUE(render_surface->has_render_surface()); |
8814 EXPECT_FALSE(test_layer->has_render_surface()); | 8829 EXPECT_FALSE(test_layer->has_render_surface()); |
8815 | 8830 |
8816 ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree; | 8831 ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree; |
8817 ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index()); | 8832 ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index()); |
8818 EXPECT_FALSE(clip_node->applies_local_clip); | 8833 EXPECT_FALSE(clip_node->applies_local_clip); |
8819 EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect()); | 8834 EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect()); |
| 8835 |
| 8836 // Also test the visible rects computed by combining clips in root space. |
| 8837 gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic( |
| 8838 root->layer_tree_impl()->property_trees(), test_layer); |
| 8839 EXPECT_EQ(gfx::Rect(30, 20), visible_rect); |
8820 } | 8840 } |
8821 | 8841 |
8822 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) { | 8842 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) { |
8823 // Ensure that when parent clip node's transform is an ancestor of current | 8843 // Ensure that when parent clip node's transform is an ancestor of current |
8824 // clip node's target, clip is 'projected' from parent space to current | 8844 // clip node's target, clip is 'projected' from parent space to current |
8825 // target space and visible rects are calculated correctly. | 8845 // target space and visible rects are calculated correctly. |
8826 LayerImpl* root = root_layer_for_testing(); | 8846 LayerImpl* root = root_layer_for_testing(); |
8827 LayerImpl* clip_layer = AddChild<LayerImpl>(root); | 8847 LayerImpl* clip_layer = AddChild<LayerImpl>(root); |
8828 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer); | 8848 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer); |
8829 LayerImpl* test_layer = AddChild<LayerImpl>(target_layer); | 8849 LayerImpl* test_layer = AddChild<LayerImpl>(target_layer); |
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9820 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 9840 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
9821 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 9841 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
9822 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 9842 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
9823 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 9843 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
9824 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 9844 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
9825 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 9845 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
9826 } | 9846 } |
9827 | 9847 |
9828 } // namespace | 9848 } // namespace |
9829 } // namespace cc | 9849 } // namespace cc |
OLD | NEW |