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