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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |