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