| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/property_tree.h" | 5 #include "cc/trees/property_tree.h" |
| 6 | 6 |
| 7 #include "cc/input/main_thread_scrolling_reason.h" | 7 #include "cc/input/main_thread_scrolling_reason.h" |
| 8 #include "cc/proto/property_tree.pb.h" | 8 #include "cc/proto/property_tree.pb.h" |
| 9 #include "cc/test/geometry_test_utils.h" | 9 #include "cc/test/geometry_test_utils.h" |
| 10 #include "cc/trees/draw_property_utils.h" | 10 #include "cc/trees/draw_property_utils.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 proto::TreeNode proto; | 65 proto::TreeNode proto; |
| 66 original.ToProtobuf(&proto); | 66 original.ToProtobuf(&proto); |
| 67 TransformNode result; | 67 TransformNode result; |
| 68 result.FromProtobuf(proto); | 68 result.FromProtobuf(proto); |
| 69 | 69 |
| 70 EXPECT_EQ(original, result); | 70 EXPECT_EQ(original, result); |
| 71 } | 71 } |
| 72 | 72 |
| 73 TEST(PropertyTreeSerializationTest, TransformTreeSerialization) { | 73 TEST(PropertyTreeSerializationTest, TransformTreeSerialization) { |
| 74 TransformTree original; | 74 TransformTree original; |
| 75 TransformNode& root = *original.Node(0); | 75 TransformNode root; |
| 76 root.id = 0; | |
| 77 root.owner_id = 1; | 76 root.owner_id = 1; |
| 78 original.SetTargetId(root.id, 3); | 77 root.id = original.Insert(root, TransformTree::kDeviceNodeId); |
| 79 original.SetContentTargetId(root.id, 4); | 78 original.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 79 original.SetContentTargetId(root.id, TransformTree::kDeviceNodeId); |
| 80 TransformNode second; | 80 TransformNode second; |
| 81 second.owner_id = 2; | 81 second.owner_id = 2; |
| 82 second.data.local.Translate3d(2.f, 2.f, 0.f); | 82 second.data.local.Translate3d(2.f, 2.f, 0.f); |
| 83 second.data.source_node_id = 0; | 83 second.data.source_node_id = root.id; |
| 84 second.id = original.Insert(second, 0); | 84 second.id = original.Insert(second, root.id); |
| 85 original.SetTargetId(second.id, 0); | 85 original.SetTargetId(second.id, root.id); |
| 86 TransformNode third; | 86 TransformNode third; |
| 87 third.owner_id = 3; | 87 third.owner_id = 3; |
| 88 third.data.scrolls = true; | 88 third.data.scrolls = true; |
| 89 third.data.source_node_id = 1; | 89 third.data.source_node_id = root.id; |
| 90 third.id = original.Insert(third, 1); | 90 third.id = original.Insert(third, root.id); |
| 91 original.SetTargetId(third.id, 0); | 91 original.SetTargetId(third.id, root.id); |
| 92 | 92 |
| 93 original.set_needs_update(true); | 93 original.set_needs_update(true); |
| 94 | 94 |
| 95 original.set_page_scale_factor(0.5f); | 95 original.set_page_scale_factor(0.5f); |
| 96 original.set_device_scale_factor(0.6f); | 96 original.set_device_scale_factor(0.6f); |
| 97 gfx::Transform transform = | 97 gfx::Transform transform = |
| 98 gfx::Transform(1.05f, 2.15f, 3.14f, 4.13f, 5.12f, 6.11f, 7.1f, 8.9f, 9.8f, | 98 gfx::Transform(1.05f, 2.15f, 3.14f, 4.13f, 5.12f, 6.11f, 7.1f, 8.9f, 9.8f, |
| 99 10.7f, 11.6f, 12.5f, 13.4f, 14.3f, 15.2f, 16.1f); | 99 10.7f, 11.6f, 12.5f, 13.4f, 14.3f, 15.2f, 16.1f); |
| 100 original.SetDeviceTransformScaleFactor(transform); | 100 original.SetDeviceTransformScaleFactor(transform); |
| 101 original.AddNodeAffectedByInnerViewportBoundsDelta(0); | 101 original.AddNodeAffectedByInnerViewportBoundsDelta(0); |
| 102 original.AddNodeAffectedByOuterViewportBoundsDelta(1); | 102 original.AddNodeAffectedByOuterViewportBoundsDelta(1); |
| 103 | 103 |
| 104 proto::PropertyTree proto; | 104 proto::PropertyTree proto; |
| 105 original.ToProtobuf(&proto); | 105 original.ToProtobuf(&proto); |
| 106 TransformTree result; | 106 TransformTree result; |
| 107 std::unordered_map<int, int> transform_id_to_index_map; | 107 std::unordered_map<int, int> transform_id_to_index_map; |
| 108 result.FromProtobuf(proto, &transform_id_to_index_map); | 108 result.FromProtobuf(proto, &transform_id_to_index_map); |
| 109 | 109 |
| 110 EXPECT_EQ(transform_id_to_index_map[1], 0); | 110 EXPECT_EQ(1, transform_id_to_index_map[1]); |
| 111 EXPECT_EQ(transform_id_to_index_map[2], 1); | 111 EXPECT_EQ(2, transform_id_to_index_map[2]); |
| 112 EXPECT_EQ(transform_id_to_index_map[3], 2); | 112 EXPECT_EQ(3, transform_id_to_index_map[3]); |
| 113 EXPECT_EQ(original, result); | 113 EXPECT_EQ(original, result); |
| 114 } | 114 } |
| 115 | 115 |
| 116 TEST(PropertyTreeSerializationTest, ClipNodeDataSerialization) { | 116 TEST(PropertyTreeSerializationTest, ClipNodeDataSerialization) { |
| 117 ClipNodeData original; | 117 ClipNodeData original; |
| 118 original.clip = gfx::RectF(0.5f, 0.5f); | 118 original.clip = gfx::RectF(0.5f, 0.5f); |
| 119 original.combined_clip_in_target_space = gfx::RectF(0.6f, 0.6f); | 119 original.combined_clip_in_target_space = gfx::RectF(0.6f, 0.6f); |
| 120 original.clip_in_target_space = gfx::RectF(0.7f, 0.7f); | 120 original.clip_in_target_space = gfx::RectF(0.7f, 0.7f); |
| 121 original.transform_id = 2; | 121 original.transform_id = 2; |
| 122 original.target_id = 3; | 122 original.target_id = 3; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 144 proto::TreeNode proto; | 144 proto::TreeNode proto; |
| 145 original.ToProtobuf(&proto); | 145 original.ToProtobuf(&proto); |
| 146 ClipNode result; | 146 ClipNode result; |
| 147 result.FromProtobuf(proto); | 147 result.FromProtobuf(proto); |
| 148 | 148 |
| 149 EXPECT_EQ(original, result); | 149 EXPECT_EQ(original, result); |
| 150 } | 150 } |
| 151 | 151 |
| 152 TEST(PropertyTreeSerializationTest, ClipTreeSerialization) { | 152 TEST(PropertyTreeSerializationTest, ClipTreeSerialization) { |
| 153 ClipTree original; | 153 ClipTree original; |
| 154 ClipNode& root = *original.Node(0); | 154 ClipNode root; |
| 155 root.owner_id = 1; | 155 root.owner_id = 1; |
| 156 root.data.transform_id = 2; | 156 root.data.transform_id = 2; |
| 157 root.data.target_id = 1; | 157 root.data.target_id = 1; |
| 158 ClipNode second; | 158 ClipNode second; |
| 159 second.owner_id = 2; | 159 second.owner_id = 2; |
| 160 second.data.transform_id = 4; | 160 second.data.transform_id = 4; |
| 161 second.data.applies_local_clip = true; | 161 second.data.applies_local_clip = true; |
| 162 ClipNode third; | 162 ClipNode third; |
| 163 third.owner_id = 3; | 163 third.owner_id = 3; |
| 164 third.data.target_id = 3; | 164 third.data.target_id = 3; |
| 165 third.data.target_is_clipped = false; | 165 third.data.target_is_clipped = false; |
| 166 | 166 |
| 167 original.Insert(root, -1); |
| 167 original.Insert(second, 0); | 168 original.Insert(second, 0); |
| 168 original.Insert(third, 1); | 169 original.Insert(third, 1); |
| 169 original.set_needs_update(true); | 170 original.set_needs_update(true); |
| 170 | 171 |
| 171 proto::PropertyTree proto; | 172 proto::PropertyTree proto; |
| 172 original.ToProtobuf(&proto); | 173 original.ToProtobuf(&proto); |
| 173 ClipTree result; | 174 ClipTree result; |
| 174 std::unordered_map<int, int> clip_id_to_index_map; | 175 std::unordered_map<int, int> clip_id_to_index_map; |
| 175 result.FromProtobuf(proto, &clip_id_to_index_map); | 176 result.FromProtobuf(proto, &clip_id_to_index_map); |
| 176 | 177 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 proto::TreeNode proto; | 209 proto::TreeNode proto; |
| 209 original.ToProtobuf(&proto); | 210 original.ToProtobuf(&proto); |
| 210 EffectNode result; | 211 EffectNode result; |
| 211 result.FromProtobuf(proto); | 212 result.FromProtobuf(proto); |
| 212 | 213 |
| 213 EXPECT_EQ(original, result); | 214 EXPECT_EQ(original, result); |
| 214 } | 215 } |
| 215 | 216 |
| 216 TEST(PropertyTreeSerializationTest, EffectTreeSerialization) { | 217 TEST(PropertyTreeSerializationTest, EffectTreeSerialization) { |
| 217 EffectTree original; | 218 EffectTree original; |
| 218 EffectNode& root = *original.Node(0); | 219 EffectNode root; |
| 219 root.owner_id = 5; | 220 root.owner_id = 5; |
| 220 root.data.transform_id = 2; | 221 root.data.transform_id = 2; |
| 221 root.data.clip_id = 1; | 222 root.data.clip_id = 1; |
| 222 EffectNode second; | 223 EffectNode second; |
| 223 second.owner_id = 6; | 224 second.owner_id = 6; |
| 224 second.data.transform_id = 4; | 225 second.data.transform_id = 4; |
| 225 second.data.opacity = true; | 226 second.data.opacity = true; |
| 226 second.data.mask_layer_id = 32; | 227 second.data.mask_layer_id = 32; |
| 227 EffectNode third; | 228 EffectNode third; |
| 228 third.owner_id = 7; | 229 third.owner_id = 7; |
| 229 third.data.clip_id = 3; | 230 third.data.clip_id = 3; |
| 230 third.data.replica_layer_id = 44; | 231 third.data.replica_layer_id = 44; |
| 231 third.data.replica_mask_layer_id = 45; | 232 third.data.replica_mask_layer_id = 45; |
| 232 third.data.has_render_surface = false; | 233 third.data.has_render_surface = false; |
| 233 | 234 |
| 235 original.Insert(root, -1); |
| 234 original.Insert(second, 0); | 236 original.Insert(second, 0); |
| 235 original.Insert(third, 1); | 237 original.Insert(third, 1); |
| 236 original.AddMaskOrReplicaLayerId(32); | 238 original.AddMaskOrReplicaLayerId(32); |
| 237 original.AddMaskOrReplicaLayerId(44); | 239 original.AddMaskOrReplicaLayerId(44); |
| 238 original.AddMaskOrReplicaLayerId(45); | 240 original.AddMaskOrReplicaLayerId(45); |
| 239 original.set_needs_update(true); | 241 original.set_needs_update(true); |
| 240 | 242 |
| 241 proto::PropertyTree proto; | 243 proto::PropertyTree proto; |
| 242 original.ToProtobuf(&proto); | 244 original.ToProtobuf(&proto); |
| 243 EffectTree result; | 245 EffectTree result; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 ScrollNode result; | 283 ScrollNode result; |
| 282 result.FromProtobuf(proto); | 284 result.FromProtobuf(proto); |
| 283 | 285 |
| 284 EXPECT_EQ(original, result); | 286 EXPECT_EQ(original, result); |
| 285 } | 287 } |
| 286 | 288 |
| 287 TEST(PropertyTreeSerializationTest, ScrollTreeSerialization) { | 289 TEST(PropertyTreeSerializationTest, ScrollTreeSerialization) { |
| 288 PropertyTrees property_trees; | 290 PropertyTrees property_trees; |
| 289 property_trees.is_main_thread = true; | 291 property_trees.is_main_thread = true; |
| 290 ScrollTree& original = property_trees.scroll_tree; | 292 ScrollTree& original = property_trees.scroll_tree; |
| 293 ScrollNode root; |
| 294 original.Insert(root, -1); |
| 291 ScrollNode second; | 295 ScrollNode second; |
| 292 second.owner_id = 10; | 296 second.owner_id = 10; |
| 293 second.data.scrollable = true; | 297 second.data.scrollable = true; |
| 294 second.data.bounds = gfx::Size(15, 15); | 298 second.data.bounds = gfx::Size(15, 15); |
| 295 ScrollNode third; | 299 ScrollNode third; |
| 296 third.owner_id = 20; | 300 third.owner_id = 20; |
| 297 third.data.contains_non_fast_scrollable_region = true; | 301 third.data.contains_non_fast_scrollable_region = true; |
| 298 | 302 |
| 299 original.Insert(second, 0); | 303 original.Insert(second, 0); |
| 300 original.Insert(third, 1); | 304 original.Insert(third, 1); |
| 301 | 305 |
| 302 original.set_currently_scrolling_node(1); | 306 original.set_currently_scrolling_node(1); |
| 303 original.SetScrollOffset(1, gfx::ScrollOffset(1, 2)); | 307 original.SetScrollOffset(1, gfx::ScrollOffset(1, 2)); |
| 304 | 308 |
| 305 proto::PropertyTree proto; | 309 proto::PropertyTree proto; |
| 306 original.ToProtobuf(&proto); | 310 original.ToProtobuf(&proto); |
| 307 ScrollTree result; | 311 ScrollTree result; |
| 308 std::unordered_map<int, int> scroll_id_to_index_map; | 312 std::unordered_map<int, int> scroll_id_to_index_map; |
| 309 result.FromProtobuf(proto, &scroll_id_to_index_map); | 313 result.FromProtobuf(proto, &scroll_id_to_index_map); |
| 310 | 314 |
| 311 EXPECT_EQ(original, result); | 315 EXPECT_EQ(original, result); |
| 312 EXPECT_EQ(scroll_id_to_index_map[10], 1); | 316 EXPECT_EQ(scroll_id_to_index_map[10], 1); |
| 313 EXPECT_EQ(scroll_id_to_index_map[20], 2); | 317 EXPECT_EQ(scroll_id_to_index_map[20], 2); |
| 314 | 318 |
| 315 original.clear(); | 319 original.clear(); |
| 320 ScrollNode root2; |
| 321 original.Insert(root, -1); |
| 316 original.set_currently_scrolling_node(0); | 322 original.set_currently_scrolling_node(0); |
| 317 original.SetScrollOffset(2, gfx::ScrollOffset(1, 2)); | 323 original.SetScrollOffset(2, gfx::ScrollOffset(1, 2)); |
| 318 | 324 |
| 319 proto::PropertyTree proto2; | 325 proto::PropertyTree proto2; |
| 320 original.ToProtobuf(&proto2); | 326 original.ToProtobuf(&proto2); |
| 321 result = ScrollTree(); | 327 result = ScrollTree(); |
| 322 scroll_id_to_index_map.clear(); | 328 scroll_id_to_index_map.clear(); |
| 323 result.FromProtobuf(proto2, &scroll_id_to_index_map); | 329 result.FromProtobuf(proto2, &scroll_id_to_index_map); |
| 324 | 330 |
| 325 EXPECT_EQ(original, result); | 331 EXPECT_EQ(original, result); |
| 326 } | 332 } |
| 327 | 333 |
| 328 TEST(PropertyTreeSerializationTest, PropertyTrees) { | 334 TEST(PropertyTreeSerializationTest, PropertyTrees) { |
| 329 PropertyTrees original; | 335 PropertyTrees original; |
| 330 TransformNode transform_node1 = TransformNode(); | 336 TransformNode transform_node1 = TransformNode(); |
| 331 transform_node1.owner_id = 10; | 337 transform_node1.owner_id = 10; |
| 332 transform_node1.id = original.transform_tree.Insert(transform_node1, 0); | 338 transform_node1.id = original.transform_tree.Insert( |
| 339 transform_node1, TransformTree::kDeviceNodeId); |
| 333 TransformNode transform_node2 = TransformNode(); | 340 TransformNode transform_node2 = TransformNode(); |
| 334 transform_node2.owner_id = 20; | 341 transform_node2.owner_id = 20; |
| 335 transform_node2.id = original.transform_tree.Insert(transform_node2, 1); | 342 transform_node2.id = |
| 336 original.transform_id_to_index_map[10] = 1; | 343 original.transform_tree.Insert(transform_node2, transform_node1.id); |
| 337 original.transform_id_to_index_map[20] = 2; | 344 original.transform_id_to_index_map[10] = transform_node1.id; |
| 345 original.transform_id_to_index_map[20] = transform_node2.id; |
| 338 | 346 |
| 339 ClipNode clip_node1 = ClipNode(); | 347 ClipNode clip_node1 = ClipNode(); |
| 340 clip_node1.owner_id = 10; | 348 clip_node1.owner_id = 10; |
| 341 clip_node1.id = original.clip_tree.Insert(clip_node1, 0); | 349 clip_node1.id = |
| 350 original.clip_tree.Insert(clip_node1, ClipTree::kInvalidNodeId); |
| 342 ClipNode clip_node2 = ClipNode(); | 351 ClipNode clip_node2 = ClipNode(); |
| 343 clip_node2.owner_id = 22; | 352 clip_node2.owner_id = 22; |
| 344 clip_node2.id = original.clip_tree.Insert(clip_node2, 1); | 353 clip_node2.id = original.clip_tree.Insert(clip_node2, clip_node1.id); |
| 345 original.clip_id_to_index_map[10] = 1; | 354 original.clip_id_to_index_map[10] = clip_node1.id; |
| 346 original.clip_id_to_index_map[22] = 2; | 355 original.clip_id_to_index_map[22] = clip_node2.id; |
| 347 | 356 |
| 348 EffectNode effect_node1 = EffectNode(); | 357 EffectNode effect_node1 = EffectNode(); |
| 349 effect_node1.owner_id = 11; | 358 effect_node1.owner_id = 11; |
| 350 effect_node1.id = original.effect_tree.Insert(effect_node1, 0); | 359 effect_node1.id = |
| 360 original.effect_tree.Insert(effect_node1, EffectTree::kInvalidNodeId); |
| 351 EffectNode effect_node2 = EffectNode(); | 361 EffectNode effect_node2 = EffectNode(); |
| 352 effect_node2.owner_id = 23; | 362 effect_node2.owner_id = 23; |
| 353 effect_node2.id = original.effect_tree.Insert(effect_node2, 1); | 363 effect_node2.id = original.effect_tree.Insert(effect_node2, effect_node1.id); |
| 354 original.effect_id_to_index_map[11] = 1; | 364 original.effect_id_to_index_map[11] = effect_node1.id; |
| 355 original.effect_id_to_index_map[23] = 2; | 365 original.effect_id_to_index_map[23] = effect_node2.id; |
| 356 | 366 |
| 357 ScrollNode scroll_node1 = ScrollNode(); | 367 ScrollNode scroll_node1 = ScrollNode(); |
| 358 scroll_node1.owner_id = 10; | 368 scroll_node1.owner_id = 10; |
| 359 scroll_node1.id = original.scroll_tree.Insert(scroll_node1, 0); | 369 scroll_node1.id = |
| 370 original.scroll_tree.Insert(scroll_node1, ScrollTree::kInvalidNodeId); |
| 360 ScrollNode scroll_node2 = ScrollNode(); | 371 ScrollNode scroll_node2 = ScrollNode(); |
| 361 scroll_node2.owner_id = 20; | 372 scroll_node2.owner_id = 20; |
| 362 scroll_node2.id = original.scroll_tree.Insert(scroll_node2, 1); | 373 scroll_node2.id = original.scroll_tree.Insert(scroll_node2, scroll_node1.id); |
| 363 original.scroll_id_to_index_map[10] = 1; | 374 original.scroll_id_to_index_map[10] = scroll_node1.id; |
| 364 original.scroll_id_to_index_map[20] = 2; | 375 original.scroll_id_to_index_map[20] = scroll_node2.id; |
| 365 | 376 |
| 366 original.needs_rebuild = false; | 377 original.needs_rebuild = false; |
| 367 original.non_root_surfaces_enabled = false; | 378 original.non_root_surfaces_enabled = false; |
| 368 original.sequence_number = 3; | 379 original.sequence_number = 3; |
| 369 | 380 |
| 370 proto::PropertyTrees proto; | 381 proto::PropertyTrees proto; |
| 371 original.ToProtobuf(&proto); | 382 original.ToProtobuf(&proto); |
| 372 PropertyTrees result; | 383 PropertyTrees result; |
| 373 result.FromProtobuf(proto); | 384 result.FromProtobuf(proto); |
| 374 | 385 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 | 440 |
| 430 #define DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ | 441 #define DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ |
| 431 DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME); \ | 442 DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME); \ |
| 432 SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) | 443 SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) |
| 433 | 444 |
| 434 class PropertyTreeTestComputeTransformRoot : public PropertyTreeTest { | 445 class PropertyTreeTestComputeTransformRoot : public PropertyTreeTest { |
| 435 protected: | 446 protected: |
| 436 void StartTest() override { | 447 void StartTest() override { |
| 437 PropertyTrees property_trees; | 448 PropertyTrees property_trees; |
| 438 TransformTree& tree = property_trees.transform_tree; | 449 TransformTree& tree = property_trees.transform_tree; |
| 439 TransformNode& root = *tree.Node(0); | 450 TransformNode root; |
| 440 root.id = 0; | |
| 441 root.data.local.Translate(2, 2); | 451 root.data.local.Translate(2, 2); |
| 442 tree.SetTargetId(root.id, 0); | 452 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 453 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 443 SetupTransformTreeForTest(&tree); | 454 SetupTransformTreeForTest(&tree); |
| 444 tree.UpdateTransforms(0); | 455 tree.UpdateTransforms(root.id); |
| 445 | 456 |
| 446 gfx::Transform expected; | 457 gfx::Transform expected; |
| 447 gfx::Transform transform; | 458 gfx::Transform transform; |
| 448 bool success = tree.ComputeTransform(0, 0, &transform); | 459 bool success = tree.ComputeTransform(root.id, root.id, &transform); |
| 449 EXPECT_TRUE(success); | 460 EXPECT_TRUE(success); |
| 450 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 461 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 451 | 462 |
| 452 transform.MakeIdentity(); | 463 transform.MakeIdentity(); |
| 453 expected.Translate(2, 2); | 464 expected.Translate(2, 2); |
| 454 success = tree.ComputeTransform(0, -1, &transform); | 465 success = tree.ComputeTransform(root.id, TransformTree::kDeviceNodeId, |
| 466 &transform); |
| 455 EXPECT_TRUE(success); | 467 EXPECT_TRUE(success); |
| 456 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 468 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 457 | 469 |
| 458 transform.MakeIdentity(); | 470 transform.MakeIdentity(); |
| 459 expected.MakeIdentity(); | 471 expected.MakeIdentity(); |
| 460 expected.Translate(-2, -2); | 472 expected.Translate(-2, -2); |
| 461 success = tree.ComputeTransform(-1, 0, &transform); | 473 success = tree.ComputeTransform(TransformTree::kDeviceNodeId, root.id, |
| 474 &transform); |
| 462 EXPECT_TRUE(success); | 475 EXPECT_TRUE(success); |
| 463 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 476 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 464 } | 477 } |
| 465 }; | 478 }; |
| 466 | 479 |
| 467 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 480 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 468 PropertyTreeTestComputeTransformRoot); | 481 PropertyTreeTestComputeTransformRoot); |
| 469 | 482 |
| 470 class PropertyTreeTestComputeTransformChild : public PropertyTreeTest { | 483 class PropertyTreeTestComputeTransformChild : public PropertyTreeTest { |
| 471 protected: | 484 protected: |
| 472 void StartTest() override { | 485 void StartTest() override { |
| 473 PropertyTrees property_trees; | 486 PropertyTrees property_trees; |
| 474 TransformTree& tree = property_trees.transform_tree; | 487 TransformTree& tree = property_trees.transform_tree; |
| 475 TransformNode& root = *tree.Node(0); | 488 TransformNode root; |
| 476 root.data.local.Translate(2, 2); | 489 root.data.local.Translate(2, 2); |
| 477 tree.SetTargetId(root.id, 0); | 490 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 478 tree.UpdateTransforms(0); | 491 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 492 tree.UpdateTransforms(root.id); |
| 479 | 493 |
| 480 TransformNode child; | 494 TransformNode child; |
| 481 child.data.local.Translate(3, 3); | 495 child.data.local.Translate(3, 3); |
| 482 child.data.source_node_id = 0; | 496 child.data.source_node_id = root.id; |
| 483 child.id = tree.Insert(child, 0); | 497 child.id = tree.Insert(child, root.id); |
| 484 tree.SetTargetId(child.id, 0); | 498 tree.SetTargetId(child.id, root.id); |
| 485 | 499 |
| 486 SetupTransformTreeForTest(&tree); | 500 SetupTransformTreeForTest(&tree); |
| 487 tree.UpdateTransforms(1); | 501 tree.UpdateTransforms(child.id); |
| 488 | 502 |
| 489 gfx::Transform expected; | 503 gfx::Transform expected; |
| 490 gfx::Transform transform; | 504 gfx::Transform transform; |
| 491 | 505 |
| 492 expected.Translate(3, 3); | 506 expected.Translate(3, 3); |
| 493 bool success = tree.ComputeTransform(1, 0, &transform); | 507 bool success = tree.ComputeTransform(child.id, root.id, &transform); |
| 494 EXPECT_TRUE(success); | 508 EXPECT_TRUE(success); |
| 495 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 509 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 496 | 510 |
| 497 transform.MakeIdentity(); | 511 transform.MakeIdentity(); |
| 498 expected.MakeIdentity(); | 512 expected.MakeIdentity(); |
| 499 expected.Translate(-3, -3); | 513 expected.Translate(-3, -3); |
| 500 success = tree.ComputeTransform(0, 1, &transform); | 514 success = tree.ComputeTransform(root.id, child.id, &transform); |
| 501 EXPECT_TRUE(success); | 515 EXPECT_TRUE(success); |
| 502 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 516 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 503 | 517 |
| 504 transform.MakeIdentity(); | 518 transform.MakeIdentity(); |
| 505 expected.MakeIdentity(); | 519 expected.MakeIdentity(); |
| 506 expected.Translate(5, 5); | 520 expected.Translate(5, 5); |
| 507 success = tree.ComputeTransform(1, -1, &transform); | 521 success = tree.ComputeTransform(child.id, TransformTree::kDeviceNodeId, |
| 522 &transform); |
| 508 EXPECT_TRUE(success); | 523 EXPECT_TRUE(success); |
| 509 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 524 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 510 | 525 |
| 511 transform.MakeIdentity(); | 526 transform.MakeIdentity(); |
| 512 expected.MakeIdentity(); | 527 expected.MakeIdentity(); |
| 513 expected.Translate(-5, -5); | 528 expected.Translate(-5, -5); |
| 514 success = tree.ComputeTransform(-1, 1, &transform); | 529 success = tree.ComputeTransform(TransformTree::kDeviceNodeId, child.id, |
| 530 &transform); |
| 515 EXPECT_TRUE(success); | 531 EXPECT_TRUE(success); |
| 516 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 532 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 517 } | 533 } |
| 518 }; | 534 }; |
| 519 | 535 |
| 520 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 536 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 521 PropertyTreeTestComputeTransformChild); | 537 PropertyTreeTestComputeTransformChild); |
| 522 | 538 |
| 523 class PropertyTreeTestComputeTransformSibling : public PropertyTreeTest { | 539 class PropertyTreeTestComputeTransformSibling : public PropertyTreeTest { |
| 524 protected: | 540 protected: |
| 525 void StartTest() override { | 541 void StartTest() override { |
| 526 PropertyTrees property_trees; | 542 PropertyTrees property_trees; |
| 527 TransformTree& tree = property_trees.transform_tree; | 543 TransformTree& tree = property_trees.transform_tree; |
| 528 TransformNode& root = *tree.Node(0); | 544 TransformNode root; |
| 529 root.data.local.Translate(2, 2); | 545 root.data.local.Translate(2, 2); |
| 530 tree.SetTargetId(root.id, 0); | 546 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 531 tree.UpdateTransforms(0); | 547 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 548 tree.UpdateTransforms(TransformTree::kDeviceNodeId); |
| 532 | 549 |
| 533 TransformNode child; | 550 TransformNode child; |
| 534 child.data.local.Translate(3, 3); | 551 child.data.local.Translate(3, 3); |
| 535 child.data.source_node_id = 0; | 552 child.data.source_node_id = root.id; |
| 536 child.id = tree.Insert(child, 0); | 553 child.id = tree.Insert(child, root.id); |
| 537 tree.SetTargetId(child.id, 0); | 554 tree.SetTargetId(child.id, root.id); |
| 538 | 555 |
| 539 TransformNode sibling; | 556 TransformNode sibling; |
| 540 sibling.data.local.Translate(7, 7); | 557 sibling.data.local.Translate(7, 7); |
| 541 sibling.data.source_node_id = 0; | 558 sibling.data.source_node_id = root.id; |
| 542 sibling.id = tree.Insert(sibling, 0); | 559 sibling.id = tree.Insert(sibling, root.id); |
| 543 tree.SetTargetId(sibling.id, 0); | 560 tree.SetTargetId(sibling.id, root.id); |
| 544 | 561 |
| 545 SetupTransformTreeForTest(&tree); | 562 SetupTransformTreeForTest(&tree); |
| 546 | 563 |
| 547 tree.UpdateTransforms(1); | 564 tree.UpdateTransforms(child.id); |
| 548 tree.UpdateTransforms(2); | 565 tree.UpdateTransforms(sibling.id); |
| 549 | 566 |
| 550 gfx::Transform expected; | 567 gfx::Transform expected; |
| 551 gfx::Transform transform; | 568 gfx::Transform transform; |
| 552 | 569 |
| 553 expected.Translate(4, 4); | 570 expected.Translate(4, 4); |
| 554 bool success = tree.ComputeTransform(2, 1, &transform); | 571 bool success = tree.ComputeTransform(sibling.id, child.id, &transform); |
| 555 EXPECT_TRUE(success); | 572 EXPECT_TRUE(success); |
| 556 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 573 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 557 | 574 |
| 558 transform.MakeIdentity(); | 575 transform.MakeIdentity(); |
| 559 expected.MakeIdentity(); | 576 expected.MakeIdentity(); |
| 560 expected.Translate(-4, -4); | 577 expected.Translate(-4, -4); |
| 561 success = tree.ComputeTransform(1, 2, &transform); | 578 success = tree.ComputeTransform(child.id, sibling.id, &transform); |
| 562 EXPECT_TRUE(success); | 579 EXPECT_TRUE(success); |
| 563 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 580 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 564 } | 581 } |
| 565 }; | 582 }; |
| 566 | 583 |
| 567 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 584 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 568 PropertyTreeTestComputeTransformSibling); | 585 PropertyTreeTestComputeTransformSibling); |
| 569 | 586 |
| 570 class PropertyTreeTestComputeTransformSiblingSingularAncestor | 587 class PropertyTreeTestComputeTransformSiblingSingularAncestor |
| 571 : public PropertyTreeTest { | 588 : public PropertyTreeTest { |
| 572 protected: | 589 protected: |
| 573 void StartTest() override { | 590 void StartTest() override { |
| 574 // In this test, we have the following tree: | 591 // In this test, we have the following tree: |
| 575 // root | 592 // root |
| 576 // + singular | 593 // + singular |
| 577 // + child | 594 // + child |
| 578 // + sibling | 595 // + sibling |
| 579 // Since the lowest common ancestor of |child| and |sibling| has a singular | 596 // Since the lowest common ancestor of |child| and |sibling| has a singular |
| 580 // transform, we cannot use screen space transforms to compute change of | 597 // transform, we cannot use screen space transforms to compute change of |
| 581 // basis | 598 // basis |
| 582 // transforms between these nodes. | 599 // transforms between these nodes. |
| 583 PropertyTrees property_trees; | 600 PropertyTrees property_trees; |
| 584 TransformTree& tree = property_trees.transform_tree; | 601 TransformTree& tree = property_trees.transform_tree; |
| 585 TransformNode& root = *tree.Node(0); | 602 TransformNode root; |
| 586 root.data.local.Translate(2, 2); | 603 root.data.local.Translate(2, 2); |
| 587 tree.SetTargetId(root.id, 0); | 604 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 588 tree.UpdateTransforms(0); | 605 tree.SetTargetId(root.id, root.id); |
| 606 tree.UpdateTransforms(root.id); |
| 589 | 607 |
| 590 TransformNode singular; | 608 TransformNode singular; |
| 591 singular.data.local.matrix().set(2, 2, 0.0); | 609 singular.data.local.matrix().set(2, 2, 0.0); |
| 592 singular.data.source_node_id = 0; | 610 singular.data.source_node_id = root.id; |
| 593 singular.id = tree.Insert(singular, 0); | 611 singular.id = tree.Insert(singular, root.id); |
| 594 tree.SetTargetId(singular.id, 0); | 612 tree.SetTargetId(singular.id, root.id); |
| 595 | 613 |
| 596 TransformNode child; | 614 TransformNode child; |
| 597 child.data.local.Translate(3, 3); | 615 child.data.local.Translate(3, 3); |
| 598 child.data.source_node_id = 1; | 616 child.data.source_node_id = singular.id; |
| 599 child.id = tree.Insert(child, 1); | 617 child.id = tree.Insert(child, singular.id); |
| 600 tree.SetTargetId(child.id, 0); | 618 tree.SetTargetId(child.id, root.id); |
| 601 | 619 |
| 602 TransformNode sibling; | 620 TransformNode sibling; |
| 603 sibling.data.local.Translate(7, 7); | 621 sibling.data.local.Translate(7, 7); |
| 604 sibling.data.source_node_id = 1; | 622 sibling.data.source_node_id = singular.id; |
| 605 sibling.id = tree.Insert(sibling, 1); | 623 sibling.id = tree.Insert(sibling, singular.id); |
| 606 tree.SetTargetId(sibling.id, 0); | 624 tree.SetTargetId(sibling.id, root.id); |
| 607 | 625 |
| 608 SetupTransformTreeForTest(&tree); | 626 SetupTransformTreeForTest(&tree); |
| 609 | 627 |
| 610 tree.UpdateTransforms(1); | 628 tree.UpdateTransforms(singular.id); |
| 611 tree.UpdateTransforms(2); | 629 tree.UpdateTransforms(child.id); |
| 612 tree.UpdateTransforms(3); | 630 tree.UpdateTransforms(sibling.id); |
| 613 | 631 |
| 614 gfx::Transform expected; | 632 gfx::Transform expected; |
| 615 gfx::Transform transform; | 633 gfx::Transform transform; |
| 616 | 634 |
| 617 expected.Translate(4, 4); | 635 expected.Translate(4, 4); |
| 618 bool success = tree.ComputeTransform(3, 2, &transform); | 636 bool success = tree.ComputeTransform(sibling.id, child.id, &transform); |
| 619 EXPECT_TRUE(success); | 637 EXPECT_TRUE(success); |
| 620 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 638 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 621 | 639 |
| 622 transform.MakeIdentity(); | 640 transform.MakeIdentity(); |
| 623 expected.MakeIdentity(); | 641 expected.MakeIdentity(); |
| 624 expected.Translate(-4, -4); | 642 expected.Translate(-4, -4); |
| 625 success = tree.ComputeTransform(2, 3, &transform); | 643 success = tree.ComputeTransform(child.id, sibling.id, &transform); |
| 626 EXPECT_TRUE(success); | 644 EXPECT_TRUE(success); |
| 627 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 645 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 628 } | 646 } |
| 629 }; | 647 }; |
| 630 | 648 |
| 631 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 649 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 632 PropertyTreeTestComputeTransformSiblingSingularAncestor); | 650 PropertyTreeTestComputeTransformSiblingSingularAncestor); |
| 633 | 651 |
| 634 class PropertyTreeTestTransformsWithFlattening : public PropertyTreeTest { | 652 class PropertyTreeTestTransformsWithFlattening : public PropertyTreeTest { |
| 635 protected: | 653 protected: |
| 636 void StartTest() override { | 654 void StartTest() override { |
| 637 PropertyTrees property_trees; | 655 PropertyTrees property_trees; |
| 638 TransformTree& tree = property_trees.transform_tree; | 656 TransformTree& tree = property_trees.transform_tree; |
| 639 | 657 |
| 640 int grand_parent = tree.Insert(TransformNode(), 0); | 658 int grand_parent = |
| 659 tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 641 tree.SetContentTargetId(grand_parent, grand_parent); | 660 tree.SetContentTargetId(grand_parent, grand_parent); |
| 642 tree.SetTargetId(grand_parent, grand_parent); | 661 tree.SetTargetId(grand_parent, grand_parent); |
| 643 tree.Node(grand_parent)->data.source_node_id = 0; | 662 tree.Node(grand_parent)->data.source_node_id = TransformTree::kDeviceNodeId; |
| 644 | 663 |
| 645 gfx::Transform rotation_about_x; | 664 gfx::Transform rotation_about_x; |
| 646 rotation_about_x.RotateAboutXAxis(15); | 665 rotation_about_x.RotateAboutXAxis(15); |
| 647 | 666 |
| 648 int parent = tree.Insert(TransformNode(), grand_parent); | 667 int parent = tree.Insert(TransformNode(), grand_parent); |
| 649 tree.Node(parent)->data.needs_sublayer_scale = true; | 668 tree.Node(parent)->data.needs_sublayer_scale = true; |
| 650 tree.SetTargetId(parent, grand_parent); | 669 tree.SetTargetId(parent, grand_parent); |
| 651 tree.SetContentTargetId(parent, parent); | 670 tree.SetContentTargetId(parent, parent); |
| 652 tree.Node(parent)->data.source_node_id = grand_parent; | 671 tree.Node(parent)->data.source_node_id = grand_parent; |
| 653 tree.Node(parent)->data.local = rotation_about_x; | 672 tree.Node(parent)->data.local = rotation_about_x; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 }; | 732 }; |
| 714 | 733 |
| 715 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 734 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 716 PropertyTreeTestTransformsWithFlattening); | 735 PropertyTreeTestTransformsWithFlattening); |
| 717 | 736 |
| 718 class PropertyTreeTestMultiplicationOrder : public PropertyTreeTest { | 737 class PropertyTreeTestMultiplicationOrder : public PropertyTreeTest { |
| 719 protected: | 738 protected: |
| 720 void StartTest() override { | 739 void StartTest() override { |
| 721 PropertyTrees property_trees; | 740 PropertyTrees property_trees; |
| 722 TransformTree& tree = property_trees.transform_tree; | 741 TransformTree& tree = property_trees.transform_tree; |
| 723 TransformNode& root = *tree.Node(0); | 742 TransformNode root; |
| 724 root.data.local.Translate(2, 2); | 743 root.data.local.Translate(2, 2); |
| 725 tree.SetTargetId(root.id, 0); | 744 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 726 tree.UpdateTransforms(0); | 745 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 746 tree.UpdateTransforms(root.id); |
| 727 | 747 |
| 728 TransformNode child; | 748 TransformNode child; |
| 729 child.data.local.Scale(2, 2); | 749 child.data.local.Scale(2, 2); |
| 730 child.data.source_node_id = 0; | 750 child.data.source_node_id = root.id; |
| 731 child.id = tree.Insert(child, 0); | 751 child.id = tree.Insert(child, root.id); |
| 732 tree.SetTargetId(child.id, 0); | 752 tree.SetTargetId(child.id, root.id); |
| 733 | 753 |
| 734 SetupTransformTreeForTest(&tree); | 754 SetupTransformTreeForTest(&tree); |
| 735 tree.UpdateTransforms(1); | 755 tree.UpdateTransforms(child.id); |
| 736 | 756 |
| 737 gfx::Transform expected; | 757 gfx::Transform expected; |
| 738 expected.Translate(2, 2); | 758 expected.Translate(2, 2); |
| 739 expected.Scale(2, 2); | 759 expected.Scale(2, 2); |
| 740 | 760 |
| 741 gfx::Transform transform; | 761 gfx::Transform transform; |
| 742 gfx::Transform inverse; | 762 gfx::Transform inverse; |
| 743 | 763 |
| 744 bool success = tree.ComputeTransform(1, -1, &transform); | 764 bool success = tree.ComputeTransform(child.id, TransformTree::kDeviceNodeId, |
| 765 &transform); |
| 745 EXPECT_TRUE(success); | 766 EXPECT_TRUE(success); |
| 746 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 767 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 747 | 768 |
| 748 success = tree.ComputeTransform(-1, 1, &inverse); | 769 success = |
| 770 tree.ComputeTransform(TransformTree::kDeviceNodeId, child.id, &inverse); |
| 749 EXPECT_TRUE(success); | 771 EXPECT_TRUE(success); |
| 750 | 772 |
| 751 transform = transform * inverse; | 773 transform = transform * inverse; |
| 752 expected.MakeIdentity(); | 774 expected.MakeIdentity(); |
| 753 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 775 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 754 } | 776 } |
| 755 }; | 777 }; |
| 756 | 778 |
| 757 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(PropertyTreeTestMultiplicationOrder); | 779 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(PropertyTreeTestMultiplicationOrder); |
| 758 | 780 |
| 759 class PropertyTreeTestComputeTransformWithUninvertibleTransform | 781 class PropertyTreeTestComputeTransformWithUninvertibleTransform |
| 760 : public PropertyTreeTest { | 782 : public PropertyTreeTest { |
| 761 protected: | 783 protected: |
| 762 void StartTest() override { | 784 void StartTest() override { |
| 763 PropertyTrees property_trees; | 785 PropertyTrees property_trees; |
| 764 TransformTree& tree = property_trees.transform_tree; | 786 TransformTree& tree = property_trees.transform_tree; |
| 765 TransformNode& root = *tree.Node(0); | 787 TransformNode root; |
| 766 tree.SetTargetId(root.id, 0); | 788 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 767 tree.UpdateTransforms(0); | 789 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 790 tree.UpdateTransforms(root.id); |
| 768 | 791 |
| 769 TransformNode child; | 792 TransformNode child; |
| 770 child.data.local.Scale(0, 0); | 793 child.data.local.Scale(0, 0); |
| 771 child.data.source_node_id = 0; | 794 child.data.source_node_id = root.id; |
| 772 child.id = tree.Insert(child, 0); | 795 child.id = tree.Insert(child, root.id); |
| 773 tree.SetTargetId(child.id, 0); | 796 tree.SetTargetId(child.id, root.id); |
| 774 | 797 |
| 775 SetupTransformTreeForTest(&tree); | 798 SetupTransformTreeForTest(&tree); |
| 776 tree.UpdateTransforms(1); | 799 tree.UpdateTransforms(child.id); |
| 777 | 800 |
| 778 gfx::Transform expected; | 801 gfx::Transform expected; |
| 779 expected.Scale(0, 0); | 802 expected.Scale(0, 0); |
| 780 | 803 |
| 781 gfx::Transform transform; | 804 gfx::Transform transform; |
| 782 gfx::Transform inverse; | 805 gfx::Transform inverse; |
| 783 | 806 |
| 784 bool success = tree.ComputeTransform(1, 0, &transform); | 807 bool success = tree.ComputeTransform(child.id, root.id, &transform); |
| 785 EXPECT_TRUE(success); | 808 EXPECT_TRUE(success); |
| 786 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 809 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 787 | 810 |
| 788 // To compute this would require inverting the 0 matrix, so we cannot | 811 // To compute this would require inverting the 0 matrix, so we cannot |
| 789 // succeed. | 812 // succeed. |
| 790 success = tree.ComputeTransform(0, 1, &inverse); | 813 success = tree.ComputeTransform(root.id, child.id, &inverse); |
| 791 EXPECT_FALSE(success); | 814 EXPECT_FALSE(success); |
| 792 } | 815 } |
| 793 }; | 816 }; |
| 794 | 817 |
| 795 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 818 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 796 PropertyTreeTestComputeTransformWithUninvertibleTransform); | 819 PropertyTreeTestComputeTransformWithUninvertibleTransform); |
| 797 | 820 |
| 798 class PropertyTreeTestComputeTransformWithSublayerScale | 821 class PropertyTreeTestComputeTransformWithSublayerScale |
| 799 : public PropertyTreeTest { | 822 : public PropertyTreeTest { |
| 800 protected: | 823 protected: |
| 801 void StartTest() override { | 824 void StartTest() override { |
| 802 PropertyTrees property_trees; | 825 PropertyTrees property_trees; |
| 803 TransformTree& tree = property_trees.transform_tree; | 826 TransformTree& tree = property_trees.transform_tree; |
| 804 TransformNode& root = *tree.Node(0); | 827 TransformNode root; |
| 805 root.id = 0; | 828 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 806 tree.SetTargetId(root.id, 0); | 829 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 807 tree.UpdateTransforms(0); | 830 tree.UpdateTransforms(root.id); |
| 808 | 831 |
| 809 TransformNode grand_parent; | 832 TransformNode grand_parent; |
| 810 grand_parent.data.local.Scale(2.f, 2.f); | 833 grand_parent.data.local.Scale(2.f, 2.f); |
| 811 grand_parent.data.source_node_id = 0; | 834 grand_parent.data.source_node_id = root.id; |
| 812 grand_parent.data.needs_sublayer_scale = true; | 835 grand_parent.data.needs_sublayer_scale = true; |
| 813 int grand_parent_id = tree.Insert(grand_parent, 0); | 836 int grand_parent_id = tree.Insert(grand_parent, root.id); |
| 814 tree.SetTargetId(grand_parent_id, 0); | 837 tree.SetTargetId(grand_parent_id, root.id); |
| 815 tree.UpdateTransforms(grand_parent_id); | 838 tree.UpdateTransforms(grand_parent_id); |
| 816 | 839 |
| 817 TransformNode parent; | 840 TransformNode parent; |
| 818 parent.data.local.Translate(15.f, 15.f); | 841 parent.data.local.Translate(15.f, 15.f); |
| 819 parent.data.source_node_id = grand_parent_id; | 842 parent.data.source_node_id = grand_parent_id; |
| 820 int parent_id = tree.Insert(parent, grand_parent_id); | 843 int parent_id = tree.Insert(parent, grand_parent_id); |
| 821 tree.SetTargetId(parent_id, grand_parent_id); | 844 tree.SetTargetId(parent_id, grand_parent_id); |
| 822 tree.UpdateTransforms(parent_id); | 845 tree.UpdateTransforms(parent_id); |
| 823 | 846 |
| 824 TransformNode child; | 847 TransformNode child; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 | 936 |
| 914 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 937 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 915 PropertyTreeTestComputeTransformWithSublayerScale); | 938 PropertyTreeTestComputeTransformWithSublayerScale); |
| 916 | 939 |
| 917 class PropertyTreeTestComputeTransformToTargetWithZeroSublayerScale | 940 class PropertyTreeTestComputeTransformToTargetWithZeroSublayerScale |
| 918 : public PropertyTreeTest { | 941 : public PropertyTreeTest { |
| 919 protected: | 942 protected: |
| 920 void StartTest() override { | 943 void StartTest() override { |
| 921 PropertyTrees property_trees; | 944 PropertyTrees property_trees; |
| 922 TransformTree& tree = property_trees.transform_tree; | 945 TransformTree& tree = property_trees.transform_tree; |
| 923 TransformNode& root = *tree.Node(0); | 946 TransformNode root; |
| 924 tree.SetTargetId(root.id, 0); | 947 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 925 tree.UpdateTransforms(0); | 948 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 949 tree.UpdateTransforms(root.id); |
| 926 | 950 |
| 927 TransformNode grand_parent; | 951 TransformNode grand_parent; |
| 928 grand_parent.data.local.Scale(2.f, 0.f); | 952 grand_parent.data.local.Scale(2.f, 0.f); |
| 929 grand_parent.data.source_node_id = 0; | 953 grand_parent.data.source_node_id = root.id; |
| 930 grand_parent.data.needs_sublayer_scale = true; | 954 grand_parent.data.needs_sublayer_scale = true; |
| 931 int grand_parent_id = tree.Insert(grand_parent, 0); | 955 int grand_parent_id = tree.Insert(grand_parent, root.id); |
| 932 tree.SetTargetId(grand_parent_id, 0); | 956 tree.SetTargetId(grand_parent_id, root.id); |
| 933 tree.SetContentTargetId(grand_parent_id, grand_parent_id); | 957 tree.SetContentTargetId(grand_parent_id, grand_parent_id); |
| 934 tree.UpdateTransforms(grand_parent_id); | 958 tree.UpdateTransforms(grand_parent_id); |
| 935 | 959 |
| 936 TransformNode parent; | 960 TransformNode parent; |
| 937 parent.data.local.Translate(1.f, 1.f); | 961 parent.data.local.Translate(1.f, 1.f); |
| 938 parent.data.source_node_id = grand_parent_id; | 962 parent.data.source_node_id = grand_parent_id; |
| 939 int parent_id = tree.Insert(parent, grand_parent_id); | 963 int parent_id = tree.Insert(parent, grand_parent_id); |
| 940 tree.SetTargetId(parent_id, grand_parent_id); | 964 tree.SetTargetId(parent_id, grand_parent_id); |
| 941 tree.SetContentTargetId(parent_id, grand_parent_id); | 965 tree.SetContentTargetId(parent_id, grand_parent_id); |
| 942 tree.UpdateTransforms(parent_id); | 966 tree.UpdateTransforms(parent_id); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 class PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors | 1014 class PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors |
| 991 : public PropertyTreeTest { | 1015 : public PropertyTreeTest { |
| 992 protected: | 1016 protected: |
| 993 void StartTest() override { | 1017 void StartTest() override { |
| 994 // This tests that flattening is performed correctly when | 1018 // This tests that flattening is performed correctly when |
| 995 // destination and its ancestors are flat, but there are 3d transforms | 1019 // destination and its ancestors are flat, but there are 3d transforms |
| 996 // and flattening between the source and destination. | 1020 // and flattening between the source and destination. |
| 997 PropertyTrees property_trees; | 1021 PropertyTrees property_trees; |
| 998 TransformTree& tree = property_trees.transform_tree; | 1022 TransformTree& tree = property_trees.transform_tree; |
| 999 | 1023 |
| 1000 int parent = tree.Insert(TransformNode(), 0); | 1024 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 1001 tree.SetContentTargetId(parent, parent); | 1025 tree.SetContentTargetId(parent, parent); |
| 1002 tree.SetTargetId(parent, parent); | 1026 tree.SetTargetId(parent, parent); |
| 1003 tree.Node(parent)->data.source_node_id = 0; | 1027 tree.Node(parent)->data.source_node_id = TransformTree::kDeviceNodeId; |
| 1004 tree.Node(parent)->data.local.Translate(2, 2); | 1028 tree.Node(parent)->data.local.Translate(2, 2); |
| 1005 | 1029 |
| 1006 gfx::Transform rotation_about_x; | 1030 gfx::Transform rotation_about_x; |
| 1007 rotation_about_x.RotateAboutXAxis(15); | 1031 rotation_about_x.RotateAboutXAxis(15); |
| 1008 | 1032 |
| 1009 int child = tree.Insert(TransformNode(), parent); | 1033 int child = tree.Insert(TransformNode(), parent); |
| 1010 tree.SetContentTargetId(child, child); | 1034 tree.SetContentTargetId(child, child); |
| 1011 tree.SetTargetId(child, child); | 1035 tree.SetTargetId(child, child); |
| 1012 tree.Node(child)->data.source_node_id = parent; | 1036 tree.Node(child)->data.source_node_id = parent; |
| 1013 tree.Node(child)->data.local = rotation_about_x; | 1037 tree.Node(child)->data.local = rotation_about_x; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1037 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1061 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 1038 PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors); | 1062 PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors); |
| 1039 | 1063 |
| 1040 class PropertyTreeTestScreenSpaceOpacityUpdateTest : public PropertyTreeTest { | 1064 class PropertyTreeTestScreenSpaceOpacityUpdateTest : public PropertyTreeTest { |
| 1041 protected: | 1065 protected: |
| 1042 void StartTest() override { | 1066 void StartTest() override { |
| 1043 // This tests that screen space opacity is updated for the subtree when | 1067 // This tests that screen space opacity is updated for the subtree when |
| 1044 // opacity of a node changes. | 1068 // opacity of a node changes. |
| 1045 EffectTree tree; | 1069 EffectTree tree; |
| 1046 | 1070 |
| 1047 int parent = tree.Insert(EffectNode(), 0); | 1071 int parent = tree.Insert(EffectNode(), EffectTree::kInvalidNodeId); |
| 1048 int child = tree.Insert(EffectNode(), parent); | 1072 int child = tree.Insert(EffectNode(), parent); |
| 1049 SetupEffectTreeForTest(&tree); | 1073 SetupEffectTreeForTest(&tree); |
| 1050 | 1074 |
| 1051 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 1.f); | 1075 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 1.f); |
| 1052 tree.Node(parent)->data.opacity = 0.5f; | 1076 tree.Node(parent)->data.opacity = 0.5f; |
| 1053 tree.set_needs_update(true); | 1077 tree.set_needs_update(true); |
| 1054 SetupEffectTreeForTest(&tree); | 1078 SetupEffectTreeForTest(&tree); |
| 1055 draw_property_utils::ComputeEffects(&tree); | 1079 draw_property_utils::ComputeEffects(&tree); |
| 1056 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 0.5f); | 1080 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 0.5f); |
| 1057 | 1081 |
| 1058 tree.Node(child)->data.opacity = 0.5f; | 1082 tree.Node(child)->data.opacity = 0.5f; |
| 1059 tree.set_needs_update(true); | 1083 tree.set_needs_update(true); |
| 1060 SetupEffectTreeForTest(&tree); | 1084 SetupEffectTreeForTest(&tree); |
| 1061 draw_property_utils::ComputeEffects(&tree); | 1085 draw_property_utils::ComputeEffects(&tree); |
| 1062 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 0.25f); | 1086 EXPECT_EQ(tree.Node(child)->data.screen_space_opacity, 0.25f); |
| 1063 } | 1087 } |
| 1064 }; | 1088 }; |
| 1065 | 1089 |
| 1066 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1090 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 1067 PropertyTreeTestScreenSpaceOpacityUpdateTest); | 1091 PropertyTreeTestScreenSpaceOpacityUpdateTest); |
| 1068 | 1092 |
| 1069 class PropertyTreeTestNonIntegerTranslationTest : public PropertyTreeTest { | 1093 class PropertyTreeTestNonIntegerTranslationTest : public PropertyTreeTest { |
| 1070 protected: | 1094 protected: |
| 1071 void StartTest() override { | 1095 void StartTest() override { |
| 1072 // This tests that when a node has non-integer translation, the information | 1096 // This tests that when a node has non-integer translation, the information |
| 1073 // is propagated to the subtree. | 1097 // is propagated to the subtree. |
| 1074 PropertyTrees property_trees; | 1098 PropertyTrees property_trees; |
| 1075 TransformTree& tree = property_trees.transform_tree; | 1099 TransformTree& tree = property_trees.transform_tree; |
| 1076 | 1100 |
| 1077 int parent = tree.Insert(TransformNode(), 0); | 1101 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 1078 tree.SetTargetId(parent, parent); | 1102 tree.SetTargetId(parent, parent); |
| 1079 tree.Node(parent)->data.local.Translate(1.5f, 1.5f); | 1103 tree.Node(parent)->data.local.Translate(1.5f, 1.5f); |
| 1080 | 1104 |
| 1081 int child = tree.Insert(TransformNode(), parent); | 1105 int child = tree.Insert(TransformNode(), parent); |
| 1082 tree.SetTargetId(child, parent); | 1106 tree.SetTargetId(child, parent); |
| 1083 tree.Node(child)->data.local.Translate(1, 1); | 1107 tree.Node(child)->data.local.Translate(1, 1); |
| 1084 tree.set_needs_update(true); | 1108 tree.set_needs_update(true); |
| 1085 SetupTransformTreeForTest(&tree); | 1109 SetupTransformTreeForTest(&tree); |
| 1086 draw_property_utils::ComputeTransforms(&tree); | 1110 draw_property_utils::ComputeTransforms(&tree); |
| 1087 EXPECT_FALSE(tree.Node(parent) | 1111 EXPECT_FALSE(tree.Node(parent) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1115 PropertyTreeTestNonIntegerTranslationTest); | 1139 PropertyTreeTestNonIntegerTranslationTest); |
| 1116 | 1140 |
| 1117 class PropertyTreeTestSingularTransformSnapTest : public PropertyTreeTest { | 1141 class PropertyTreeTestSingularTransformSnapTest : public PropertyTreeTest { |
| 1118 protected: | 1142 protected: |
| 1119 void StartTest() override { | 1143 void StartTest() override { |
| 1120 // This tests that to_target transform is not snapped when it has a singular | 1144 // This tests that to_target transform is not snapped when it has a singular |
| 1121 // transform. | 1145 // transform. |
| 1122 PropertyTrees property_trees; | 1146 PropertyTrees property_trees; |
| 1123 TransformTree& tree = property_trees.transform_tree; | 1147 TransformTree& tree = property_trees.transform_tree; |
| 1124 | 1148 |
| 1125 int parent = tree.Insert(TransformNode(), 0); | 1149 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 1126 tree.SetTargetId(parent, parent); | 1150 tree.SetTargetId(parent, parent); |
| 1127 tree.Node(parent)->data.scrolls = true; | 1151 tree.Node(parent)->data.scrolls = true; |
| 1128 | 1152 |
| 1129 int child = tree.Insert(TransformNode(), parent); | 1153 int child = tree.Insert(TransformNode(), parent); |
| 1130 TransformNode* child_node = tree.Node(child); | 1154 TransformNode* child_node = tree.Node(child); |
| 1131 tree.SetTargetId(child, parent); | 1155 tree.SetTargetId(child, parent); |
| 1132 child_node->data.scrolls = true; | 1156 child_node->data.scrolls = true; |
| 1133 child_node->data.local.Scale3d(6.0f, 6.0f, 0.0f); | 1157 child_node->data.local.Scale3d(6.0f, 6.0f, 0.0f); |
| 1134 child_node->data.local.Translate(1.3f, 1.3f); | 1158 child_node->data.local.Translate(1.3f, 1.3f); |
| 1135 tree.set_needs_update(true); | 1159 tree.set_needs_update(true); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1155 | 1179 |
| 1156 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1180 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 1157 PropertyTreeTestSingularTransformSnapTest); | 1181 PropertyTreeTestSingularTransformSnapTest); |
| 1158 | 1182 |
| 1159 #undef DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F | 1183 #undef DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F |
| 1160 #undef SERIALIZED_PROPERTY_TREE_TEST_F | 1184 #undef SERIALIZED_PROPERTY_TREE_TEST_F |
| 1161 #undef DIRECT_PROPERTY_TREE_TEST_F | 1185 #undef DIRECT_PROPERTY_TREE_TEST_F |
| 1162 | 1186 |
| 1163 } // namespace | 1187 } // namespace |
| 1164 } // namespace cc | 1188 } // namespace cc |
| OLD | NEW |