Chromium Code Reviews| 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 <set> | 10 #include <set> |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 101 LayerTreeHostCommonScalingTest() | 101 LayerTreeHostCommonScalingTest() |
| 102 : LayerTreeHostCommonTest(LayerTreeSettingsScaleContent()) {} | 102 : LayerTreeHostCommonTest(LayerTreeSettingsScaleContent()) {} |
| 103 }; | 103 }; |
| 104 | 104 |
| 105 TEST_F(LayerTreeHostCommonTest, TransformsForNoOpLayer) { | 105 TEST_F(LayerTreeHostCommonTest, TransformsForNoOpLayer) { |
| 106 // Sanity check: For layers positioned at zero, with zero size, | 106 // Sanity check: For layers positioned at zero, with zero size, |
| 107 // and with identity transforms, then the draw transform, | 107 // and with identity transforms, then the draw transform, |
| 108 // screen space transform, and the hierarchy passed on to children | 108 // screen space transform, and the hierarchy passed on to children |
| 109 // layers should also be identity transforms. | 109 // layers should also be identity transforms. |
| 110 | 110 |
| 111 scoped_refptr<Layer> parent = Layer::Create(); | 111 LayerImpl* parent = root_layer(); |
| 112 scoped_refptr<Layer> child = Layer::Create(); | 112 LayerImpl* child = AddChild<LayerImpl>(parent); |
| 113 scoped_refptr<Layer> grand_child = Layer::Create(); | 113 LayerImpl* grand_child = AddChild<LayerImpl>(child); |
| 114 parent->AddChild(child); | |
| 115 child->AddChild(grand_child); | |
| 116 | |
| 117 host()->SetRootLayer(parent); | |
| 118 | 114 |
| 119 gfx::Transform identity_matrix; | 115 gfx::Transform identity_matrix; |
| 120 SetLayerPropertiesForTesting(parent.get(), | 116 SetLayerPropertiesForTesting(parent, identity_matrix, gfx::Point3F(), |
| 121 identity_matrix, | 117 gfx::PointF(), gfx::Size(100, 100), true, false); |
| 122 gfx::Point3F(), | 118 SetLayerPropertiesForTesting(child, identity_matrix, gfx::Point3F(), |
| 123 gfx::PointF(), | 119 gfx::PointF(), gfx::Size(), true, false); |
| 124 gfx::Size(100, 100), | 120 SetLayerPropertiesForTesting(grand_child, identity_matrix, gfx::Point3F(), |
| 125 true, | 121 gfx::PointF(), gfx::Size(), true, false); |
| 126 false); | |
| 127 SetLayerPropertiesForTesting(child.get(), | |
| 128 identity_matrix, | |
| 129 gfx::Point3F(), | |
| 130 gfx::PointF(), | |
| 131 gfx::Size(), | |
| 132 true, | |
| 133 false); | |
| 134 SetLayerPropertiesForTesting(grand_child.get(), | |
| 135 identity_matrix, | |
| 136 gfx::Point3F(), | |
| 137 gfx::PointF(), | |
| 138 gfx::Size(), | |
| 139 true, | |
| 140 false); | |
| 141 | 122 |
| 142 ExecuteCalculateDrawProperties(parent.get()); | 123 ExecuteCalculateDrawProperties(parent); |
| 143 | 124 |
| 144 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, child->draw_transform()); | 125 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, child->DrawTransform()); |
| 145 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, | 126 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, |
| 146 child->screen_space_transform()); | 127 child->ScreenSpaceTransform()); |
| 147 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, | 128 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, |
| 148 grand_child->draw_transform()); | 129 grand_child->DrawTransform()); |
| 149 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, | 130 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, |
| 150 grand_child->screen_space_transform()); | 131 grand_child->ScreenSpaceTransform()); |
| 151 } | 132 } |
| 152 | 133 |
| 153 TEST_F(LayerTreeHostCommonTest, | 134 TEST_F(LayerTreeHostCommonTest, |
| 154 ScreenSpaceTransformOfSkippedLayersWithHandlers) { | 135 ScreenSpaceTransformOfSkippedLayersWithHandlers) { |
| 155 // Even for layers that are skipped, we need to compute the correct screen | 136 // Even for layers that are skipped, we need to compute the correct screen |
| 156 // space transform because it is used during hit testing. | 137 // space transform because it is used during hit testing. |
| 157 LayerImpl* parent = root_layer(); | 138 LayerImpl* parent = root_layer(); |
| 158 LayerImpl* child = AddChild<LayerImpl>(parent); | 139 LayerImpl* child = AddChild<LayerImpl>(parent); |
| 159 LayerImpl* grand_child = AddChild<LayerImpl>(child); | 140 LayerImpl* grand_child = AddChild<LayerImpl>(child); |
| 160 child->SetDrawsContent(true); | 141 child->SetDrawsContent(true); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 202 parent->layer_tree_impl()->property_trees()->effect_tree; | 183 parent->layer_tree_impl()->property_trees()->effect_tree; |
| 203 EffectNode* node = effect_tree.Node(child->effect_tree_index()); | 184 EffectNode* node = effect_tree.Node(child->effect_tree_index()); |
| 204 const int transform_tree_size = parent->layer_tree_impl() | 185 const int transform_tree_size = parent->layer_tree_impl() |
| 205 ->property_trees() | 186 ->property_trees() |
| 206 ->transform_tree.next_available_id(); | 187 ->transform_tree.next_available_id(); |
| 207 EXPECT_LT(node->data.transform_id, transform_tree_size); | 188 EXPECT_LT(node->data.transform_id, transform_tree_size); |
| 208 } | 189 } |
| 209 | 190 |
| 210 TEST_F(LayerTreeHostCommonTest, TransformsForSingleLayer) { | 191 TEST_F(LayerTreeHostCommonTest, TransformsForSingleLayer) { |
| 211 gfx::Transform identity_matrix; | 192 gfx::Transform identity_matrix; |
| 212 scoped_refptr<Layer> layer = Layer::Create(); | 193 LayerImpl* root = root_layer(); |
| 194 LayerImpl* layer = AddChild<LayerImpl>(root); | |
| 213 | 195 |
| 214 scoped_refptr<Layer> root = Layer::Create(); | 196 SetLayerPropertiesForTesting(root, identity_matrix, gfx::Point3F(), |
| 215 SetLayerPropertiesForTesting(root.get(), identity_matrix, gfx::Point3F(), | |
| 216 gfx::PointF(), gfx::Size(1, 2), true, false); | 197 gfx::PointF(), gfx::Size(1, 2), true, false); |
| 217 root->AddChild(layer); | |
| 218 | 198 |
| 219 host()->SetRootLayer(root); | 199 TransformTree& tree = |
| 220 | 200 host_impl()->active_tree()->property_trees()->transform_tree; |
| 221 TransformTree& tree = host()->property_trees()->transform_tree; | |
| 222 | 201 |
| 223 // Case 2: Setting the bounds of the layer should not affect either the draw | 202 // Case 2: Setting the bounds of the layer should not affect either the draw |
| 224 // transform or the screenspace transform. | 203 // transform or the screenspace transform. |
| 225 gfx::Transform translation_to_center; | 204 gfx::Transform translation_to_center; |
| 226 translation_to_center.Translate(5.0, 6.0); | 205 translation_to_center.Translate(5.0, 6.0); |
| 227 SetLayerPropertiesForTesting(layer.get(), identity_matrix, gfx::Point3F(), | 206 SetLayerPropertiesForTesting(layer, identity_matrix, gfx::Point3F(), |
| 228 gfx::PointF(), gfx::Size(10, 12), true, false); | 207 gfx::PointF(), gfx::Size(10, 12), true, false); |
| 229 ExecuteCalculateDrawProperties(root.get()); | 208 ExecuteCalculateDrawProperties(root); |
| 230 EXPECT_TRANSFORMATION_MATRIX_EQ( | 209 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 231 identity_matrix, draw_property_utils::DrawTransform(layer.get(), tree)); | 210 identity_matrix, draw_property_utils::DrawTransform(layer, tree)); |
| 232 EXPECT_TRANSFORMATION_MATRIX_EQ( | 211 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 233 identity_matrix, | 212 identity_matrix, draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 234 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 235 | 213 |
| 236 // Case 3: The anchor point by itself (without a layer transform) should have | 214 // Case 3: The anchor point by itself (without a layer transform) should have |
| 237 // no effect on the transforms. | 215 // no effect on the transforms. |
| 238 SetLayerPropertiesForTesting(layer.get(), identity_matrix, | 216 SetLayerPropertiesForTesting(layer, identity_matrix, |
| 239 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), | 217 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), |
| 240 gfx::Size(10, 12), true, false); | 218 gfx::Size(10, 12), true, false); |
|
ajuma
2016/04/04 22:15:59
Need to mark property trees for rebuilding here. (
sunxd
2016/04/05 14:26:47
Done.
| |
| 241 ExecuteCalculateDrawProperties(root.get()); | 219 ExecuteCalculateDrawProperties(root); |
| 242 EXPECT_TRANSFORMATION_MATRIX_EQ( | 220 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 243 identity_matrix, draw_property_utils::DrawTransform(layer.get(), tree)); | 221 identity_matrix, draw_property_utils::DrawTransform(layer, tree)); |
| 244 EXPECT_TRANSFORMATION_MATRIX_EQ( | 222 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 245 identity_matrix, | 223 identity_matrix, draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 246 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 247 | 224 |
| 248 // Case 4: A change in actual position affects both the draw transform and | 225 // Case 4: A change in actual position affects both the draw transform and |
| 249 // screen space transform. | 226 // screen space transform. |
| 250 gfx::Transform position_transform; | 227 gfx::Transform position_transform; |
| 251 position_transform.Translate(0.f, 1.2f); | 228 position_transform.Translate(0.f, 1.2f); |
| 252 SetLayerPropertiesForTesting( | 229 SetLayerPropertiesForTesting( |
| 253 layer.get(), identity_matrix, gfx::Point3F(2.5f, 3.0f, 0.f), | 230 layer, identity_matrix, gfx::Point3F(2.5f, 3.0f, 0.f), |
| 254 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); | 231 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); |
| 255 ExecuteCalculateDrawProperties(root.get()); | 232 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 233 ExecuteCalculateDrawProperties(root); | |
| 234 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 235 position_transform, draw_property_utils::DrawTransform(layer, tree)); | |
| 256 EXPECT_TRANSFORMATION_MATRIX_EQ( | 236 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 257 position_transform, | 237 position_transform, |
| 258 draw_property_utils::DrawTransform(layer.get(), tree)); | 238 draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 259 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 260 position_transform, | |
| 261 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 262 | 239 |
| 263 // Case 5: In the correct sequence of transforms, the layer transform should | 240 // Case 5: In the correct sequence of transforms, the layer transform should |
| 264 // pre-multiply the translation_to_center. This is easily tested by using a | 241 // pre-multiply the translation_to_center. This is easily tested by using a |
| 265 // scale transform, because scale and translation are not commutative. | 242 // scale transform, because scale and translation are not commutative. |
| 266 gfx::Transform layer_transform; | 243 gfx::Transform layer_transform; |
| 267 layer_transform.Scale3d(2.0, 2.0, 1.0); | 244 layer_transform.Scale3d(2.0, 2.0, 1.0); |
| 268 SetLayerPropertiesForTesting(layer.get(), layer_transform, gfx::Point3F(), | 245 SetLayerPropertiesForTesting(layer, layer_transform, gfx::Point3F(), |
| 269 gfx::PointF(), gfx::Size(10, 12), true, false); | 246 gfx::PointF(), gfx::Size(10, 12), true, false); |
| 270 ExecuteCalculateDrawProperties(root.get()); | 247 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 248 ExecuteCalculateDrawProperties(root); | |
| 271 EXPECT_TRANSFORMATION_MATRIX_EQ( | 249 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 272 layer_transform, draw_property_utils::DrawTransform(layer.get(), tree)); | 250 layer_transform, draw_property_utils::DrawTransform(layer, tree)); |
| 273 EXPECT_TRANSFORMATION_MATRIX_EQ( | 251 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 274 layer_transform, | 252 layer_transform, draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 275 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 276 | 253 |
| 277 // Case 6: The layer transform should occur with respect to the anchor point. | 254 // Case 6: The layer transform should occur with respect to the anchor point. |
| 278 gfx::Transform translation_to_anchor; | 255 gfx::Transform translation_to_anchor; |
| 279 translation_to_anchor.Translate(5.0, 0.0); | 256 translation_to_anchor.Translate(5.0, 0.0); |
| 280 gfx::Transform expected_result = | 257 gfx::Transform expected_result = |
| 281 translation_to_anchor * layer_transform * Inverse(translation_to_anchor); | 258 translation_to_anchor * layer_transform * Inverse(translation_to_anchor); |
| 282 SetLayerPropertiesForTesting(layer.get(), layer_transform, | 259 SetLayerPropertiesForTesting(layer, layer_transform, |
| 283 gfx::Point3F(5.0f, 0.f, 0.f), gfx::PointF(), | 260 gfx::Point3F(5.0f, 0.f, 0.f), gfx::PointF(), |
| 284 gfx::Size(10, 12), true, false); | 261 gfx::Size(10, 12), true, false); |
| 285 ExecuteCalculateDrawProperties(root.get()); | 262 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 263 ExecuteCalculateDrawProperties(root); | |
| 286 EXPECT_TRANSFORMATION_MATRIX_EQ( | 264 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 287 expected_result, draw_property_utils::DrawTransform(layer.get(), tree)); | 265 expected_result, draw_property_utils::DrawTransform(layer, tree)); |
| 288 EXPECT_TRANSFORMATION_MATRIX_EQ( | 266 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 289 expected_result, | 267 expected_result, draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 290 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 291 | 268 |
| 292 // Case 7: Verify that position pre-multiplies the layer transform. The | 269 // Case 7: Verify that position pre-multiplies the layer transform. The |
| 293 // current implementation of CalculateDrawProperties does this implicitly, but | 270 // current implementation of CalculateDrawProperties does this implicitly, but |
| 294 // it is still worth testing to detect accidental regressions. | 271 // it is still worth testing to detect accidental regressions. |
| 295 expected_result = position_transform * translation_to_anchor * | 272 expected_result = position_transform * translation_to_anchor * |
| 296 layer_transform * Inverse(translation_to_anchor); | 273 layer_transform * Inverse(translation_to_anchor); |
| 297 SetLayerPropertiesForTesting( | 274 SetLayerPropertiesForTesting( |
| 298 layer.get(), layer_transform, gfx::Point3F(5.0f, 0.f, 0.f), | 275 layer, layer_transform, gfx::Point3F(5.0f, 0.f, 0.f), |
| 299 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); | 276 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); |
| 300 ExecuteCalculateDrawProperties(root.get()); | 277 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 278 ExecuteCalculateDrawProperties(root); | |
| 301 EXPECT_TRANSFORMATION_MATRIX_EQ( | 279 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 302 expected_result, draw_property_utils::DrawTransform(layer.get(), tree)); | 280 expected_result, draw_property_utils::DrawTransform(layer, tree)); |
| 303 EXPECT_TRANSFORMATION_MATRIX_EQ( | 281 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 304 expected_result, | 282 expected_result, draw_property_utils::ScreenSpaceTransform(layer, tree)); |
| 305 draw_property_utils::ScreenSpaceTransform(layer.get(), tree)); | |
| 306 } | 283 } |
| 307 | 284 |
| 308 TEST_F(LayerTreeHostCommonTest, TransformsAboutScrollOffset) { | 285 TEST_F(LayerTreeHostCommonTest, TransformsAboutScrollOffset) { |
| 309 const gfx::ScrollOffset kScrollOffset(50, 100); | 286 const gfx::ScrollOffset kScrollOffset(50, 100); |
| 310 const gfx::Vector2dF kScrollDelta(2.34f, 5.67f); | 287 const gfx::Vector2dF kScrollDelta(2.34f, 5.67f); |
| 311 const gfx::Vector2d kMaxScrollOffset(200, 200); | 288 const gfx::Vector2d kMaxScrollOffset(200, 200); |
| 312 const gfx::PointF kScrollLayerPosition(-kScrollOffset.x(), | 289 const gfx::PointF kScrollLayerPosition(-kScrollOffset.x(), |
| 313 -kScrollOffset.y()); | 290 -kScrollOffset.y()); |
| 314 float page_scale = 0.888f; | 291 float page_scale = 0.888f; |
| 315 const float kDeviceScale = 1.666f; | 292 const float kDeviceScale = 1.666f; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 sub_layer_screen_position.y() * page_scale * | 397 sub_layer_screen_position.y() * page_scale * |
| 421 kDeviceScale)); | 398 kDeviceScale)); |
| 422 expected_transform.Scale(page_scale * kDeviceScale, | 399 expected_transform.Scale(page_scale * kDeviceScale, |
| 423 page_scale * kDeviceScale); | 400 page_scale * kDeviceScale); |
| 424 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform, | 401 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform, |
| 425 sublayer->DrawTransform()); | 402 sublayer->DrawTransform()); |
| 426 } | 403 } |
| 427 | 404 |
| 428 TEST_F(LayerTreeHostCommonTest, TransformsForSimpleHierarchy) { | 405 TEST_F(LayerTreeHostCommonTest, TransformsForSimpleHierarchy) { |
| 429 gfx::Transform identity_matrix; | 406 gfx::Transform identity_matrix; |
| 430 scoped_refptr<Layer> root = Layer::Create(); | 407 LayerImpl* root = root_layer(); |
| 431 scoped_refptr<Layer> parent = Layer::Create(); | 408 LayerImpl* parent = AddChild<LayerImpl>(root); |
| 432 scoped_refptr<Layer> child = Layer::Create(); | 409 LayerImpl* child = AddChild<LayerImpl>(parent); |
| 433 scoped_refptr<Layer> grand_child = Layer::Create(); | 410 LayerImpl* grand_child = AddChild<LayerImpl>(child); |
| 434 root->AddChild(parent); | |
| 435 parent->AddChild(child); | |
| 436 child->AddChild(grand_child); | |
| 437 | |
| 438 host()->SetRootLayer(root); | |
| 439 | 411 |
| 440 // One-time setup of root layer | 412 // One-time setup of root layer |
| 441 SetLayerPropertiesForTesting(root.get(), identity_matrix, gfx::Point3F(), | 413 SetLayerPropertiesForTesting(root, identity_matrix, gfx::Point3F(), |
| 442 gfx::PointF(), gfx::Size(1, 2), true, false); | 414 gfx::PointF(), gfx::Size(1, 2), true, false); |
| 443 | 415 |
| 444 TransformTree& tree = host()->property_trees()->transform_tree; | 416 TransformTree& tree = |
| 417 host_impl()->active_tree()->property_trees()->transform_tree; | |
| 445 | 418 |
| 446 // Case 1: parent's anchor point should not affect child or grand_child. | 419 // Case 1: parent's anchor point should not affect child or grand_child. |
| 447 SetLayerPropertiesForTesting(parent.get(), identity_matrix, | 420 SetLayerPropertiesForTesting(parent, identity_matrix, |
| 448 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), | 421 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), |
| 449 gfx::Size(10, 12), true, false); | 422 gfx::Size(10, 12), true, false); |
| 450 SetLayerPropertiesForTesting(child.get(), identity_matrix, gfx::Point3F(), | 423 SetLayerPropertiesForTesting(child, identity_matrix, gfx::Point3F(), |
| 451 gfx::PointF(), gfx::Size(16, 18), true, false); | 424 gfx::PointF(), gfx::Size(16, 18), true, false); |
| 452 SetLayerPropertiesForTesting(grand_child.get(), identity_matrix, | 425 SetLayerPropertiesForTesting(grand_child, identity_matrix, gfx::Point3F(), |
| 453 gfx::Point3F(), gfx::PointF(), gfx::Size(76, 78), | 426 gfx::PointF(), gfx::Size(76, 78), true, false); |
| 454 true, false); | 427 ExecuteCalculateDrawProperties(root); |
| 455 ExecuteCalculateDrawProperties(root.get()); | |
| 456 | 428 |
| 457 EXPECT_TRANSFORMATION_MATRIX_EQ( | 429 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 458 identity_matrix, draw_property_utils::DrawTransform(child.get(), tree)); | 430 identity_matrix, draw_property_utils::DrawTransform(child, tree)); |
| 431 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 432 identity_matrix, draw_property_utils::ScreenSpaceTransform(child, tree)); | |
| 433 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 434 identity_matrix, draw_property_utils::DrawTransform(grand_child, tree)); | |
| 459 EXPECT_TRANSFORMATION_MATRIX_EQ( | 435 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 460 identity_matrix, | 436 identity_matrix, |
| 461 draw_property_utils::ScreenSpaceTransform(child.get(), tree)); | 437 draw_property_utils::ScreenSpaceTransform(grand_child, tree)); |
| 462 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 463 identity_matrix, | |
| 464 draw_property_utils::DrawTransform(grand_child.get(), tree)); | |
| 465 EXPECT_TRANSFORMATION_MATRIX_EQ( | |
| 466 identity_matrix, | |
| 467 draw_property_utils::ScreenSpaceTransform(grand_child.get(), tree)); | |
| 468 | 438 |
| 469 // Case 2: parent's position affects child and grand_child. | 439 // Case 2: parent's position affects child and grand_child. |
| 470 gfx::Transform parent_position_transform; | 440 gfx::Transform parent_position_transform; |
| 471 parent_position_transform.Translate(0.f, 1.2f); | 441 parent_position_transform.Translate(0.f, 1.2f); |
| 472 SetLayerPropertiesForTesting( | 442 SetLayerPropertiesForTesting( |
| 473 parent.get(), identity_matrix, gfx::Point3F(2.5f, 3.0f, 0.f), | 443 parent, identity_matrix, gfx::Point3F(2.5f, 3.0f, 0.f), |
| 474 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); | 444 gfx::PointF(0.f, 1.2f), gfx::Size(10, 12), true, false); |
| 475 SetLayerPropertiesForTesting(child.get(), identity_matrix, gfx::Point3F(), | 445 SetLayerPropertiesForTesting(child, identity_matrix, gfx::Point3F(), |
| 476 gfx::PointF(), gfx::Size(16, 18), true, false); | 446 gfx::PointF(), gfx::Size(16, 18), true, false); |
| 477 SetLayerPropertiesForTesting(grand_child.get(), identity_matrix, | 447 SetLayerPropertiesForTesting(grand_child, identity_matrix, gfx::Point3F(), |
| 478 gfx::Point3F(), gfx::PointF(), gfx::Size(76, 78), | 448 gfx::PointF(), gfx::Size(76, 78), true, false); |
| 479 true, false); | 449 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 480 ExecuteCalculateDrawProperties(root.get()); | 450 ExecuteCalculateDrawProperties(root); |
| 481 EXPECT_TRANSFORMATION_MATRIX_EQ( | 451 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 482 parent_position_transform, | 452 parent_position_transform, |
| 483 draw_property_utils::DrawTransform(child.get(), tree)); | 453 draw_property_utils::DrawTransform(child, tree)); |
| 484 EXPECT_TRANSFORMATION_MATRIX_EQ( | 454 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 485 parent_position_transform, | 455 parent_position_transform, |
| 486 draw_property_utils::ScreenSpaceTransform(child.get(), tree)); | 456 draw_property_utils::ScreenSpaceTransform(child, tree)); |
| 487 EXPECT_TRANSFORMATION_MATRIX_EQ( | 457 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 488 parent_position_transform, | 458 parent_position_transform, |
| 489 draw_property_utils::DrawTransform(grand_child.get(), tree)); | 459 draw_property_utils::DrawTransform(grand_child, tree)); |
| 490 EXPECT_TRANSFORMATION_MATRIX_EQ( | 460 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 491 parent_position_transform, | 461 parent_position_transform, |
| 492 draw_property_utils::ScreenSpaceTransform(grand_child.get(), tree)); | 462 draw_property_utils::ScreenSpaceTransform(grand_child, tree)); |
| 493 | 463 |
| 494 // Case 3: parent's local transform affects child and grandchild | 464 // Case 3: parent's local transform affects child and grandchild |
| 495 gfx::Transform parent_layer_transform; | 465 gfx::Transform parent_layer_transform; |
| 496 parent_layer_transform.Scale3d(2.0, 2.0, 1.0); | 466 parent_layer_transform.Scale3d(2.0, 2.0, 1.0); |
| 497 gfx::Transform parent_translation_to_anchor; | 467 gfx::Transform parent_translation_to_anchor; |
| 498 parent_translation_to_anchor.Translate(2.5, 3.0); | 468 parent_translation_to_anchor.Translate(2.5, 3.0); |
| 499 gfx::Transform parent_composite_transform = | 469 gfx::Transform parent_composite_transform = |
| 500 parent_translation_to_anchor * parent_layer_transform * | 470 parent_translation_to_anchor * parent_layer_transform * |
| 501 Inverse(parent_translation_to_anchor); | 471 Inverse(parent_translation_to_anchor); |
| 502 SetLayerPropertiesForTesting(parent.get(), parent_layer_transform, | 472 SetLayerPropertiesForTesting(parent, parent_layer_transform, |
| 503 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), | 473 gfx::Point3F(2.5f, 3.0f, 0.f), gfx::PointF(), |
| 504 gfx::Size(10, 12), true, false); | 474 gfx::Size(10, 12), true, false); |
| 505 SetLayerPropertiesForTesting(child.get(), identity_matrix, gfx::Point3F(), | 475 SetLayerPropertiesForTesting(child, identity_matrix, gfx::Point3F(), |
| 506 gfx::PointF(), gfx::Size(16, 18), true, false); | 476 gfx::PointF(), gfx::Size(16, 18), true, false); |
| 507 SetLayerPropertiesForTesting(grand_child.get(), identity_matrix, | 477 SetLayerPropertiesForTesting(grand_child, identity_matrix, gfx::Point3F(), |
| 508 gfx::Point3F(), gfx::PointF(), gfx::Size(76, 78), | 478 gfx::PointF(), gfx::Size(76, 78), true, false); |
| 509 true, false); | 479 host_impl()->active_tree()->property_trees()->needs_rebuild = true; |
| 510 ExecuteCalculateDrawProperties(root.get()); | 480 ExecuteCalculateDrawProperties(root); |
| 511 EXPECT_TRANSFORMATION_MATRIX_EQ( | 481 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 512 parent_composite_transform, | 482 parent_composite_transform, |
| 513 draw_property_utils::DrawTransform(child.get(), tree)); | 483 draw_property_utils::DrawTransform(child, tree)); |
| 514 EXPECT_TRANSFORMATION_MATRIX_EQ( | 484 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 515 parent_composite_transform, | 485 parent_composite_transform, |
| 516 draw_property_utils::ScreenSpaceTransform(child.get(), tree)); | 486 draw_property_utils::ScreenSpaceTransform(child, tree)); |
| 517 EXPECT_TRANSFORMATION_MATRIX_EQ( | 487 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 518 parent_composite_transform, | 488 parent_composite_transform, |
| 519 draw_property_utils::DrawTransform(grand_child.get(), tree)); | 489 draw_property_utils::DrawTransform(grand_child, tree)); |
| 520 EXPECT_TRANSFORMATION_MATRIX_EQ( | 490 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 521 parent_composite_transform, | 491 parent_composite_transform, |
| 522 draw_property_utils::ScreenSpaceTransform(grand_child.get(), tree)); | 492 draw_property_utils::ScreenSpaceTransform(grand_child, tree)); |
| 523 } | 493 } |
| 524 | 494 |
| 525 TEST_F(LayerTreeHostCommonTest, TransformsForSingleRenderSurface) { | 495 TEST_F(LayerTreeHostCommonTest, TransformsForSingleRenderSurface) { |
| 526 LayerImpl* root = root_layer(); | 496 LayerImpl* root = root_layer(); |
| 527 LayerImpl* parent = AddChildToRoot<LayerImpl>(); | 497 LayerImpl* parent = AddChildToRoot<LayerImpl>(); |
| 528 LayerImpl* child = AddChild<LayerImpl>(parent); | 498 LayerImpl* child = AddChild<LayerImpl>(parent); |
| 529 LayerImpl* grand_child = AddChild<LayerImpl>(child); | 499 LayerImpl* grand_child = AddChild<LayerImpl>(child); |
| 530 grand_child->SetDrawsContent(true); | 500 grand_child->SetDrawsContent(true); |
| 531 | 501 |
| 532 gfx::Transform identity_matrix; | 502 gfx::Transform identity_matrix; |
| (...skipping 6443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6976 // Ensures that when we have a render surface between a fixed position layer | 6946 // Ensures that when we have a render surface between a fixed position layer |
| 6977 // and its container, we compute the fixed position layer's draw transform | 6947 // and its container, we compute the fixed position layer's draw transform |
| 6978 // with respect to that intervening render surface, not with respect to its | 6948 // with respect to that intervening render surface, not with respect to its |
| 6979 // container's render target. | 6949 // container's render target. |
| 6980 // | 6950 // |
| 6981 // + root | 6951 // + root |
| 6982 // + render_surface | 6952 // + render_surface |
| 6983 // + fixed | 6953 // + fixed |
| 6984 // + child | 6954 // + child |
| 6985 // | 6955 // |
| 6986 scoped_refptr<Layer> root = Layer::Create(); | 6956 LayerImpl* root = root_layer(); |
| 6987 scoped_refptr<LayerWithForcedDrawsContent> render_surface = | 6957 LayerImpl* render_surface = AddChild<LayerImpl>(root); |
| 6988 make_scoped_refptr(new LayerWithForcedDrawsContent()); | 6958 LayerImpl* fixed = AddChild<LayerImpl>(render_surface); |
| 6989 scoped_refptr<LayerWithForcedDrawsContent> fixed = | 6959 LayerImpl* child = AddChild<LayerImpl>(fixed); |
| 6990 make_scoped_refptr(new LayerWithForcedDrawsContent()); | |
| 6991 scoped_refptr<LayerWithForcedDrawsContent> child = | |
| 6992 make_scoped_refptr(new LayerWithForcedDrawsContent()); | |
| 6993 | 6960 |
| 6994 root->AddChild(render_surface); | 6961 render_surface->SetDrawsContent(true); |
| 6995 render_surface->AddChild(fixed); | 6962 fixed->SetDrawsContent(true); |
| 6996 fixed->AddChild(child); | 6963 child->SetDrawsContent(true); |
| 6997 | 6964 |
| 6998 root->SetIsContainerForFixedPositionLayers(true); | 6965 root->SetIsContainerForFixedPositionLayers(true); |
| 6999 render_surface->SetForceRenderSurface(true); | 6966 render_surface->SetForceRenderSurface(true); |
| 7000 | 6967 |
| 7001 LayerPositionConstraint constraint; | 6968 LayerPositionConstraint constraint; |
| 7002 constraint.set_is_fixed_position(true); | 6969 constraint.set_is_fixed_position(true); |
| 7003 fixed->SetPositionConstraint(constraint); | 6970 fixed->SetPositionConstraint(constraint); |
| 7004 | 6971 |
| 7005 SetLayerPropertiesForTesting(root.get(), gfx::Transform(), gfx::Point3F(), | 6972 SetLayerPropertiesForTesting(root, gfx::Transform(), gfx::Point3F(), |
| 7006 gfx::PointF(), gfx::Size(50, 50), true, false); | 6973 gfx::PointF(), gfx::Size(50, 50), true, false); |
| 7007 SetLayerPropertiesForTesting(render_surface.get(), gfx::Transform(), | 6974 SetLayerPropertiesForTesting(render_surface, gfx::Transform(), gfx::Point3F(), |
| 7008 gfx::Point3F(), gfx::PointF(7.f, 9.f), | 6975 gfx::PointF(7.f, 9.f), gfx::Size(50, 50), true, |
| 7009 gfx::Size(50, 50), true, false); | 6976 false); |
| 7010 SetLayerPropertiesForTesting(fixed.get(), gfx::Transform(), gfx::Point3F(), | 6977 SetLayerPropertiesForTesting(fixed, gfx::Transform(), gfx::Point3F(), |
| 7011 gfx::PointF(10.f, 15.f), gfx::Size(50, 50), true, | 6978 gfx::PointF(10.f, 15.f), gfx::Size(50, 50), true, |
| 7012 false); | 6979 false); |
| 7013 SetLayerPropertiesForTesting(child.get(), gfx::Transform(), gfx::Point3F(), | 6980 SetLayerPropertiesForTesting(child, gfx::Transform(), gfx::Point3F(), |
| 7014 gfx::PointF(1.f, 2.f), gfx::Size(50, 50), true, | 6981 gfx::PointF(1.f, 2.f), gfx::Size(50, 50), true, |
| 7015 false); | 6982 false); |
| 7016 | 6983 |
| 7017 host()->SetRootLayer(root); | 6984 ExecuteCalculateDrawProperties(root); |
| 7018 | 6985 |
| 7019 ExecuteCalculateDrawProperties(root.get()); | 6986 TransformTree& tree = |
| 7020 | 6987 host_impl()->active_tree()->property_trees()->transform_tree; |
| 7021 TransformTree& tree = host()->property_trees()->transform_tree; | |
| 7022 | 6988 |
| 7023 gfx::Transform expected_fixed_draw_transform; | 6989 gfx::Transform expected_fixed_draw_transform; |
| 7024 expected_fixed_draw_transform.Translate(10.f, 15.f); | 6990 expected_fixed_draw_transform.Translate(10.f, 15.f); |
| 7025 EXPECT_EQ(expected_fixed_draw_transform, | 6991 EXPECT_EQ(expected_fixed_draw_transform, |
| 7026 draw_property_utils::DrawTransform(fixed.get(), tree)); | 6992 draw_property_utils::DrawTransform(fixed, tree)); |
| 7027 | 6993 |
| 7028 gfx::Transform expected_fixed_screen_space_transform; | 6994 gfx::Transform expected_fixed_screen_space_transform; |
| 7029 expected_fixed_screen_space_transform.Translate(17.f, 24.f); | 6995 expected_fixed_screen_space_transform.Translate(17.f, 24.f); |
| 7030 EXPECT_EQ(expected_fixed_screen_space_transform, | 6996 EXPECT_EQ(expected_fixed_screen_space_transform, |
| 7031 draw_property_utils::ScreenSpaceTransform(fixed.get(), tree)); | 6997 draw_property_utils::ScreenSpaceTransform(fixed, tree)); |
| 7032 | 6998 |
| 7033 gfx::Transform expected_child_draw_transform; | 6999 gfx::Transform expected_child_draw_transform; |
| 7034 expected_child_draw_transform.Translate(11.f, 17.f); | 7000 expected_child_draw_transform.Translate(11.f, 17.f); |
| 7035 EXPECT_EQ(expected_child_draw_transform, | 7001 EXPECT_EQ(expected_child_draw_transform, |
| 7036 draw_property_utils::DrawTransform(child.get(), tree)); | 7002 draw_property_utils::DrawTransform(child, tree)); |
| 7037 | 7003 |
| 7038 gfx::Transform expected_child_screen_space_transform; | 7004 gfx::Transform expected_child_screen_space_transform; |
| 7039 expected_child_screen_space_transform.Translate(18.f, 26.f); | 7005 expected_child_screen_space_transform.Translate(18.f, 26.f); |
| 7040 EXPECT_EQ(expected_child_screen_space_transform, | 7006 EXPECT_EQ(expected_child_screen_space_transform, |
| 7041 draw_property_utils::ScreenSpaceTransform(child.get(), tree)); | 7007 draw_property_utils::ScreenSpaceTransform(child, tree)); |
| 7042 } | 7008 } |
| 7043 | 7009 |
| 7044 TEST_F(LayerTreeHostCommonTest, ScrollCompensationWithRounding) { | 7010 TEST_F(LayerTreeHostCommonTest, ScrollCompensationWithRounding) { |
| 7045 // This test verifies that a scrolling layer that gets snapped to | 7011 // This test verifies that a scrolling layer that gets snapped to |
| 7046 // integer coordinates doesn't move a fixed position child. | 7012 // integer coordinates doesn't move a fixed position child. |
| 7047 // | 7013 // |
| 7048 // + root | 7014 // + root |
| 7049 // + container | 7015 // + container |
| 7050 // + scroller | 7016 // + scroller |
| 7051 // + fixed | 7017 // + fixed |
| (...skipping 2993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10045 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10011 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
| 10046 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10012 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
| 10047 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10013 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
| 10048 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10014 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
| 10049 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10015 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
| 10050 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10016 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
| 10051 } | 10017 } |
| 10052 | 10018 |
| 10053 } // namespace | 10019 } // namespace |
| 10054 } // namespace cc | 10020 } // namespace cc |
| OLD | NEW |