| 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/clip_node.h" | 10 #include "cc/trees/clip_node.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 | 52 |
| 53 proto::TreeNode proto; | 53 proto::TreeNode proto; |
| 54 original.ToProtobuf(&proto); | 54 original.ToProtobuf(&proto); |
| 55 TransformNode result; | 55 TransformNode result; |
| 56 result.FromProtobuf(proto); | 56 result.FromProtobuf(proto); |
| 57 | 57 |
| 58 EXPECT_EQ(original, result); | 58 EXPECT_EQ(original, result); |
| 59 } | 59 } |
| 60 | 60 |
| 61 TEST(PropertyTreeSerializationTest, TransformTreeSerialization) { | 61 TEST(PropertyTreeSerializationTest, TransformTreeSerialization) { |
| 62 PropertyTrees property_trees; | 62 TransformTree original; |
| 63 TransformTree& original = property_trees.transform_tree; | 63 TransformNode root; |
| 64 TransformNode& root = *original.Node(0); | |
| 65 root.id = 0; | |
| 66 root.owner_id = 1; | 64 root.owner_id = 1; |
| 67 original.SetTargetId(root.id, 3); | 65 root.id = original.Insert(root, TransformTree::kDeviceNodeId); |
| 68 original.SetContentTargetId(root.id, 4); | 66 original.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 67 original.SetContentTargetId(root.id, TransformTree::kDeviceNodeId); |
| 69 TransformNode second; | 68 TransformNode second; |
| 70 second.owner_id = 2; | 69 second.owner_id = 2; |
| 71 second.local.Translate3d(2.f, 2.f, 0.f); | 70 second.local.Translate3d(2.f, 2.f, 0.f); |
| 72 second.source_node_id = 0; | 71 second.source_node_id = root.id; |
| 73 second.id = original.Insert(second, 0); | 72 second.id = original.Insert(second, root.id); |
| 74 original.SetTargetId(second.id, 0); | 73 original.SetTargetId(second.id, root.id); |
| 75 TransformNode third; | 74 TransformNode third; |
| 76 third.owner_id = 3; | 75 third.owner_id = 3; |
| 77 third.scrolls = true; | 76 third.scrolls = true; |
| 78 third.source_node_id = 1; | 77 third.source_node_id = root.id; |
| 79 third.id = original.Insert(third, 1); | 78 third.id = original.Insert(third, root.id); |
| 80 original.SetTargetId(third.id, 0); | 79 original.SetTargetId(third.id, root.id); |
| 81 | 80 |
| 82 original.set_needs_update(true); | 81 original.set_needs_update(true); |
| 83 | 82 |
| 84 original.set_page_scale_factor(0.5f); | 83 original.set_page_scale_factor(0.5f); |
| 85 original.set_device_scale_factor(0.6f); | 84 original.set_device_scale_factor(0.6f); |
| 86 gfx::Transform transform = | 85 gfx::Transform transform = |
| 87 gfx::Transform(1.05f, 2.15f, 3.14f, 4.13f, 5.12f, 6.11f, 7.1f, 8.9f, 9.8f, | 86 gfx::Transform(1.05f, 2.15f, 3.14f, 4.13f, 5.12f, 6.11f, 7.1f, 8.9f, 9.8f, |
| 88 10.7f, 11.6f, 12.5f, 13.4f, 14.3f, 15.2f, 16.1f); | 87 10.7f, 11.6f, 12.5f, 13.4f, 14.3f, 15.2f, 16.1f); |
| 89 original.SetDeviceTransformScaleFactor(transform); | 88 original.SetDeviceTransformScaleFactor(transform); |
| 90 original.AddNodeAffectedByInnerViewportBoundsDelta(0); | 89 original.AddNodeAffectedByInnerViewportBoundsDelta(0); |
| 91 original.AddNodeAffectedByOuterViewportBoundsDelta(1); | 90 original.AddNodeAffectedByOuterViewportBoundsDelta(1); |
| 92 | 91 |
| 93 proto::PropertyTree proto; | 92 proto::PropertyTree proto; |
| 94 original.ToProtobuf(&proto); | 93 original.ToProtobuf(&proto); |
| 95 TransformTree result; | 94 TransformTree result; |
| 96 std::unordered_map<int, int> transform_id_to_index_map; | 95 std::unordered_map<int, int> transform_id_to_index_map; |
| 97 result.FromProtobuf(proto, &transform_id_to_index_map); | 96 result.FromProtobuf(proto, &transform_id_to_index_map); |
| 98 | 97 |
| 99 EXPECT_EQ(transform_id_to_index_map[1], 0); | 98 EXPECT_EQ(1, transform_id_to_index_map[1]); |
| 100 EXPECT_EQ(transform_id_to_index_map[2], 1); | 99 EXPECT_EQ(2, transform_id_to_index_map[2]); |
| 101 EXPECT_EQ(transform_id_to_index_map[3], 2); | 100 EXPECT_EQ(3, transform_id_to_index_map[3]); |
| 102 EXPECT_EQ(original, result); | 101 EXPECT_EQ(original, result); |
| 103 } | 102 } |
| 104 | 103 |
| 105 TEST(PropertyTreeSerializationTest, ClipNodeSerialization) { | 104 TEST(PropertyTreeSerializationTest, ClipNodeSerialization) { |
| 106 ClipNode original; | 105 ClipNode original; |
| 107 original.id = 3; | 106 original.id = 3; |
| 108 original.parent_id = 2; | 107 original.parent_id = 2; |
| 109 original.owner_id = 4; | 108 original.owner_id = 4; |
| 110 original.clip = gfx::RectF(0.5f, 0.5f); | 109 original.clip = gfx::RectF(0.5f, 0.5f); |
| 111 original.combined_clip_in_target_space = gfx::RectF(0.6f, 0.6f); | 110 original.combined_clip_in_target_space = gfx::RectF(0.6f, 0.6f); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 123 proto::TreeNode proto; | 122 proto::TreeNode proto; |
| 124 original.ToProtobuf(&proto); | 123 original.ToProtobuf(&proto); |
| 125 ClipNode result; | 124 ClipNode result; |
| 126 result.FromProtobuf(proto); | 125 result.FromProtobuf(proto); |
| 127 | 126 |
| 128 EXPECT_EQ(original, result); | 127 EXPECT_EQ(original, result); |
| 129 } | 128 } |
| 130 | 129 |
| 131 TEST(PropertyTreeSerializationTest, ClipTreeSerialization) { | 130 TEST(PropertyTreeSerializationTest, ClipTreeSerialization) { |
| 132 ClipTree original; | 131 ClipTree original; |
| 133 ClipNode& root = *original.Node(0); | 132 ClipNode root; |
| 134 root.owner_id = 1; | 133 root.owner_id = 1; |
| 135 root.transform_id = 2; | 134 root.transform_id = 2; |
| 136 root.target_transform_id = 1; | 135 root.target_transform_id = 1; |
| 137 root.target_effect_id = 1; | 136 root.target_effect_id = 1; |
| 138 ClipNode second; | 137 ClipNode second; |
| 139 second.owner_id = 2; | 138 second.owner_id = 2; |
| 140 second.transform_id = 4; | 139 second.transform_id = 4; |
| 141 second.applies_local_clip = true; | 140 second.applies_local_clip = true; |
| 142 ClipNode third; | 141 ClipNode third; |
| 143 third.owner_id = 3; | 142 third.owner_id = 3; |
| 144 third.target_transform_id = 3; | 143 third.target_transform_id = 3; |
| 145 third.target_effect_id = 2; | 144 third.target_effect_id = 2; |
| 146 third.target_is_clipped = false; | 145 third.target_is_clipped = false; |
| 147 | 146 |
| 147 original.Insert(root, -1); |
| 148 original.Insert(second, 0); | 148 original.Insert(second, 0); |
| 149 original.Insert(third, 1); | 149 original.Insert(third, 1); |
| 150 original.set_needs_update(true); | 150 original.set_needs_update(true); |
| 151 | 151 |
| 152 proto::PropertyTree proto; | 152 proto::PropertyTree proto; |
| 153 original.ToProtobuf(&proto); | 153 original.ToProtobuf(&proto); |
| 154 ClipTree result; | 154 ClipTree result; |
| 155 std::unordered_map<int, int> clip_id_to_index_map; | 155 std::unordered_map<int, int> clip_id_to_index_map; |
| 156 result.FromProtobuf(proto, &clip_id_to_index_map); | 156 result.FromProtobuf(proto, &clip_id_to_index_map); |
| 157 | 157 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 179 proto::TreeNode proto; | 179 proto::TreeNode proto; |
| 180 original.ToProtobuf(&proto); | 180 original.ToProtobuf(&proto); |
| 181 EffectNode result; | 181 EffectNode result; |
| 182 result.FromProtobuf(proto); | 182 result.FromProtobuf(proto); |
| 183 | 183 |
| 184 EXPECT_EQ(original, result); | 184 EXPECT_EQ(original, result); |
| 185 } | 185 } |
| 186 | 186 |
| 187 TEST(PropertyTreeSerializationTest, EffectTreeSerialization) { | 187 TEST(PropertyTreeSerializationTest, EffectTreeSerialization) { |
| 188 EffectTree original; | 188 EffectTree original; |
| 189 EffectNode& root = *original.Node(0); | 189 EffectNode root; |
| 190 root.owner_id = 5; | 190 root.owner_id = 5; |
| 191 root.transform_id = 2; | 191 root.transform_id = 2; |
| 192 root.clip_id = 1; | 192 root.clip_id = 1; |
| 193 EffectNode second; | 193 EffectNode second; |
| 194 second.owner_id = 6; | 194 second.owner_id = 6; |
| 195 second.transform_id = 4; | 195 second.transform_id = 4; |
| 196 second.opacity = true; | 196 second.opacity = true; |
| 197 second.mask_layer_id = 32; | 197 second.mask_layer_id = 32; |
| 198 EffectNode third; | 198 EffectNode third; |
| 199 third.owner_id = 7; | 199 third.owner_id = 7; |
| 200 third.clip_id = 3; | 200 third.clip_id = 3; |
| 201 third.replica_layer_id = 44; | 201 third.replica_layer_id = 44; |
| 202 third.replica_mask_layer_id = 45; | 202 third.replica_mask_layer_id = 45; |
| 203 third.has_render_surface = false; | 203 third.has_render_surface = false; |
| 204 | 204 |
| 205 original.Insert(root, -1); |
| 205 original.Insert(second, 0); | 206 original.Insert(second, 0); |
| 206 original.Insert(third, 1); | 207 original.Insert(third, 1); |
| 207 original.AddMaskOrReplicaLayerId(32); | 208 original.AddMaskOrReplicaLayerId(32); |
| 208 original.AddMaskOrReplicaLayerId(44); | 209 original.AddMaskOrReplicaLayerId(44); |
| 209 original.AddMaskOrReplicaLayerId(45); | 210 original.AddMaskOrReplicaLayerId(45); |
| 210 original.set_needs_update(true); | 211 original.set_needs_update(true); |
| 211 | 212 |
| 212 proto::PropertyTree proto; | 213 proto::PropertyTree proto; |
| 213 original.ToProtobuf(&proto); | 214 original.ToProtobuf(&proto); |
| 214 EffectTree result; | 215 EffectTree result; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 241 ScrollNode result; | 242 ScrollNode result; |
| 242 result.FromProtobuf(proto); | 243 result.FromProtobuf(proto); |
| 243 | 244 |
| 244 EXPECT_EQ(original, result); | 245 EXPECT_EQ(original, result); |
| 245 } | 246 } |
| 246 | 247 |
| 247 TEST(PropertyTreeSerializationTest, ScrollTreeSerialization) { | 248 TEST(PropertyTreeSerializationTest, ScrollTreeSerialization) { |
| 248 PropertyTrees property_trees; | 249 PropertyTrees property_trees; |
| 249 property_trees.is_main_thread = true; | 250 property_trees.is_main_thread = true; |
| 250 ScrollTree& original = property_trees.scroll_tree; | 251 ScrollTree& original = property_trees.scroll_tree; |
| 252 ScrollNode root; |
| 253 original.Insert(root, -1); |
| 251 ScrollNode second; | 254 ScrollNode second; |
| 252 second.owner_id = 10; | 255 second.owner_id = 10; |
| 253 second.scrollable = true; | 256 second.scrollable = true; |
| 254 second.bounds = gfx::Size(15, 15); | 257 second.bounds = gfx::Size(15, 15); |
| 255 ScrollNode third; | 258 ScrollNode third; |
| 256 third.owner_id = 20; | 259 third.owner_id = 20; |
| 257 third.contains_non_fast_scrollable_region = true; | 260 third.contains_non_fast_scrollable_region = true; |
| 258 | 261 |
| 259 original.Insert(second, 0); | 262 original.Insert(second, 0); |
| 260 original.Insert(third, 1); | 263 original.Insert(third, 1); |
| 261 | 264 |
| 262 original.set_currently_scrolling_node(1); | 265 original.set_currently_scrolling_node(1); |
| 263 original.SetScrollOffset(1, gfx::ScrollOffset(1, 2)); | 266 original.SetScrollOffset(1, gfx::ScrollOffset(1, 2)); |
| 264 | 267 |
| 265 proto::PropertyTree proto; | 268 proto::PropertyTree proto; |
| 266 original.ToProtobuf(&proto); | 269 original.ToProtobuf(&proto); |
| 267 ScrollTree result; | 270 ScrollTree result; |
| 268 std::unordered_map<int, int> scroll_id_to_index_map; | 271 std::unordered_map<int, int> scroll_id_to_index_map; |
| 269 result.FromProtobuf(proto, &scroll_id_to_index_map); | 272 result.FromProtobuf(proto, &scroll_id_to_index_map); |
| 270 | 273 |
| 271 EXPECT_EQ(original, result); | 274 EXPECT_EQ(original, result); |
| 272 EXPECT_EQ(scroll_id_to_index_map[10], 1); | 275 EXPECT_EQ(scroll_id_to_index_map[10], 1); |
| 273 EXPECT_EQ(scroll_id_to_index_map[20], 2); | 276 EXPECT_EQ(scroll_id_to_index_map[20], 2); |
| 274 | 277 |
| 275 original.clear(); | 278 original.clear(); |
| 279 ScrollNode root2; |
| 280 original.Insert(root, -1); |
| 276 original.set_currently_scrolling_node(0); | 281 original.set_currently_scrolling_node(0); |
| 277 original.SetScrollOffset(2, gfx::ScrollOffset(1, 2)); | 282 original.SetScrollOffset(2, gfx::ScrollOffset(1, 2)); |
| 278 | 283 |
| 279 proto::PropertyTree proto2; | 284 proto::PropertyTree proto2; |
| 280 original.ToProtobuf(&proto2); | 285 original.ToProtobuf(&proto2); |
| 281 result = ScrollTree(); | 286 result = ScrollTree(); |
| 282 scroll_id_to_index_map.clear(); | 287 scroll_id_to_index_map.clear(); |
| 283 result.FromProtobuf(proto2, &scroll_id_to_index_map); | 288 result.FromProtobuf(proto2, &scroll_id_to_index_map); |
| 284 | 289 |
| 285 EXPECT_EQ(original, result); | 290 EXPECT_EQ(original, result); |
| 286 } | 291 } |
| 287 | 292 |
| 288 TEST(PropertyTreeSerializationTest, PropertyTrees) { | 293 TEST(PropertyTreeSerializationTest, PropertyTrees) { |
| 289 PropertyTrees original; | 294 PropertyTrees original; |
| 290 TransformNode transform_node1 = TransformNode(); | 295 TransformNode transform_node1 = TransformNode(); |
| 291 transform_node1.owner_id = 10; | 296 transform_node1.owner_id = 10; |
| 292 transform_node1.id = original.transform_tree.Insert(transform_node1, 0); | 297 transform_node1.id = original.transform_tree.Insert( |
| 298 transform_node1, TransformTree::kDeviceNodeId); |
| 293 TransformNode transform_node2 = TransformNode(); | 299 TransformNode transform_node2 = TransformNode(); |
| 294 transform_node2.owner_id = 20; | 300 transform_node2.owner_id = 20; |
| 295 transform_node2.id = original.transform_tree.Insert(transform_node2, 1); | 301 transform_node2.id = |
| 296 original.transform_id_to_index_map[10] = 1; | 302 original.transform_tree.Insert(transform_node2, transform_node1.id); |
| 297 original.transform_id_to_index_map[20] = 2; | 303 original.transform_id_to_index_map[10] = transform_node1.id; |
| 304 original.transform_id_to_index_map[20] = transform_node2.id; |
| 298 | 305 |
| 299 ClipNode clip_node1 = ClipNode(); | 306 ClipNode clip_node1 = ClipNode(); |
| 300 clip_node1.owner_id = 10; | 307 clip_node1.owner_id = 10; |
| 301 clip_node1.id = original.clip_tree.Insert(clip_node1, 0); | 308 clip_node1.id = |
| 309 original.clip_tree.Insert(clip_node1, ClipTree::kInvalidNodeId); |
| 302 ClipNode clip_node2 = ClipNode(); | 310 ClipNode clip_node2 = ClipNode(); |
| 303 clip_node2.owner_id = 22; | 311 clip_node2.owner_id = 22; |
| 304 clip_node2.id = original.clip_tree.Insert(clip_node2, 1); | 312 clip_node2.id = original.clip_tree.Insert(clip_node2, clip_node1.id); |
| 305 original.clip_id_to_index_map[10] = 1; | 313 original.clip_id_to_index_map[10] = clip_node1.id; |
| 306 original.clip_id_to_index_map[22] = 2; | 314 original.clip_id_to_index_map[22] = clip_node2.id; |
| 307 | 315 |
| 308 EffectNode effect_node1 = EffectNode(); | 316 EffectNode effect_node1 = EffectNode(); |
| 309 effect_node1.owner_id = 11; | 317 effect_node1.owner_id = 11; |
| 310 effect_node1.id = original.effect_tree.Insert(effect_node1, 0); | 318 effect_node1.id = |
| 319 original.effect_tree.Insert(effect_node1, EffectTree::kInvalidNodeId); |
| 311 EffectNode effect_node2 = EffectNode(); | 320 EffectNode effect_node2 = EffectNode(); |
| 312 effect_node2.owner_id = 23; | 321 effect_node2.owner_id = 23; |
| 313 effect_node2.id = original.effect_tree.Insert(effect_node2, 1); | 322 effect_node2.id = original.effect_tree.Insert(effect_node2, effect_node1.id); |
| 314 original.effect_id_to_index_map[11] = 1; | 323 original.effect_id_to_index_map[11] = effect_node1.id; |
| 315 original.effect_id_to_index_map[23] = 2; | 324 original.effect_id_to_index_map[23] = effect_node2.id; |
| 316 | 325 |
| 317 ScrollNode scroll_node1 = ScrollNode(); | 326 ScrollNode scroll_node1 = ScrollNode(); |
| 318 scroll_node1.owner_id = 10; | 327 scroll_node1.owner_id = 10; |
| 319 scroll_node1.id = original.scroll_tree.Insert(scroll_node1, 0); | 328 scroll_node1.id = |
| 329 original.scroll_tree.Insert(scroll_node1, ScrollTree::kInvalidNodeId); |
| 320 ScrollNode scroll_node2 = ScrollNode(); | 330 ScrollNode scroll_node2 = ScrollNode(); |
| 321 scroll_node2.owner_id = 20; | 331 scroll_node2.owner_id = 20; |
| 322 scroll_node2.id = original.scroll_tree.Insert(scroll_node2, 1); | 332 scroll_node2.id = original.scroll_tree.Insert(scroll_node2, scroll_node1.id); |
| 323 original.scroll_id_to_index_map[10] = 1; | 333 original.scroll_id_to_index_map[10] = scroll_node1.id; |
| 324 original.scroll_id_to_index_map[20] = 2; | 334 original.scroll_id_to_index_map[20] = scroll_node2.id; |
| 325 | 335 |
| 326 original.needs_rebuild = false; | 336 original.needs_rebuild = false; |
| 327 original.non_root_surfaces_enabled = false; | 337 original.non_root_surfaces_enabled = false; |
| 328 original.sequence_number = 3; | 338 original.sequence_number = 3; |
| 329 | 339 |
| 330 proto::PropertyTrees proto; | 340 proto::PropertyTrees proto; |
| 331 original.ToProtobuf(&proto); | 341 original.ToProtobuf(&proto); |
| 332 PropertyTrees result; | 342 PropertyTrees result; |
| 333 result.FromProtobuf(proto); | 343 result.FromProtobuf(proto); |
| 334 | 344 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 | 399 |
| 390 #define DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ | 400 #define DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) \ |
| 391 DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME); \ | 401 DIRECT_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME); \ |
| 392 SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) | 402 SERIALIZED_PROPERTY_TREE_TEST_F(TEST_FIXTURE_NAME) |
| 393 | 403 |
| 394 class PropertyTreeTestComputeTransformRoot : public PropertyTreeTest { | 404 class PropertyTreeTestComputeTransformRoot : public PropertyTreeTest { |
| 395 protected: | 405 protected: |
| 396 void StartTest() override { | 406 void StartTest() override { |
| 397 PropertyTrees property_trees; | 407 PropertyTrees property_trees; |
| 398 TransformTree& tree = property_trees.transform_tree; | 408 TransformTree& tree = property_trees.transform_tree; |
| 399 TransformNode& root = *tree.Node(0); | 409 TransformNode root; |
| 400 root.id = 0; | |
| 401 root.local.Translate(2, 2); | 410 root.local.Translate(2, 2); |
| 402 tree.SetTargetId(root.id, 0); | 411 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 412 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 403 SetupTransformTreeForTest(&tree); | 413 SetupTransformTreeForTest(&tree); |
| 404 tree.UpdateTransforms(0); | 414 tree.UpdateTransforms(root.id); |
| 405 | 415 |
| 406 gfx::Transform expected; | 416 gfx::Transform expected; |
| 407 gfx::Transform transform; | 417 gfx::Transform transform; |
| 408 bool success = tree.ComputeTransform(0, 0, &transform); | 418 bool success = tree.ComputeTransform(root.id, root.id, &transform); |
| 409 EXPECT_TRUE(success); | 419 EXPECT_TRUE(success); |
| 410 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 420 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 411 | 421 |
| 412 transform.MakeIdentity(); | 422 transform.MakeIdentity(); |
| 413 expected.Translate(2, 2); | 423 expected.Translate(2, 2); |
| 414 success = tree.ComputeTransform(0, -1, &transform); | 424 success = tree.ComputeTransform(root.id, TransformTree::kDeviceNodeId, |
| 425 &transform); |
| 415 EXPECT_TRUE(success); | 426 EXPECT_TRUE(success); |
| 416 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 427 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 417 | 428 |
| 418 transform.MakeIdentity(); | 429 transform.MakeIdentity(); |
| 419 expected.MakeIdentity(); | 430 expected.MakeIdentity(); |
| 420 expected.Translate(-2, -2); | 431 expected.Translate(-2, -2); |
| 421 success = tree.ComputeTransform(-1, 0, &transform); | 432 success = tree.ComputeTransform(TransformTree::kDeviceNodeId, root.id, |
| 433 &transform); |
| 422 EXPECT_TRUE(success); | 434 EXPECT_TRUE(success); |
| 423 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 435 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 424 } | 436 } |
| 425 }; | 437 }; |
| 426 | 438 |
| 427 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 439 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 428 PropertyTreeTestComputeTransformRoot); | 440 PropertyTreeTestComputeTransformRoot); |
| 429 | 441 |
| 430 class PropertyTreeTestComputeTransformChild : public PropertyTreeTest { | 442 class PropertyTreeTestComputeTransformChild : public PropertyTreeTest { |
| 431 protected: | 443 protected: |
| 432 void StartTest() override { | 444 void StartTest() override { |
| 433 PropertyTrees property_trees; | 445 PropertyTrees property_trees; |
| 434 TransformTree& tree = property_trees.transform_tree; | 446 TransformTree& tree = property_trees.transform_tree; |
| 435 TransformNode& root = *tree.Node(0); | 447 TransformNode root; |
| 436 root.local.Translate(2, 2); | 448 root.local.Translate(2, 2); |
| 437 tree.SetTargetId(root.id, 0); | 449 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 438 tree.UpdateTransforms(0); | 450 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 451 tree.UpdateTransforms(root.id); |
| 439 | 452 |
| 440 TransformNode child; | 453 TransformNode child; |
| 441 child.local.Translate(3, 3); | 454 child.local.Translate(3, 3); |
| 442 child.source_node_id = 0; | 455 child.source_node_id = root.id; |
| 443 child.id = tree.Insert(child, 0); | 456 child.id = tree.Insert(child, root.id); |
| 444 tree.SetTargetId(child.id, 0); | 457 tree.SetTargetId(child.id, root.id); |
| 445 | 458 |
| 446 SetupTransformTreeForTest(&tree); | 459 SetupTransformTreeForTest(&tree); |
| 447 tree.UpdateTransforms(1); | 460 tree.UpdateTransforms(child.id); |
| 448 | 461 |
| 449 gfx::Transform expected; | 462 gfx::Transform expected; |
| 450 gfx::Transform transform; | 463 gfx::Transform transform; |
| 451 | 464 |
| 452 expected.Translate(3, 3); | 465 expected.Translate(3, 3); |
| 453 bool success = tree.ComputeTransform(1, 0, &transform); | 466 bool success = tree.ComputeTransform(child.id, root.id, &transform); |
| 454 EXPECT_TRUE(success); | 467 EXPECT_TRUE(success); |
| 455 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 468 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 456 | 469 |
| 457 transform.MakeIdentity(); | 470 transform.MakeIdentity(); |
| 458 expected.MakeIdentity(); | 471 expected.MakeIdentity(); |
| 459 expected.Translate(-3, -3); | 472 expected.Translate(-3, -3); |
| 460 success = tree.ComputeTransform(0, 1, &transform); | 473 success = tree.ComputeTransform(root.id, child.id, &transform); |
| 461 EXPECT_TRUE(success); | 474 EXPECT_TRUE(success); |
| 462 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 475 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 463 | 476 |
| 464 transform.MakeIdentity(); | 477 transform.MakeIdentity(); |
| 465 expected.MakeIdentity(); | 478 expected.MakeIdentity(); |
| 466 expected.Translate(5, 5); | 479 expected.Translate(5, 5); |
| 467 success = tree.ComputeTransform(1, -1, &transform); | 480 success = tree.ComputeTransform(child.id, TransformTree::kDeviceNodeId, |
| 481 &transform); |
| 468 EXPECT_TRUE(success); | 482 EXPECT_TRUE(success); |
| 469 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 483 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 470 | 484 |
| 471 transform.MakeIdentity(); | 485 transform.MakeIdentity(); |
| 472 expected.MakeIdentity(); | 486 expected.MakeIdentity(); |
| 473 expected.Translate(-5, -5); | 487 expected.Translate(-5, -5); |
| 474 success = tree.ComputeTransform(-1, 1, &transform); | 488 success = tree.ComputeTransform(TransformTree::kDeviceNodeId, child.id, |
| 489 &transform); |
| 475 EXPECT_TRUE(success); | 490 EXPECT_TRUE(success); |
| 476 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 491 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 477 } | 492 } |
| 478 }; | 493 }; |
| 479 | 494 |
| 480 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 495 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 481 PropertyTreeTestComputeTransformChild); | 496 PropertyTreeTestComputeTransformChild); |
| 482 | 497 |
| 483 class PropertyTreeTestComputeTransformSibling : public PropertyTreeTest { | 498 class PropertyTreeTestComputeTransformSibling : public PropertyTreeTest { |
| 484 protected: | 499 protected: |
| 485 void StartTest() override { | 500 void StartTest() override { |
| 486 PropertyTrees property_trees; | 501 PropertyTrees property_trees; |
| 487 TransformTree& tree = property_trees.transform_tree; | 502 TransformTree& tree = property_trees.transform_tree; |
| 488 TransformNode& root = *tree.Node(0); | 503 TransformNode root; |
| 489 root.local.Translate(2, 2); | 504 root.local.Translate(2, 2); |
| 490 tree.SetTargetId(root.id, 0); | 505 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 491 tree.UpdateTransforms(0); | 506 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 507 tree.UpdateTransforms(root.id); |
| 492 | 508 |
| 493 TransformNode child; | 509 TransformNode child; |
| 494 child.local.Translate(3, 3); | 510 child.local.Translate(3, 3); |
| 495 child.source_node_id = 0; | 511 child.source_node_id = root.id; |
| 496 child.id = tree.Insert(child, 0); | 512 child.id = tree.Insert(child, root.id); |
| 497 tree.SetTargetId(child.id, 0); | 513 tree.SetTargetId(child.id, root.id); |
| 498 | 514 |
| 499 TransformNode sibling; | 515 TransformNode sibling; |
| 500 sibling.local.Translate(7, 7); | 516 sibling.local.Translate(7, 7); |
| 501 sibling.source_node_id = 0; | 517 sibling.source_node_id = root.id; |
| 502 sibling.id = tree.Insert(sibling, 0); | 518 sibling.id = tree.Insert(sibling, root.id); |
| 503 tree.SetTargetId(sibling.id, 0); | 519 tree.SetTargetId(sibling.id, root.id); |
| 504 | 520 |
| 505 SetupTransformTreeForTest(&tree); | 521 SetupTransformTreeForTest(&tree); |
| 506 | 522 |
| 507 tree.UpdateTransforms(1); | 523 tree.UpdateTransforms(child.id); |
| 508 tree.UpdateTransforms(2); | 524 tree.UpdateTransforms(sibling.id); |
| 509 | 525 |
| 510 gfx::Transform expected; | 526 gfx::Transform expected; |
| 511 gfx::Transform transform; | 527 gfx::Transform transform; |
| 512 | 528 |
| 513 expected.Translate(4, 4); | 529 expected.Translate(4, 4); |
| 514 bool success = tree.ComputeTransform(2, 1, &transform); | 530 bool success = tree.ComputeTransform(sibling.id, child.id, &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 transform.MakeIdentity(); | 534 transform.MakeIdentity(); |
| 519 expected.MakeIdentity(); | 535 expected.MakeIdentity(); |
| 520 expected.Translate(-4, -4); | 536 expected.Translate(-4, -4); |
| 521 success = tree.ComputeTransform(1, 2, &transform); | 537 success = tree.ComputeTransform(child.id, sibling.id, &transform); |
| 522 EXPECT_TRUE(success); | 538 EXPECT_TRUE(success); |
| 523 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 539 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 524 } | 540 } |
| 525 }; | 541 }; |
| 526 | 542 |
| 527 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 543 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 528 PropertyTreeTestComputeTransformSibling); | 544 PropertyTreeTestComputeTransformSibling); |
| 529 | 545 |
| 530 class PropertyTreeTestComputeTransformSiblingSingularAncestor | 546 class PropertyTreeTestComputeTransformSiblingSingularAncestor |
| 531 : public PropertyTreeTest { | 547 : public PropertyTreeTest { |
| 532 protected: | 548 protected: |
| 533 void StartTest() override { | 549 void StartTest() override { |
| 534 // In this test, we have the following tree: | 550 // In this test, we have the following tree: |
| 535 // root | 551 // root |
| 536 // + singular | 552 // + singular |
| 537 // + child | 553 // + child |
| 538 // + sibling | 554 // + sibling |
| 539 // Since the lowest common ancestor of |child| and |sibling| has a singular | 555 // Since the lowest common ancestor of |child| and |sibling| has a singular |
| 540 // transform, we cannot use screen space transforms to compute change of | 556 // transform, we cannot use screen space transforms to compute change of |
| 541 // basis | 557 // basis |
| 542 // transforms between these nodes. | 558 // transforms between these nodes. |
| 543 PropertyTrees property_trees; | 559 PropertyTrees property_trees; |
| 544 TransformTree& tree = property_trees.transform_tree; | 560 TransformTree& tree = property_trees.transform_tree; |
| 545 TransformNode& root = *tree.Node(0); | 561 TransformNode root; |
| 546 root.local.Translate(2, 2); | 562 root.local.Translate(2, 2); |
| 547 tree.SetTargetId(root.id, 0); | 563 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 548 tree.UpdateTransforms(0); | 564 tree.SetTargetId(root.id, root.id); |
| 565 tree.UpdateTransforms(root.id); |
| 549 | 566 |
| 550 TransformNode singular; | 567 TransformNode singular; |
| 551 singular.local.matrix().set(2, 2, 0.0); | 568 singular.local.matrix().set(2, 2, 0.0); |
| 552 singular.source_node_id = 0; | 569 singular.source_node_id = root.id; |
| 553 singular.id = tree.Insert(singular, 0); | 570 singular.id = tree.Insert(singular, root.id); |
| 554 tree.SetTargetId(singular.id, 0); | 571 tree.SetTargetId(singular.id, root.id); |
| 555 | 572 |
| 556 TransformNode child; | 573 TransformNode child; |
| 557 child.local.Translate(3, 3); | 574 child.local.Translate(3, 3); |
| 558 child.source_node_id = 1; | 575 child.source_node_id = singular.id; |
| 559 child.id = tree.Insert(child, 1); | 576 child.id = tree.Insert(child, singular.id); |
| 560 tree.SetTargetId(child.id, 0); | 577 tree.SetTargetId(child.id, root.id); |
| 561 | 578 |
| 562 TransformNode sibling; | 579 TransformNode sibling; |
| 563 sibling.local.Translate(7, 7); | 580 sibling.local.Translate(7, 7); |
| 564 sibling.source_node_id = 1; | 581 sibling.source_node_id = singular.id; |
| 565 sibling.id = tree.Insert(sibling, 1); | 582 sibling.id = tree.Insert(sibling, singular.id); |
| 566 tree.SetTargetId(sibling.id, 0); | 583 tree.SetTargetId(sibling.id, root.id); |
| 567 | 584 |
| 568 SetupTransformTreeForTest(&tree); | 585 SetupTransformTreeForTest(&tree); |
| 569 | 586 |
| 570 tree.UpdateTransforms(1); | 587 tree.UpdateTransforms(singular.id); |
| 571 tree.UpdateTransforms(2); | 588 tree.UpdateTransforms(child.id); |
| 572 tree.UpdateTransforms(3); | 589 tree.UpdateTransforms(sibling.id); |
| 573 | 590 |
| 574 gfx::Transform expected; | 591 gfx::Transform expected; |
| 575 gfx::Transform transform; | 592 gfx::Transform transform; |
| 576 | 593 |
| 577 expected.Translate(4, 4); | 594 expected.Translate(4, 4); |
| 578 bool success = tree.ComputeTransform(3, 2, &transform); | 595 bool success = tree.ComputeTransform(sibling.id, child.id, &transform); |
| 579 EXPECT_TRUE(success); | 596 EXPECT_TRUE(success); |
| 580 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 597 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 581 | 598 |
| 582 transform.MakeIdentity(); | 599 transform.MakeIdentity(); |
| 583 expected.MakeIdentity(); | 600 expected.MakeIdentity(); |
| 584 expected.Translate(-4, -4); | 601 expected.Translate(-4, -4); |
| 585 success = tree.ComputeTransform(2, 3, &transform); | 602 success = tree.ComputeTransform(child.id, sibling.id, &transform); |
| 586 EXPECT_TRUE(success); | 603 EXPECT_TRUE(success); |
| 587 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 604 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 588 } | 605 } |
| 589 }; | 606 }; |
| 590 | 607 |
| 591 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 608 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 592 PropertyTreeTestComputeTransformSiblingSingularAncestor); | 609 PropertyTreeTestComputeTransformSiblingSingularAncestor); |
| 593 | 610 |
| 594 class PropertyTreeTestTransformsWithFlattening : public PropertyTreeTest { | 611 class PropertyTreeTestTransformsWithFlattening : public PropertyTreeTest { |
| 595 protected: | 612 protected: |
| 596 void StartTest() override { | 613 void StartTest() override { |
| 597 PropertyTrees property_trees; | 614 PropertyTrees property_trees; |
| 598 TransformTree& tree = property_trees.transform_tree; | 615 TransformTree& tree = property_trees.transform_tree; |
| 599 | 616 |
| 600 int grand_parent = tree.Insert(TransformNode(), 0); | 617 int grand_parent = |
| 618 tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 601 tree.SetContentTargetId(grand_parent, grand_parent); | 619 tree.SetContentTargetId(grand_parent, grand_parent); |
| 602 tree.SetTargetId(grand_parent, grand_parent); | 620 tree.SetTargetId(grand_parent, grand_parent); |
| 603 tree.Node(grand_parent)->source_node_id = 0; | 621 tree.Node(grand_parent)->source_node_id = TransformTree::kDeviceNodeId; |
| 604 | 622 |
| 605 gfx::Transform rotation_about_x; | 623 gfx::Transform rotation_about_x; |
| 606 rotation_about_x.RotateAboutXAxis(15); | 624 rotation_about_x.RotateAboutXAxis(15); |
| 607 | 625 |
| 608 int parent = tree.Insert(TransformNode(), grand_parent); | 626 int parent = tree.Insert(TransformNode(), grand_parent); |
| 609 tree.Node(parent)->needs_sublayer_scale = true; | 627 tree.Node(parent)->needs_sublayer_scale = true; |
| 610 tree.SetTargetId(parent, grand_parent); | 628 tree.SetTargetId(parent, grand_parent); |
| 611 tree.SetContentTargetId(parent, parent); | 629 tree.SetContentTargetId(parent, parent); |
| 612 tree.Node(parent)->source_node_id = grand_parent; | 630 tree.Node(parent)->source_node_id = grand_parent; |
| 613 tree.Node(parent)->local = rotation_about_x; | 631 tree.Node(parent)->local = rotation_about_x; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 }; | 691 }; |
| 674 | 692 |
| 675 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 693 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 676 PropertyTreeTestTransformsWithFlattening); | 694 PropertyTreeTestTransformsWithFlattening); |
| 677 | 695 |
| 678 class PropertyTreeTestMultiplicationOrder : public PropertyTreeTest { | 696 class PropertyTreeTestMultiplicationOrder : public PropertyTreeTest { |
| 679 protected: | 697 protected: |
| 680 void StartTest() override { | 698 void StartTest() override { |
| 681 PropertyTrees property_trees; | 699 PropertyTrees property_trees; |
| 682 TransformTree& tree = property_trees.transform_tree; | 700 TransformTree& tree = property_trees.transform_tree; |
| 683 TransformNode& root = *tree.Node(0); | 701 TransformNode root; |
| 684 root.local.Translate(2, 2); | 702 root.local.Translate(2, 2); |
| 685 tree.SetTargetId(root.id, 0); | 703 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 686 tree.UpdateTransforms(0); | 704 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 705 tree.UpdateTransforms(root.id); |
| 687 | 706 |
| 688 TransformNode child; | 707 TransformNode child; |
| 689 child.local.Scale(2, 2); | 708 child.local.Scale(2, 2); |
| 690 child.source_node_id = 0; | 709 child.source_node_id = root.id; |
| 691 child.id = tree.Insert(child, 0); | 710 child.id = tree.Insert(child, root.id); |
| 692 tree.SetTargetId(child.id, 0); | 711 tree.SetTargetId(child.id, root.id); |
| 693 | 712 |
| 694 SetupTransformTreeForTest(&tree); | 713 SetupTransformTreeForTest(&tree); |
| 695 tree.UpdateTransforms(1); | 714 tree.UpdateTransforms(child.id); |
| 696 | 715 |
| 697 gfx::Transform expected; | 716 gfx::Transform expected; |
| 698 expected.Translate(2, 2); | 717 expected.Translate(2, 2); |
| 699 expected.Scale(2, 2); | 718 expected.Scale(2, 2); |
| 700 | 719 |
| 701 gfx::Transform transform; | 720 gfx::Transform transform; |
| 702 gfx::Transform inverse; | 721 gfx::Transform inverse; |
| 703 | 722 |
| 704 bool success = tree.ComputeTransform(1, -1, &transform); | 723 bool success = tree.ComputeTransform(child.id, TransformTree::kDeviceNodeId, |
| 724 &transform); |
| 705 EXPECT_TRUE(success); | 725 EXPECT_TRUE(success); |
| 706 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 726 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 707 | 727 |
| 708 success = tree.ComputeTransform(-1, 1, &inverse); | 728 success = |
| 729 tree.ComputeTransform(TransformTree::kDeviceNodeId, child.id, &inverse); |
| 709 EXPECT_TRUE(success); | 730 EXPECT_TRUE(success); |
| 710 | 731 |
| 711 transform = transform * inverse; | 732 transform = transform * inverse; |
| 712 expected.MakeIdentity(); | 733 expected.MakeIdentity(); |
| 713 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 734 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 714 } | 735 } |
| 715 }; | 736 }; |
| 716 | 737 |
| 717 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(PropertyTreeTestMultiplicationOrder); | 738 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F(PropertyTreeTestMultiplicationOrder); |
| 718 | 739 |
| 719 class PropertyTreeTestComputeTransformWithUninvertibleTransform | 740 class PropertyTreeTestComputeTransformWithUninvertibleTransform |
| 720 : public PropertyTreeTest { | 741 : public PropertyTreeTest { |
| 721 protected: | 742 protected: |
| 722 void StartTest() override { | 743 void StartTest() override { |
| 723 PropertyTrees property_trees; | 744 PropertyTrees property_trees; |
| 724 TransformTree& tree = property_trees.transform_tree; | 745 TransformTree& tree = property_trees.transform_tree; |
| 725 TransformNode& root = *tree.Node(0); | 746 TransformNode root; |
| 726 tree.SetTargetId(root.id, 0); | 747 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 727 tree.UpdateTransforms(0); | 748 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 749 tree.UpdateTransforms(root.id); |
| 728 | 750 |
| 729 TransformNode child; | 751 TransformNode child; |
| 730 child.local.Scale(0, 0); | 752 child.local.Scale(0, 0); |
| 731 child.source_node_id = 0; | 753 child.source_node_id = root.id; |
| 732 child.id = tree.Insert(child, 0); | 754 child.id = tree.Insert(child, root.id); |
| 733 tree.SetTargetId(child.id, 0); | 755 tree.SetTargetId(child.id, root.id); |
| 734 | 756 |
| 735 SetupTransformTreeForTest(&tree); | 757 SetupTransformTreeForTest(&tree); |
| 736 tree.UpdateTransforms(1); | 758 tree.UpdateTransforms(child.id); |
| 737 | 759 |
| 738 gfx::Transform expected; | 760 gfx::Transform expected; |
| 739 expected.Scale(0, 0); | 761 expected.Scale(0, 0); |
| 740 | 762 |
| 741 gfx::Transform transform; | 763 gfx::Transform transform; |
| 742 gfx::Transform inverse; | 764 gfx::Transform inverse; |
| 743 | 765 |
| 744 bool success = tree.ComputeTransform(1, 0, &transform); | 766 bool success = tree.ComputeTransform(child.id, root.id, &transform); |
| 745 EXPECT_TRUE(success); | 767 EXPECT_TRUE(success); |
| 746 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 768 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
| 747 | 769 |
| 748 // To compute this would require inverting the 0 matrix, so we cannot | 770 // To compute this would require inverting the 0 matrix, so we cannot |
| 749 // succeed. | 771 // succeed. |
| 750 success = tree.ComputeTransform(0, 1, &inverse); | 772 success = tree.ComputeTransform(root.id, child.id, &inverse); |
| 751 EXPECT_FALSE(success); | 773 EXPECT_FALSE(success); |
| 752 } | 774 } |
| 753 }; | 775 }; |
| 754 | 776 |
| 755 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 777 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 756 PropertyTreeTestComputeTransformWithUninvertibleTransform); | 778 PropertyTreeTestComputeTransformWithUninvertibleTransform); |
| 757 | 779 |
| 758 class PropertyTreeTestComputeTransformWithSublayerScale | 780 class PropertyTreeTestComputeTransformWithSublayerScale |
| 759 : public PropertyTreeTest { | 781 : public PropertyTreeTest { |
| 760 protected: | 782 protected: |
| 761 void StartTest() override { | 783 void StartTest() override { |
| 762 PropertyTrees property_trees; | 784 PropertyTrees property_trees; |
| 763 TransformTree& tree = property_trees.transform_tree; | 785 TransformTree& tree = property_trees.transform_tree; |
| 764 TransformNode& root = *tree.Node(0); | 786 TransformNode root; |
| 765 root.id = 0; | 787 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 766 tree.SetTargetId(root.id, 0); | 788 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 767 tree.UpdateTransforms(0); | 789 tree.UpdateTransforms(root.id); |
| 768 | 790 |
| 769 TransformNode grand_parent; | 791 TransformNode grand_parent; |
| 770 grand_parent.local.Scale(2.f, 2.f); | 792 grand_parent.local.Scale(2.f, 2.f); |
| 771 grand_parent.source_node_id = 0; | 793 grand_parent.source_node_id = root.id; |
| 772 grand_parent.needs_sublayer_scale = true; | 794 grand_parent.needs_sublayer_scale = true; |
| 773 int grand_parent_id = tree.Insert(grand_parent, 0); | 795 int grand_parent_id = tree.Insert(grand_parent, root.id); |
| 774 tree.SetTargetId(grand_parent_id, 0); | 796 tree.SetTargetId(grand_parent_id, root.id); |
| 775 tree.UpdateTransforms(grand_parent_id); | 797 tree.UpdateTransforms(grand_parent_id); |
| 776 | 798 |
| 777 TransformNode parent; | 799 TransformNode parent; |
| 778 parent.local.Translate(15.f, 15.f); | 800 parent.local.Translate(15.f, 15.f); |
| 779 parent.source_node_id = grand_parent_id; | 801 parent.source_node_id = grand_parent_id; |
| 780 int parent_id = tree.Insert(parent, grand_parent_id); | 802 int parent_id = tree.Insert(parent, grand_parent_id); |
| 781 tree.SetTargetId(parent_id, grand_parent_id); | 803 tree.SetTargetId(parent_id, grand_parent_id); |
| 782 tree.UpdateTransforms(parent_id); | 804 tree.UpdateTransforms(parent_id); |
| 783 | 805 |
| 784 TransformNode child; | 806 TransformNode child; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 873 | 895 |
| 874 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 896 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 875 PropertyTreeTestComputeTransformWithSublayerScale); | 897 PropertyTreeTestComputeTransformWithSublayerScale); |
| 876 | 898 |
| 877 class PropertyTreeTestComputeTransformToTargetWithZeroSublayerScale | 899 class PropertyTreeTestComputeTransformToTargetWithZeroSublayerScale |
| 878 : public PropertyTreeTest { | 900 : public PropertyTreeTest { |
| 879 protected: | 901 protected: |
| 880 void StartTest() override { | 902 void StartTest() override { |
| 881 PropertyTrees property_trees; | 903 PropertyTrees property_trees; |
| 882 TransformTree& tree = property_trees.transform_tree; | 904 TransformTree& tree = property_trees.transform_tree; |
| 883 TransformNode& root = *tree.Node(0); | 905 TransformNode root; |
| 884 tree.SetTargetId(root.id, 0); | 906 root.id = tree.Insert(root, TransformTree::kDeviceNodeId); |
| 885 tree.UpdateTransforms(0); | 907 tree.SetTargetId(root.id, TransformTree::kDeviceNodeId); |
| 908 tree.UpdateTransforms(root.id); |
| 886 | 909 |
| 887 TransformNode grand_parent; | 910 TransformNode grand_parent; |
| 888 grand_parent.local.Scale(2.f, 0.f); | 911 grand_parent.local.Scale(2.f, 0.f); |
| 889 grand_parent.source_node_id = 0; | 912 grand_parent.source_node_id = root.id; |
| 890 grand_parent.needs_sublayer_scale = true; | 913 grand_parent.needs_sublayer_scale = true; |
| 891 int grand_parent_id = tree.Insert(grand_parent, 0); | 914 int grand_parent_id = tree.Insert(grand_parent, root.id); |
| 892 tree.SetTargetId(grand_parent_id, 0); | 915 tree.SetTargetId(grand_parent_id, root.id); |
| 893 tree.SetContentTargetId(grand_parent_id, grand_parent_id); | 916 tree.SetContentTargetId(grand_parent_id, grand_parent_id); |
| 894 tree.UpdateTransforms(grand_parent_id); | 917 tree.UpdateTransforms(grand_parent_id); |
| 895 | 918 |
| 896 TransformNode parent; | 919 TransformNode parent; |
| 897 parent.local.Translate(1.f, 1.f); | 920 parent.local.Translate(1.f, 1.f); |
| 898 parent.source_node_id = grand_parent_id; | 921 parent.source_node_id = grand_parent_id; |
| 899 int parent_id = tree.Insert(parent, grand_parent_id); | 922 int parent_id = tree.Insert(parent, grand_parent_id); |
| 900 tree.SetTargetId(parent_id, grand_parent_id); | 923 tree.SetTargetId(parent_id, grand_parent_id); |
| 901 tree.SetContentTargetId(parent_id, grand_parent_id); | 924 tree.SetContentTargetId(parent_id, grand_parent_id); |
| 902 tree.UpdateTransforms(parent_id); | 925 tree.UpdateTransforms(parent_id); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 950 class PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors | 973 class PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors |
| 951 : public PropertyTreeTest { | 974 : public PropertyTreeTest { |
| 952 protected: | 975 protected: |
| 953 void StartTest() override { | 976 void StartTest() override { |
| 954 // This tests that flattening is performed correctly when | 977 // This tests that flattening is performed correctly when |
| 955 // destination and its ancestors are flat, but there are 3d transforms | 978 // destination and its ancestors are flat, but there are 3d transforms |
| 956 // and flattening between the source and destination. | 979 // and flattening between the source and destination. |
| 957 PropertyTrees property_trees; | 980 PropertyTrees property_trees; |
| 958 TransformTree& tree = property_trees.transform_tree; | 981 TransformTree& tree = property_trees.transform_tree; |
| 959 | 982 |
| 960 int parent = tree.Insert(TransformNode(), 0); | 983 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 961 tree.SetContentTargetId(parent, parent); | 984 tree.SetContentTargetId(parent, parent); |
| 962 tree.SetTargetId(parent, parent); | 985 tree.SetTargetId(parent, parent); |
| 963 tree.Node(parent)->source_node_id = 0; | 986 tree.Node(parent)->source_node_id = TransformTree::kDeviceNodeId; |
| 964 tree.Node(parent)->local.Translate(2, 2); | 987 tree.Node(parent)->local.Translate(2, 2); |
| 965 | 988 |
| 966 gfx::Transform rotation_about_x; | 989 gfx::Transform rotation_about_x; |
| 967 rotation_about_x.RotateAboutXAxis(15); | 990 rotation_about_x.RotateAboutXAxis(15); |
| 968 | 991 |
| 969 int child = tree.Insert(TransformNode(), parent); | 992 int child = tree.Insert(TransformNode(), parent); |
| 970 tree.SetContentTargetId(child, child); | 993 tree.SetContentTargetId(child, child); |
| 971 tree.SetTargetId(child, child); | 994 tree.SetTargetId(child, child); |
| 972 tree.Node(child)->source_node_id = parent; | 995 tree.Node(child)->source_node_id = parent; |
| 973 tree.Node(child)->local = rotation_about_x; | 996 tree.Node(child)->local = rotation_about_x; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 997 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1020 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 998 PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors); | 1021 PropertyTreeTestFlatteningWhenDestinationHasOnlyFlatAncestors); |
| 999 | 1022 |
| 1000 class PropertyTreeTestScreenSpaceOpacityUpdateTest : public PropertyTreeTest { | 1023 class PropertyTreeTestScreenSpaceOpacityUpdateTest : public PropertyTreeTest { |
| 1001 protected: | 1024 protected: |
| 1002 void StartTest() override { | 1025 void StartTest() override { |
| 1003 // This tests that screen space opacity is updated for the subtree when | 1026 // This tests that screen space opacity is updated for the subtree when |
| 1004 // opacity of a node changes. | 1027 // opacity of a node changes. |
| 1005 EffectTree tree; | 1028 EffectTree tree; |
| 1006 | 1029 |
| 1007 int parent = tree.Insert(EffectNode(), 0); | 1030 int parent = tree.Insert(EffectNode(), EffectTree::kInvalidNodeId); |
| 1008 int child = tree.Insert(EffectNode(), parent); | 1031 int child = tree.Insert(EffectNode(), parent); |
| 1009 SetupEffectTreeForTest(&tree); | 1032 SetupEffectTreeForTest(&tree); |
| 1010 | 1033 |
| 1011 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 1.f); | 1034 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 1.f); |
| 1012 tree.Node(parent)->opacity = 0.5f; | 1035 tree.Node(parent)->opacity = 0.5f; |
| 1013 tree.set_needs_update(true); | 1036 tree.set_needs_update(true); |
| 1014 SetupEffectTreeForTest(&tree); | 1037 SetupEffectTreeForTest(&tree); |
| 1015 draw_property_utils::ComputeEffects(&tree); | 1038 draw_property_utils::ComputeEffects(&tree); |
| 1016 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 0.5f); | 1039 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 0.5f); |
| 1017 | 1040 |
| 1018 tree.Node(child)->opacity = 0.5f; | 1041 tree.Node(child)->opacity = 0.5f; |
| 1019 tree.set_needs_update(true); | 1042 tree.set_needs_update(true); |
| 1020 SetupEffectTreeForTest(&tree); | 1043 SetupEffectTreeForTest(&tree); |
| 1021 draw_property_utils::ComputeEffects(&tree); | 1044 draw_property_utils::ComputeEffects(&tree); |
| 1022 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 0.25f); | 1045 EXPECT_EQ(tree.Node(child)->screen_space_opacity, 0.25f); |
| 1023 } | 1046 } |
| 1024 }; | 1047 }; |
| 1025 | 1048 |
| 1026 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1049 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 1027 PropertyTreeTestScreenSpaceOpacityUpdateTest); | 1050 PropertyTreeTestScreenSpaceOpacityUpdateTest); |
| 1028 | 1051 |
| 1029 class PropertyTreeTestNonIntegerTranslationTest : public PropertyTreeTest { | 1052 class PropertyTreeTestNonIntegerTranslationTest : public PropertyTreeTest { |
| 1030 protected: | 1053 protected: |
| 1031 void StartTest() override { | 1054 void StartTest() override { |
| 1032 // This tests that when a node has non-integer translation, the information | 1055 // This tests that when a node has non-integer translation, the information |
| 1033 // is propagated to the subtree. | 1056 // is propagated to the subtree. |
| 1034 PropertyTrees property_trees; | 1057 PropertyTrees property_trees; |
| 1035 TransformTree& tree = property_trees.transform_tree; | 1058 TransformTree& tree = property_trees.transform_tree; |
| 1036 | 1059 |
| 1037 int parent = tree.Insert(TransformNode(), 0); | 1060 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 1038 tree.SetTargetId(parent, parent); | 1061 tree.SetTargetId(parent, parent); |
| 1039 tree.Node(parent)->local.Translate(1.5f, 1.5f); | 1062 tree.Node(parent)->local.Translate(1.5f, 1.5f); |
| 1040 | 1063 |
| 1041 int child = tree.Insert(TransformNode(), parent); | 1064 int child = tree.Insert(TransformNode(), parent); |
| 1042 tree.SetTargetId(child, parent); | 1065 tree.SetTargetId(child, parent); |
| 1043 tree.Node(child)->local.Translate(1, 1); | 1066 tree.Node(child)->local.Translate(1, 1); |
| 1044 tree.set_needs_update(true); | 1067 tree.set_needs_update(true); |
| 1045 SetupTransformTreeForTest(&tree); | 1068 SetupTransformTreeForTest(&tree); |
| 1046 draw_property_utils::ComputeTransforms(&tree); | 1069 draw_property_utils::ComputeTransforms(&tree); |
| 1047 EXPECT_FALSE( | 1070 EXPECT_FALSE( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1075 PropertyTreeTestNonIntegerTranslationTest); | 1098 PropertyTreeTestNonIntegerTranslationTest); |
| 1076 | 1099 |
| 1077 class PropertyTreeTestSingularTransformSnapTest : public PropertyTreeTest { | 1100 class PropertyTreeTestSingularTransformSnapTest : public PropertyTreeTest { |
| 1078 protected: | 1101 protected: |
| 1079 void StartTest() override { | 1102 void StartTest() override { |
| 1080 // This tests that to_target transform is not snapped when it has a singular | 1103 // This tests that to_target transform is not snapped when it has a singular |
| 1081 // transform. | 1104 // transform. |
| 1082 PropertyTrees property_trees; | 1105 PropertyTrees property_trees; |
| 1083 TransformTree& tree = property_trees.transform_tree; | 1106 TransformTree& tree = property_trees.transform_tree; |
| 1084 | 1107 |
| 1085 int parent = tree.Insert(TransformNode(), 0); | 1108 int parent = tree.Insert(TransformNode(), TransformTree::kDeviceNodeId); |
| 1086 tree.SetTargetId(parent, parent); | 1109 tree.SetTargetId(parent, parent); |
| 1087 tree.Node(parent)->scrolls = true; | 1110 tree.Node(parent)->scrolls = true; |
| 1088 | 1111 |
| 1089 int child = tree.Insert(TransformNode(), parent); | 1112 int child = tree.Insert(TransformNode(), parent); |
| 1090 TransformNode* child_node = tree.Node(child); | 1113 TransformNode* child_node = tree.Node(child); |
| 1091 tree.SetTargetId(child, parent); | 1114 tree.SetTargetId(child, parent); |
| 1092 child_node->scrolls = true; | 1115 child_node->scrolls = true; |
| 1093 child_node->local.Scale3d(6.0f, 6.0f, 0.0f); | 1116 child_node->local.Scale3d(6.0f, 6.0f, 0.0f); |
| 1094 child_node->local.Translate(1.3f, 1.3f); | 1117 child_node->local.Translate(1.3f, 1.3f); |
| 1095 tree.set_needs_update(true); | 1118 tree.set_needs_update(true); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1115 | 1138 |
| 1116 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( | 1139 DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F( |
| 1117 PropertyTreeTestSingularTransformSnapTest); | 1140 PropertyTreeTestSingularTransformSnapTest); |
| 1118 | 1141 |
| 1119 #undef DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F | 1142 #undef DIRECT_AND_SERIALIZED_PROPERTY_TREE_TEST_F |
| 1120 #undef SERIALIZED_PROPERTY_TREE_TEST_F | 1143 #undef SERIALIZED_PROPERTY_TREE_TEST_F |
| 1121 #undef DIRECT_PROPERTY_TREE_TEST_F | 1144 #undef DIRECT_PROPERTY_TREE_TEST_F |
| 1122 | 1145 |
| 1123 } // namespace | 1146 } // namespace |
| 1124 } // namespace cc | 1147 } // namespace cc |
| OLD | NEW |