Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: cc/trees/layer_tree_host_common_unittest.cc

Issue 2334003003: cc : Compute visible rects dynamically (1) (Closed)
Patch Set: comment Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_common_perftest.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_common_perftest.cc ('k') | cc/trees/layer_tree_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698