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