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 |