| 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 |