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