| 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 |