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

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

Issue 2655233006: cc : Clean up cc clip tree (Closed)
Patch Set: blink_tests Created 3 years, 9 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "ui/gfx/geometry/quad_f.h" 55 #include "ui/gfx/geometry/quad_f.h"
56 #include "ui/gfx/geometry/vector2d_conversions.h" 56 #include "ui/gfx/geometry/vector2d_conversions.h"
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_clip_tree_calculations = true;
66 } 65 }
67 }; 66 };
68 67
69 class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest { 68 class LayerTreeHostCommonTestBase : public LayerTestCommon::LayerImplTest {
70 public: 69 public:
71 LayerTreeHostCommonTestBase() 70 LayerTreeHostCommonTestBase()
72 : LayerTestCommon::LayerImplTest(VerifyTreeCalcsLayerTreeSettings()) {} 71 : LayerTestCommon::LayerImplTest(VerifyTreeCalcsLayerTreeSettings()) {}
73 explicit LayerTreeHostCommonTestBase(const LayerTreeSettings& settings) 72 explicit LayerTreeHostCommonTestBase(const LayerTreeSettings& settings)
74 : LayerTestCommon::LayerImplTest(settings) {} 73 : LayerTestCommon::LayerImplTest(settings) {}
75 74
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs( 116 LayerTreeHostCommon::CalcDrawPropsMainInputsForTesting inputs(
118 root_layer, device_viewport_size); 117 root_layer, device_viewport_size);
119 inputs.device_scale_factor = device_scale_factor; 118 inputs.device_scale_factor = device_scale_factor;
120 inputs.page_scale_factor = page_scale_factor; 119 inputs.page_scale_factor = page_scale_factor;
121 inputs.page_scale_layer = page_scale_layer; 120 inputs.page_scale_layer = page_scale_layer;
122 inputs.inner_viewport_scroll_layer = inner_viewport_scroll_layer; 121 inputs.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
123 inputs.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 122 inputs.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
124 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 123 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
125 } 124 }
126 125
127 void ExecuteCalculateDrawProperties( 126 void ExecuteCalculateDrawProperties(LayerImpl* root_layer,
128 LayerImpl* root_layer, 127 float device_scale_factor,
129 float device_scale_factor, 128 float page_scale_factor,
130 float page_scale_factor, 129 LayerImpl* page_scale_layer,
131 LayerImpl* page_scale_layer, 130 LayerImpl* inner_viewport_scroll_layer,
132 LayerImpl* inner_viewport_scroll_layer, 131 LayerImpl* outer_viewport_scroll_layer) {
133 LayerImpl* outer_viewport_scroll_layer,
134 bool skip_verify_visible_rect_calculations = false) {
135 if (device_scale_factor != 132 if (device_scale_factor !=
136 root_layer->layer_tree_impl()->device_scale_factor()) 133 root_layer->layer_tree_impl()->device_scale_factor())
137 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true; 134 root_layer->layer_tree_impl()->property_trees()->needs_rebuild = true;
138 135
139 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor); 136 root_layer->layer_tree_impl()->SetDeviceScaleFactor(device_scale_factor);
140 137
141 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f)); 138 EXPECT_TRUE(page_scale_layer || (page_scale_factor == 1.f));
142 139
143 gfx::Size device_viewport_size = 140 gfx::Size device_viewport_size =
144 gfx::Size(root_layer->bounds().width() * device_scale_factor, 141 gfx::Size(root_layer->bounds().width() * device_scale_factor,
145 root_layer->bounds().height() * device_scale_factor); 142 root_layer->bounds().height() * device_scale_factor);
146 143
147 render_surface_layer_list_impl_.reset(new LayerImplList); 144 render_surface_layer_list_impl_.reset(new LayerImplList);
148 145
149 // 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
150 // empty. 147 // empty.
151 DCHECK(!root_layer->bounds().IsEmpty()); 148 DCHECK(!root_layer->bounds().IsEmpty());
152 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 149 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
153 root_layer, device_viewport_size, 150 root_layer, device_viewport_size,
154 render_surface_layer_list_impl_.get()); 151 render_surface_layer_list_impl_.get());
155 inputs.device_scale_factor = device_scale_factor; 152 inputs.device_scale_factor = device_scale_factor;
156 inputs.page_scale_factor = page_scale_factor; 153 inputs.page_scale_factor = page_scale_factor;
157 inputs.page_scale_layer = page_scale_layer; 154 inputs.page_scale_layer = page_scale_layer;
158 inputs.inner_viewport_scroll_layer = inner_viewport_scroll_layer; 155 inputs.inner_viewport_scroll_layer = inner_viewport_scroll_layer;
159 inputs.outer_viewport_scroll_layer = outer_viewport_scroll_layer; 156 inputs.outer_viewport_scroll_layer = outer_viewport_scroll_layer;
160 inputs.can_adjust_raster_scales = true; 157 inputs.can_adjust_raster_scales = true;
161 if (skip_verify_visible_rect_calculations)
162 inputs.verify_visible_rect_calculations = false;
163 158
164 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs); 159 LayerTreeHostCommon::CalculateDrawPropertiesForTesting(&inputs);
165 } 160 }
166 161
167 template <class LayerType> 162 template <class LayerType>
168 void ExecuteCalculateDrawProperties(LayerType* root_layer) { 163 void ExecuteCalculateDrawProperties(LayerType* root_layer) {
169 LayerType* page_scale_application_layer = nullptr; 164 LayerType* page_scale_application_layer = nullptr;
170 LayerType* inner_viewport_scroll_layer = nullptr; 165 LayerType* inner_viewport_scroll_layer = nullptr;
171 LayerType* outer_viewport_scroll_layer = nullptr; 166 LayerType* outer_viewport_scroll_layer = nullptr;
172 ExecuteCalculateDrawProperties( 167 ExecuteCalculateDrawProperties(
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 outer_viewport_scroll_layer, overscroll_elasticity_layer, 211 outer_viewport_scroll_layer, overscroll_elasticity_layer,
217 elastic_overscroll, page_scale_factor, device_scale_factor, 212 elastic_overscroll, page_scale_factor, device_scale_factor,
218 gfx::Rect(device_viewport_size), gfx::Transform(), property_trees); 213 gfx::Rect(device_viewport_size), gfx::Transform(), property_trees);
219 draw_property_utils::UpdatePropertyTrees(property_trees, 214 draw_property_utils::UpdatePropertyTrees(property_trees,
220 can_render_to_separate_surface); 215 can_render_to_separate_surface);
221 draw_property_utils::FindLayersThatNeedUpdates( 216 draw_property_utils::FindLayersThatNeedUpdates(
222 root_layer->layer_tree_host(), property_trees, &update_layer_list_); 217 root_layer->layer_tree_host(), property_trees, &update_layer_list_);
223 } 218 }
224 219
225 void ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList( 220 void ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(
226 LayerImpl* root_layer, 221 LayerImpl* root_layer) {
227 bool skip_verify_visible_rect_calculations = false) {
228 DCHECK(root_layer->layer_tree_impl()); 222 DCHECK(root_layer->layer_tree_impl());
229 PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer); 223 PropertyTreeBuilder::PreCalculateMetaInformationForTesting(root_layer);
230 224
231 bool can_render_to_separate_surface = true; 225 bool can_render_to_separate_surface = true;
232 226
233 LayerImpl* page_scale_layer = nullptr; 227 const LayerImpl* page_scale_layer = nullptr;
234 LayerImpl* inner_viewport_scroll_layer = 228 LayerImpl* inner_viewport_scroll_layer =
235 root_layer->layer_tree_impl()->InnerViewportScrollLayer(); 229 root_layer->layer_tree_impl()->InnerViewportScrollLayer();
236 LayerImpl* outer_viewport_scroll_layer = 230 LayerImpl* outer_viewport_scroll_layer =
237 root_layer->layer_tree_impl()->OuterViewportScrollLayer(); 231 root_layer->layer_tree_impl()->OuterViewportScrollLayer();
238 LayerImpl* overscroll_elasticity_layer = 232 const LayerImpl* overscroll_elasticity_layer =
239 root_layer->layer_tree_impl()->OverscrollElasticityLayer(); 233 root_layer->layer_tree_impl()->OverscrollElasticityLayer();
240 gfx::Vector2dF elastic_overscroll = 234 gfx::Vector2dF elastic_overscroll =
241 root_layer->layer_tree_impl()->elastic_overscroll()->Current( 235 root_layer->layer_tree_impl()->elastic_overscroll()->Current(
242 root_layer->layer_tree_impl()->IsActiveTree()); 236 root_layer->layer_tree_impl()->IsActiveTree());
243 float page_scale_factor = 1.f; 237 float page_scale_factor = 1.f;
244 float device_scale_factor = 1.f; 238 float device_scale_factor = 1.f;
245 gfx::Size device_viewport_size = 239 gfx::Size device_viewport_size =
246 gfx::Size(root_layer->bounds().width() * device_scale_factor, 240 gfx::Size(root_layer->bounds().width() * device_scale_factor,
247 root_layer->bounds().height() * device_scale_factor); 241 root_layer->bounds().height() * device_scale_factor);
248 update_layer_list_impl_.reset(new LayerImplList); 242 update_layer_list_impl_.reset(new LayerImplList);
249 root_layer->layer_tree_impl()->BuildLayerListForTesting(); 243 root_layer->layer_tree_impl()->BuildLayerListForTesting();
250 PropertyTrees* property_trees = 244 PropertyTrees* property_trees =
251 root_layer->layer_tree_impl()->property_trees(); 245 root_layer->layer_tree_impl()->property_trees();
252 draw_property_utils::BuildPropertyTreesAndComputeVisibleRects( 246 PropertyTreeBuilder::BuildPropertyTrees(
253 root_layer, page_scale_layer, inner_viewport_scroll_layer, 247 root_layer, page_scale_layer, inner_viewport_scroll_layer,
254 outer_viewport_scroll_layer, overscroll_elasticity_layer, 248 outer_viewport_scroll_layer, overscroll_elasticity_layer,
255 elastic_overscroll, page_scale_factor, device_scale_factor, 249 elastic_overscroll, page_scale_factor, device_scale_factor,
256 gfx::Rect(device_viewport_size), gfx::Transform(), 250 gfx::Rect(device_viewport_size), gfx::Transform(), property_trees);
257 can_render_to_separate_surface, property_trees, 251 draw_property_utils::UpdatePropertyTreesAndRenderSurfaces(
252 root_layer, property_trees, can_render_to_separate_surface);
253 draw_property_utils::FindLayersThatNeedUpdates(
254 root_layer->layer_tree_impl(), property_trees,
258 update_layer_list_impl_.get()); 255 update_layer_list_impl_.get());
259 draw_property_utils::VerifyClipTreeCalculations(*update_layer_list_impl_, 256 for (auto* layer : *update_layer_list_impl())
260 property_trees); 257 draw_property_utils::ComputeLayerDrawProperties(layer, property_trees);
261 if (!skip_verify_visible_rect_calculations)
262 draw_property_utils::VerifyVisibleRectsCalculations(
263 *update_layer_list_impl_, property_trees);
264 } 258 }
265 259
266 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces( 260 void ExecuteCalculateDrawPropertiesWithoutSeparateSurfaces(
267 LayerImpl* root_layer) { 261 LayerImpl* root_layer) {
268 gfx::Size device_viewport_size = 262 gfx::Size device_viewport_size =
269 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height()); 263 gfx::Size(root_layer->bounds().width(), root_layer->bounds().height());
270 render_surface_layer_list_impl_.reset(new LayerImplList); 264 render_surface_layer_list_impl_.reset(new LayerImplList);
271 265
272 DCHECK(!root_layer->bounds().IsEmpty()); 266 DCHECK(!root_layer->bounds().IsEmpty());
273 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( 267 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
(...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 child->SetBounds(gfx::Size(10, 10)); 1112 child->SetBounds(gfx::Size(10, 10));
1119 grand_child->test_properties()->transform = grand_child_transform; 1113 grand_child->test_properties()->transform = grand_child_transform;
1120 grand_child->SetBounds(gfx::Size(100, 100)); 1114 grand_child->SetBounds(gfx::Size(100, 100));
1121 grand_child->test_properties()->should_flatten_transform = false; 1115 grand_child->test_properties()->should_flatten_transform = false;
1122 grand_child->SetDrawsContent(true); 1116 grand_child->SetDrawsContent(true);
1123 float device_scale_factor = 1.f; 1117 float device_scale_factor = 1.f;
1124 float page_scale_factor = 1.f; 1118 float page_scale_factor = 1.f;
1125 LayerImpl* page_scale_layer = nullptr; 1119 LayerImpl* page_scale_layer = nullptr;
1126 LayerImpl* inner_viewport_scroll_layer = nullptr; 1120 LayerImpl* inner_viewport_scroll_layer = nullptr;
1127 LayerImpl* outer_viewport_scroll_layer = nullptr; 1121 LayerImpl* outer_viewport_scroll_layer = nullptr;
1128 // Visible rects computed by combining clips in target space and root space
1129 // don't match because of rotation transforms. So, we skip
1130 // verify_visible_rect_calculations.
1131 bool skip_verify_visible_rect_calculations = true;
1132 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor, 1122 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor,
1133 page_scale_layer, inner_viewport_scroll_layer, 1123 page_scale_layer, inner_viewport_scroll_layer,
1134 outer_viewport_scroll_layer, 1124 outer_viewport_scroll_layer);
1135 skip_verify_visible_rect_calculations);
1136 1125
1137 // Mapping grand_child's bounds to target space produces a non-empty rect 1126 // Mapping grand_child's bounds to screen space produces an empty rect so
1138 // that is fully contained within the target's bounds, so grand_child should 1127 // grand_child should be hidden.
1139 // be considered fully visible. 1128 EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect());
1140 EXPECT_EQ(gfx::Rect(grand_child->bounds()),
1141 grand_child->visible_layer_rect());
1142 } 1129 }
1143 1130
1144 TEST_F(LayerTreeHostCommonTest, TransformsForDegenerateIntermediateLayer) { 1131 TEST_F(LayerTreeHostCommonTest, TransformsForDegenerateIntermediateLayer) {
1145 // A layer that is empty in one axis, but not the other, was accidentally 1132 // A layer that is empty in one axis, but not the other, was accidentally
1146 // skipping a necessary translation. Without that translation, the coordinate 1133 // skipping a necessary translation. Without that translation, the coordinate
1147 // space of the layer's draw transform is incorrect. 1134 // space of the layer's draw transform is incorrect.
1148 // 1135 //
1149 // Normally this isn't a problem, because the layer wouldn't be drawn anyway, 1136 // Normally this isn't a problem, because the layer wouldn't be drawn anyway,
1150 // but if that layer becomes a render surface, then its draw transform is 1137 // but if that layer becomes a render surface, then its draw transform is
1151 // implicitly inherited by the rest of the subtree, which then is positioned 1138 // implicitly inherited by the rest of the subtree, which then is positioned
(...skipping 5330 matching lines...) Expand 10 before | Expand all | Expand 10 after
6482 6469
6483 EXPECT_EQ(scroll_child->effect_tree_index(), 6470 EXPECT_EQ(scroll_child->effect_tree_index(),
6484 scroll_child_target->effect_tree_index()); 6471 scroll_child_target->effect_tree_index());
6485 EXPECT_EQ(scroll_child->visible_layer_rect(), gfx::Rect(10, 10, 40, 40)); 6472 EXPECT_EQ(scroll_child->visible_layer_rect(), gfx::Rect(10, 10, 40, 40));
6486 EXPECT_EQ(scroll_child->clip_rect(), gfx::Rect(15, 15, 75, 75)); 6473 EXPECT_EQ(scroll_child->clip_rect(), gfx::Rect(15, 15, 75, 75));
6487 gfx::Transform scale; 6474 gfx::Transform scale;
6488 scale.Scale(1.5f, 1.5f); 6475 scale.Scale(1.5f, 1.5f);
6489 EXPECT_TRANSFORMATION_MATRIX_EQ(scroll_child->DrawTransform(), scale); 6476 EXPECT_TRANSFORMATION_MATRIX_EQ(scroll_child->DrawTransform(), scale);
6490 } 6477 }
6491 6478
6492 TEST_F(LayerTreeHostCommonTest, TargetBetweenScrollChildandScrollParentTarget) {
6493 LayerImpl* root = root_layer_for_testing();
6494 LayerImpl* scroll_child_target = AddChildToRoot<LayerImpl>();
6495 LayerImpl* scroll_child = AddChild<LayerImpl>(scroll_child_target);
6496 LayerImpl* child_of_scroll_child = AddChild<LayerImpl>(scroll_child);
6497 LayerImpl* intervening_target = AddChild<LayerImpl>(scroll_child_target);
6498 LayerImpl* clip = AddChild<LayerImpl>(intervening_target);
6499 LayerImpl* scroll_parent_target = AddChild<LayerImpl>(clip);
6500 LayerImpl* scroll_parent = AddChild<LayerImpl>(scroll_parent_target);
6501
6502 scroll_parent->SetDrawsContent(true);
6503 child_of_scroll_child->SetDrawsContent(true);
6504
6505 scroll_child->test_properties()->scroll_parent = scroll_parent;
6506 scroll_parent->test_properties()->scroll_children =
6507 base::MakeUnique<std::set<LayerImpl*>>();
6508 scroll_parent->test_properties()->scroll_children->insert(scroll_child);
6509
6510 root->SetBounds(gfx::Size(50, 50));
6511 scroll_child_target->SetBounds(gfx::Size(50, 50));
6512 scroll_child_target->SetMasksToBounds(true);
6513 scroll_child_target->test_properties()->force_render_surface = true;
6514 scroll_child->SetBounds(gfx::Size(50, 50));
6515 child_of_scroll_child->SetBounds(gfx::Size(50, 50));
6516 child_of_scroll_child->test_properties()->force_render_surface = true;
6517 intervening_target->SetBounds(gfx::Size(50, 50));
6518 intervening_target->test_properties()->force_render_surface = true;
6519 clip->SetBounds(gfx::Size(50, 50));
6520 clip->SetMasksToBounds(true);
6521 scroll_parent_target->SetBounds(gfx::Size(50, 50));
6522 scroll_parent_target->SetMasksToBounds(true);
6523 scroll_parent_target->test_properties()->force_render_surface = true;
6524 scroll_parent->SetBounds(gfx::Size(50, 50));
6525
6526 ExecuteCalculateDrawProperties(root);
6527 PropertyTrees* property_trees = root->layer_tree_impl()->property_trees();
6528 ClipNode* clip_node =
6529 property_trees->clip_tree.Node(child_of_scroll_child->clip_tree_index());
6530 ClipNode* parent_clip_node = property_trees->clip_tree.parent(clip_node);
6531 DCHECK_GT(parent_clip_node->target_transform_id,
6532 property_trees->transform_tree.TargetId(
6533 child_of_scroll_child->transform_tree_index()));
6534 }
6535
6536 TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) { 6479 TEST_F(LayerTreeHostCommonTest, SingularTransformSubtreesDoNotDraw) {
6537 LayerImpl* root = root_layer_for_testing(); 6480 LayerImpl* root = root_layer_for_testing();
6538 LayerImpl* parent = AddChildToRoot<LayerImpl>(); 6481 LayerImpl* parent = AddChildToRoot<LayerImpl>();
6539 LayerImpl* child = AddChild<LayerImpl>(parent); 6482 LayerImpl* child = AddChild<LayerImpl>(parent);
6540 6483
6541 root->SetBounds(gfx::Size(50, 50)); 6484 root->SetBounds(gfx::Size(50, 50));
6542 root->SetDrawsContent(true); 6485 root->SetDrawsContent(true);
6543 root->test_properties()->sorting_context_id = 1; 6486 root->test_properties()->sorting_context_id = 1;
6544 parent->SetBounds(gfx::Size(30, 30)); 6487 parent->SetBounds(gfx::Size(30, 30));
6545 parent->SetDrawsContent(true); 6488 parent->SetDrawsContent(true);
(...skipping 2413 matching lines...) Expand 10 before | Expand all | Expand 10 after
8959 8902
8960 // The singular transform on |animated| is flattened when inherited by 8903 // The singular transform on |animated| is flattened when inherited by
8961 // |surface|, and this happens to make it invertible. 8904 // |surface|, and this happens to make it invertible.
8962 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect()); 8905 EXPECT_EQ(gfx::Rect(2, 2), surface->visible_layer_rect());
8963 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect()); 8906 EXPECT_EQ(gfx::Rect(2, 2), descendant_of_animation->visible_layer_rect());
8964 8907
8965 gfx::Transform zero_matrix; 8908 gfx::Transform zero_matrix;
8966 zero_matrix.Scale3d(0.f, 0.f, 0.f); 8909 zero_matrix.Scale3d(0.f, 0.f, 0.f);
8967 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated( 8910 root->layer_tree_impl()->property_trees()->transform_tree.OnTransformAnimated(
8968 zero_matrix, animated->transform_tree_index(), root->layer_tree_impl()); 8911 zero_matrix, animated->transform_tree_index(), root->layer_tree_impl());
8969 // While computing visible rects by combining clips in screen space, we set 8912 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(root);
8970 // the entire layer as visible if the screen space transform is singular. This
8971 // is not always true when we combine clips in target space because if the
8972 // intersection of combined_clip in taret space with layer_rect projected to
8973 // target space is empty, we set it to an empty rect.
8974 bool skip_verify_visible_rect_calculations = true;
8975 ExecuteCalculateDrawPropertiesAndSaveUpdateLayerList(
8976 root, skip_verify_visible_rect_calculations);
8977
8978 // The animated layer maps to the empty rect in clipped target space, so is
8979 // treated as having an empty visible rect.
8980 EXPECT_EQ(gfx::Rect(), animated->visible_layer_rect());
8981 8913
8982 // The animated layer will be treated as fully visible when we combine clips 8914 // The animated layer will be treated as fully visible when we combine clips
8983 // in screen space. 8915 // in screen space.
8984 gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic( 8916 EXPECT_EQ(gfx::Rect(120, 120), animated->visible_layer_rect());
8985 root->layer_tree_impl()->property_trees(), animated);
8986 EXPECT_EQ(gfx::Rect(120, 120), visible_rect);
8987 8917
8988 // This time, flattening does not make |animated|'s transform invertible. This 8918 // This time, flattening does not make |animated|'s transform invertible. This
8989 // means the clip cannot be projected into |surface|'s space, so we treat 8919 // means the clip cannot be projected into |surface|'s space, so we treat
8990 // |surface| and layers that draw into it as having empty visible rect. 8920 // |surface| and layers that draw into it as having empty visible rect.
8991 EXPECT_EQ(gfx::Rect(), surface->visible_layer_rect()); 8921 EXPECT_EQ(gfx::Rect(100, 100), surface->visible_layer_rect());
8992 EXPECT_EQ(gfx::Rect(), descendant_of_animation->visible_layer_rect()); 8922 EXPECT_EQ(gfx::Rect(200, 200), descendant_of_animation->visible_layer_rect());
8993 } 8923 }
8994 8924
8995 // Verify that having animated opacity but current opacity 1 still creates 8925 // Verify that having animated opacity but current opacity 1 still creates
8996 // a render surface. 8926 // a render surface.
8997 TEST_F(LayerTreeHostCommonTest, AnimatedOpacityCreatesRenderSurface) { 8927 TEST_F(LayerTreeHostCommonTest, AnimatedOpacityCreatesRenderSurface) {
8998 LayerImpl* root = root_layer_for_testing(); 8928 LayerImpl* root = root_layer_for_testing();
8999 LayerImpl* child = AddChild<LayerImpl>(root); 8929 LayerImpl* child = AddChild<LayerImpl>(root);
9000 LayerImpl* grandchild = AddChild<LayerImpl>(child); 8930 LayerImpl* grandchild = AddChild<LayerImpl>(child);
9001 8931
9002 root->SetBounds(gfx::Size(50, 50)); 8932 root->SetBounds(gfx::Size(50, 50));
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after
9779 render_surface->SetBounds(gfx::Size(30, 30)); 9709 render_surface->SetBounds(gfx::Size(30, 30));
9780 render_surface->test_properties()->force_render_surface = true; 9710 render_surface->test_properties()->force_render_surface = true;
9781 test_layer->SetBounds(gfx::Size(30, 30)); 9711 test_layer->SetBounds(gfx::Size(30, 30));
9782 test_layer->SetDrawsContent(true); 9712 test_layer->SetDrawsContent(true);
9783 9713
9784 float device_scale_factor = 1.f; 9714 float device_scale_factor = 1.f;
9785 float page_scale_factor = 1.f; 9715 float page_scale_factor = 1.f;
9786 LayerImpl* page_scale_layer = nullptr; 9716 LayerImpl* page_scale_layer = nullptr;
9787 LayerImpl* inner_viewport_scroll_layer = nullptr; 9717 LayerImpl* inner_viewport_scroll_layer = nullptr;
9788 LayerImpl* outer_viewport_scroll_layer = nullptr; 9718 LayerImpl* outer_viewport_scroll_layer = nullptr;
9789 // Visible rects computed by combining clips in target space and root space
9790 // don't match because of rotation transforms. So, we skip
9791 // verify_visible_rect_calculations.
9792 bool skip_verify_visible_rect_calculations = true;
9793 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor, 9719 ExecuteCalculateDrawProperties(root, device_scale_factor, page_scale_factor,
9794 page_scale_layer, inner_viewport_scroll_layer, 9720 page_scale_layer, inner_viewport_scroll_layer,
9795 outer_viewport_scroll_layer, 9721 outer_viewport_scroll_layer);
9796 skip_verify_visible_rect_calculations);
9797 9722
9798 TransformTree& transform_tree = 9723 TransformTree& transform_tree =
9799 root->layer_tree_impl()->property_trees()->transform_tree; 9724 root->layer_tree_impl()->property_trees()->transform_tree;
9800 TransformNode* transform_node = 9725 TransformNode* transform_node =
9801 transform_tree.Node(significant_transform->transform_tree_index()); 9726 transform_tree.Node(significant_transform->transform_tree_index());
9802 EXPECT_EQ(transform_node->owning_layer_id, significant_transform->id()); 9727 EXPECT_EQ(transform_node->owning_layer_id, significant_transform->id());
9803 9728
9804 EXPECT_TRUE(root->GetRenderSurface()); 9729 EXPECT_TRUE(root->GetRenderSurface());
9805 EXPECT_FALSE(significant_transform->GetRenderSurface()); 9730 EXPECT_FALSE(significant_transform->GetRenderSurface());
9806 EXPECT_TRUE(layer_clips_subtree->GetRenderSurface()); 9731 EXPECT_TRUE(layer_clips_subtree->GetRenderSurface());
9807 EXPECT_TRUE(render_surface->GetRenderSurface()); 9732 EXPECT_TRUE(render_surface->GetRenderSurface());
9808 EXPECT_FALSE(test_layer->GetRenderSurface()); 9733 EXPECT_FALSE(test_layer->GetRenderSurface());
9809 9734
9810 ClipTree& clip_tree = root->layer_tree_impl()->property_trees()->clip_tree; 9735 EXPECT_EQ(gfx::Rect(30, 20), test_layer->visible_layer_rect());
9811 ClipNode* clip_node = clip_tree.Node(render_surface->clip_tree_index());
9812 EXPECT_EQ(clip_node->clip_type, ClipNode::ClipType::NONE);
9813 EXPECT_EQ(gfx::Rect(20, 20), test_layer->visible_layer_rect());
9814
9815 // Also test the visible rects computed by combining clips in root space.
9816 gfx::Rect visible_rect = draw_property_utils::ComputeLayerVisibleRectDynamic(
9817 root->layer_tree_impl()->property_trees(), test_layer);
9818 EXPECT_EQ(gfx::Rect(30, 20), visible_rect);
9819 } 9736 }
9820 9737
9821 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) { 9738 TEST_F(LayerTreeHostCommonTest, TransformOfParentClipNodeAncestorOfTarget) {
9822 // Ensure that when parent clip node's transform is an ancestor of current 9739 // Ensure that when parent clip node's transform is an ancestor of current
9823 // clip node's target, clip is 'projected' from parent space to current 9740 // clip node's target, clip is 'projected' from parent space to current
9824 // target space and visible rects are calculated correctly. 9741 // target space and visible rects are calculated correctly.
9825 LayerImpl* root = root_layer_for_testing(); 9742 LayerImpl* root = root_layer_for_testing();
9826 LayerImpl* clip_layer = AddChild<LayerImpl>(root); 9743 LayerImpl* clip_layer = AddChild<LayerImpl>(root);
9827 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer); 9744 LayerImpl* target_layer = AddChild<LayerImpl>(clip_layer);
9828 LayerImpl* test_layer = AddChild<LayerImpl>(target_layer); 9745 LayerImpl* test_layer = AddChild<LayerImpl>(target_layer);
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
10250 clip_child->SetBounds(gfx::Size(30, 30)); 10167 clip_child->SetBounds(gfx::Size(30, 30));
10251 10168
10252 clip_child->test_properties()->clip_parent = root; 10169 clip_child->test_properties()->clip_parent = root;
10253 root->test_properties()->clip_children = 10170 root->test_properties()->clip_children =
10254 base::MakeUnique<std::set<LayerImpl*>>(); 10171 base::MakeUnique<std::set<LayerImpl*>>();
10255 root->test_properties()->clip_children->insert(clip_child); 10172 root->test_properties()->clip_children->insert(clip_child);
10256 10173
10257 ExecuteCalculateDrawProperties(root); 10174 ExecuteCalculateDrawProperties(root);
10258 10175
10259 EXPECT_EQ(gfx::Rect(-10, -10, 30, 30), render_surface2->clip_rect()); 10176 EXPECT_EQ(gfx::Rect(-10, -10, 30, 30), render_surface2->clip_rect());
10260 // A clip node is created for every render surface and for layers that have
10261 // local clip. So, here it should be craeted for every layer.
10262 EXPECT_EQ(root->layer_tree_impl()->property_trees()->clip_tree.size(), 5u);
10263 } 10177 }
10264 10178
10265 TEST_F(LayerTreeHostCommonTest, MaskLayerDrawProperties) { 10179 TEST_F(LayerTreeHostCommonTest, MaskLayerDrawProperties) {
10266 // Tests that a mask layer's draw properties are computed correctly. 10180 // Tests that a mask layer's draw properties are computed correctly.
10267 LayerImpl* root = root_layer_for_testing(); 10181 LayerImpl* root = root_layer_for_testing();
10268 LayerImpl* child = AddChild<LayerImpl>(root); 10182 LayerImpl* child = AddChild<LayerImpl>(root);
10269 child->test_properties()->SetMaskLayer( 10183 child->test_properties()->SetMaskLayer(
10270 LayerImpl::Create(root->layer_tree_impl(), 100)); 10184 LayerImpl::Create(root->layer_tree_impl(), 100));
10271 LayerImpl* mask = child->test_properties()->mask_layer; 10185 LayerImpl* mask = child->test_properties()->mask_layer;
10272 10186
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
10766 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); 10680 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index());
10767 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); 10681 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index());
10768 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); 10682 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index());
10769 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); 10683 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index());
10770 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); 10684 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index());
10771 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); 10685 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index());
10772 } 10686 }
10773 10687
10774 } // namespace 10688 } // namespace
10775 } // namespace cc 10689 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698