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

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

Issue 2334003003: cc : Compute visible rects dynamically (1) (Closed)
Patch Set: fix compile error 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // empty. 115 // empty.
115 DCHECK(!root_layer->bounds().IsEmpty()); 116 DCHECK(!root_layer->bounds().IsEmpty());
116 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 117 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
117 root_layer, device_viewport_size); 118 root_layer, device_viewport_size);
118 inputs.device_scale_factor = device_scale_factor; 119 inputs.device_scale_factor = device_scale_factor;
119 inputs.page_scale_factor = page_scale_factor; 120 inputs.page_scale_factor = page_scale_factor;
120 inputs.page_scale_layer = page_scale_layer; 121 inputs.page_scale_layer = page_scale_layer;
121 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 122 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
122 } 123 }
123 124
124 void ExecuteCalculateDrawProperties(LayerImpl* root_layer, 125 void ExecuteCalculateDrawProperties(
125 float device_scale_factor, 126 LayerImpl* root_layer,
126 float page_scale_factor, 127 float device_scale_factor,
127 LayerImpl* page_scale_layer) { 128 float page_scale_factor,
129 LayerImpl* page_scale_layer,
130 bool skip_verify_visible_rect_calculations = false) {
128 if (device_scale_factor != 131 if (device_scale_factor !=
129 root_layer->layer_tree_impl()->device_scale_factor()) 132 root_layer->layer_tree_impl()->device_scale_factor())
130 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; 133 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true;
131 134
132 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); 135 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor);
133 136
134 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); 137 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
135 138
136 gfx::Size device_viewport_size = 139 gfx::Size device_viewport_size =
137 gfx::Size(root_layer->bounds().width() * device_scale_factor, 140 gfx::Size(root_layer->bounds().width() * device_scale_factor,
138 root_layer->bounds().height() * device_scale_factor); 141 root_layer->bounds().height() * device_scale_factor);
139 142
140 render_surface_layer_list_impl_.reset(new LayerImplList); 143 render_surface_layer_list_impl_.reset(new LayerImplList);
141 144
142 // We are probably not testing what is intended if the root_layer bounds are 145 // We are probably not testing what is intended if the root_layer bounds are
143 // empty. 146 // empty.
144 DCHECK(!root_layer->bounds().IsEmpty()); 147 DCHECK(!root_layer->bounds().IsEmpty());
145 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 148 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
146 root_layer, device_viewport_size, 149 root_layer, device_viewport_size,
147 render_surface_layer_list_impl_.get()); 150 render_surface_layer_list_impl_.get());
148 inputs.device_scale_factor = device_scale_factor; 151 inputs.device_scale_factor = device_scale_factor;
149 inputs.page_scale_factor = page_scale_factor; 152 inputs.page_scale_factor = page_scale_factor;
150 inputs.page_scale_layer = page_scale_layer; 153 inputs.page_scale_layer = page_scale_layer;
151 inputs.can_adjust_raster_scales = true; 154 inputs.can_adjust_raster_scales = true;
155 if (skip_verify_visible_rect_calculations)
156 inputs.verify_visible_rect_calculations = false;
152 157
153 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 158 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
154 } 159 }
155 160
156 template <class LayerType> 161 template <class LayerType>
157 void ExecuteCalculateDrawProperties(LayerType* root_layer) { 162 void ExecuteCalculateDrawProperties(LayerType* root_layer) {
158 LayerType* page_scale_application_layer = nullptr; 163 LayerType* page_scale_application_layer = nullptr;
159 ExecuteCalculateDrawProperties(root_layer, 1.f, 1.f, 164 ExecuteCalculateDrawProperties(root_layer, 1.f, 1.f,
160 page_scale_application_layer); 165 page_scale_application_layer);
161 } 166 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 gfx::Vector2dF elastic_overscroll = 227 gfx::Vector2dF elastic_overscroll =
223 root_layer->layer_tree_impl()->elastic_overscroll()->Current( 228 root_layer->layer_tree_impl()->elastic_overscroll()->Current(
224 root_layer->layer_tree_impl()->IsActiveTree()); 229 root_layer->layer_tree_impl()->IsActiveTree());
225 float page_scale_factor = 1.f; 230 float page_scale_factor = 1.f;
226 float device_scale_factor = 1.f; 231 float device_scale_factor = 1.f;
227 gfx::Size device_viewport_size = 232 gfx::Size device_viewport_size =
228 gfx::Size(root_layer->bounds().width() * device_scale_factor, 233 gfx::Size(root_layer->bounds().width() * device_scale_factor,
229 root_layer->bounds().height() * device_scale_factor); 234 root_layer->bounds().height() * device_scale_factor);
230 update_layer_list_impl_.reset(new LayerImplList); 235 update_layer_list_impl_.reset(new LayerImplList);
231 root_layer->layer_tree_impl()->BuildLayerListForTesting(); 236 root_layer->layer_tree_impl()->BuildLayerListForTesting();
237 bool verify_visible_rect_calculations = true;
232 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( 238 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects(
233 root_layer, page_scale_layer, inner_viewport_scroll_layer, 239 root_layer, page_scale_layer, inner_viewport_scroll_layer,
234 outer_viewport_scroll_layer, overscroll_elasticity_layer, 240 outer_viewport_scroll_layer, overscroll_elasticity_layer,
235 elastic_overscroll, page_scale_factor, device_scale_factor, 241 elastic_overscroll, page_scale_factor, device_scale_factor,
236 gfx::Rect(device_viewport_size), gfx::Transform(), 242 gfx::Rect(device_viewport_size), gfx::Transform(),
237 can_render_to_separate_surface, 243 can_render_to_separate_surface, verify_visible_rect_calculations,
238 root_layer->layer_tree_impl()->property_trees(), 244 root_layer->layer_tree_impl()->property_trees(),
239 update_layer_list_impl_.get()); 245 update_layer_list_impl_.get());
240 } 246 }
241 247
242 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces( 248 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces(
243 LayerImpl* root_layer) { 249 LayerImpl* root_layer) {
244 gfx::Size device_viewport_size = 250 gfx::Size device_viewport_size =
245 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height()); 251 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height());
246 render_surface_layer_list_impl_.reset(new LayerImplList); 252 render_surface_layer_list_impl_.reset(new LayerImplList);
247 253
(...skipping 8544 matching lines...) Expand 10 before | Expand all | Expand 10 after
8792 significant_transform->SetBounds(gfx::Size(30, 30)); 8798 significant_transform->SetBounds(gfx::Size(30, 30));
8793 layer_clips_subtree->SetBounds(gfx::Size(30, 30)); 8799 layer_clips_subtree->SetBounds(gfx::Size(30, 30));
8794 layer_clips_subtree->SetMasksToBounds(true); 8800 layer_clips_subtree->SetMasksToBounds(true);
8795 layer_clips_subtree->test_properties()->force_render_surface = true; 8801 layer_clips_subtree->test_properties()->force_render_surface = true;
8796 render_surface->test_properties()->transform = transform2; 8802 render_surface->test_properties()->transform = transform2;
8797 render_surface->SetBounds(gfx::Size(30, 30)); 8803 render_surface->SetBounds(gfx::Size(30, 30));
8798 render_surface->test_properties()->force_render_surface = true; 8804 render_surface->test_properties()->force_render_surface = true;
8799 test_layer->SetBounds(gfx::Size(30, 30)); 8805 test_layer->SetBounds(gfx::Size(30, 30));
8800 test_layer->SetDrawsContent(true); 8806 test_layer->SetDrawsContent(true);
8801 8807
8802 ExecuteCalculateDrawProperties(root); 8808 float device_scale_factor = 1.f;
8809 float page_scale_factor = 1.f;
8810 LayerImpl* page_scale_layer = nullptr;
8811 // Visible rects computed by combining clips in target space and root space
8812 // don't match because of rotation transforms. So, we skip
8813 // verify_visible_rect_calculations.
8814 bool skip_verify_visible_rect_calculations = true;
8815 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor,
8816 page_scale_layer,
8817 skip_verify_visible_rect_calculations);
8803 8818
8804 TransformTree& transform_tree = 8819 TransformTree& transform_tree =
8805 root->layer_tree_impl()->property_trees()->transform_tree; 8820 root->layer_tree_impl()->property_trees()->transform_tree;
8806 TransformNode* transform_node = 8821 TransformNode* transform_node =
8807 transform_tree.Node(significant_transform->transform_tree_index()); 8822 transform_tree.Node(significant_transform->transform_tree_index());
8808 EXPECT_EQ(transform_node->owner_id, significant_transform->id()); 8823 EXPECT_EQ(transform_node->owner_id, significant_transform->id());
8809 8824
8810 EXPECT_TRUE(root->has_render_surface()); 8825 EXPECT_TRUE(root->has_render_surface());
8811 EXPECT_FALSE(significant_transform->has_render_surface()); 8826 EXPECT_FALSE(significant_transform->has_render_surface());
8812 EXPECT_TRUE(layer_clips_subtree->has_render_surface()); 8827 EXPECT_TRUE(layer_clips_subtree->has_render_surface());
8813 EXPECT_TRUE(render_surface->has_render_surface()); 8828 EXPECT_TRUE(render_surface->has_render_surface());
8814 EXPECT_FALSE(test_layer->has_render_surface()); 8829 EXPECT_FALSE(test_layer->has_render_surface());
8815 8830
8816 ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree; 8831 ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree;
8817 ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index()); 8832 ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index());
8818 EXPECT_FALSE(clip_node->applies_local_clip); 8833 EXPECT_FALSE(clip_node->applies_local_clip);
8819 EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect()); 8834 EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect());
8835
8836 // Also test the visible rects computed by combining clips in root space.
8837 gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic(
8838 root->layer_tree_impl()->property_trees(), test_layer);
8839 EXPECT_EQ(gfx::Rect(30, 20), visible_rect);
8820 } 8840 }
8821 8841
8822 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) { 8842 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) {
8823 // Ensure that when parent clip node's transform is an ancestor of current 8843 // 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 8844 // clip node's target, clip is 'projected' from parent space to current
8825 // target space and visible rects are calculated correctly. 8845 // target space and visible rects are calculated correctly.
8826 LayerImpl* root = root_layer_for_testing(); 8846 LayerImpl* root = root_layer_for_testing();
8827 LayerImpl* clip_layer = AddChild<LayerImpl>(root); 8847 LayerImpl* clip_layer = AddChild<LayerImpl>(root);
8828 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer); 8848 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer);
8829 LayerImpl* test_layer = AddChild<LayerImpl>(target_layer); 8849 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()); 9840 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
9821 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 9841 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
9822 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 9842 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
9823 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 9843 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
9824 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 9844 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
9825 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 9845 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
9826 } 9846 }
9827 9847
9828 } // namespace 9848 } // namespace
9829 } // namespace cc 9849 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698