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

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
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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698