OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/tree_synchronizer.h" | 5 #include "cc/trees/tree_synchronizer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <set> | 10 #include <set> |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 } | 168 } |
169 return true; | 169 return true; |
170 } | 170 } |
171 }; | 171 }; |
172 | 172 |
173 // Attempts to synchronizes a null tree. This should not crash, and should | 173 // Attempts to synchronizes a null tree. This should not crash, and should |
174 // return a null tree. | 174 // return a null tree. |
175 TEST_F(TreeSynchronizerTest, SyncNullTree) { | 175 TEST_F(TreeSynchronizerTest, SyncNullTree) { |
176 TreeSynchronizer::SynchronizeTrees(static_cast<Layer*>(NULL), | 176 TreeSynchronizer::SynchronizeTrees(static_cast<Layer*>(NULL), |
177 host_->active_tree()); | 177 host_->active_tree()); |
178 EXPECT_TRUE(!host_->active_tree()->root_layer()); | 178 EXPECT_TRUE(!host_->active_tree()->root_layer_for_testing()); |
179 } | 179 } |
180 | 180 |
181 // Constructs a very simple tree and synchronizes it without trying to reuse any | 181 // Constructs a very simple tree and synchronizes it without trying to reuse any |
182 // preexisting layers. | 182 // preexisting layers. |
183 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) { | 183 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) { |
184 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 184 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
185 layer_tree_root->AddChild(Layer::Create()); | 185 layer_tree_root->AddChild(Layer::Create()); |
186 layer_tree_root->AddChild(Layer::Create()); | 186 layer_tree_root->AddChild(Layer::Create()); |
187 | 187 |
188 host_->SetRootLayer(layer_tree_root); | 188 host_->SetRootLayer(layer_tree_root); |
189 | 189 |
190 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 190 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
191 host_->active_tree()); | 191 host_->active_tree()); |
192 | 192 |
193 ExpectTreesAreIdentical(layer_tree_root.get(), | 193 ExpectTreesAreIdentical(layer_tree_root.get(), |
194 host_->active_tree()->root_layer(), | 194 host_->active_tree()->root_layer_for_testing(), |
195 host_->active_tree()); | 195 host_->active_tree()); |
196 } | 196 } |
197 | 197 |
198 // Constructs a very simple tree and synchronizes it attempting to reuse some | 198 // Constructs a very simple tree and synchronizes it attempting to reuse some |
199 // layers | 199 // layers |
200 TEST_F(TreeSynchronizerTest, SyncSimpleTreeReusingLayers) { | 200 TEST_F(TreeSynchronizerTest, SyncSimpleTreeReusingLayers) { |
201 std::vector<int> layer_impl_destruction_list; | 201 std::vector<int> layer_impl_destruction_list; |
202 | 202 |
203 scoped_refptr<Layer> layer_tree_root = | 203 scoped_refptr<Layer> layer_tree_root = |
204 MockLayer::Create(&layer_impl_destruction_list); | 204 MockLayer::Create(&layer_impl_destruction_list); |
205 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); | 205 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); |
206 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); | 206 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); |
207 int second_layer_impl_id = layer_tree_root->children()[1]->id(); | 207 int second_layer_impl_id = layer_tree_root->children()[1]->id(); |
208 | 208 |
209 host_->SetRootLayer(layer_tree_root); | 209 host_->SetRootLayer(layer_tree_root); |
210 | 210 |
211 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 211 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
212 host_->active_tree()); | 212 host_->active_tree()); |
213 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 213 LayerImpl* layer_impl_tree_root = |
| 214 host_->active_tree()->root_layer_for_testing(); |
214 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 215 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
215 host_->active_tree()); | 216 host_->active_tree()); |
216 | 217 |
217 // We have to push properties to pick up the destruction list pointer. | 218 // We have to push properties to pick up the destruction list pointer. |
218 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), | 219 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), |
219 host_->active_tree()); | 220 host_->active_tree()); |
220 | 221 |
221 // Add a new layer to the Layer side | 222 // Add a new layer to the Layer side |
222 layer_tree_root->children()[0]->AddChild( | 223 layer_tree_root->children()[0]->AddChild( |
223 MockLayer::Create(&layer_impl_destruction_list)); | 224 MockLayer::Create(&layer_impl_destruction_list)); |
224 // Remove one. | 225 // Remove one. |
225 layer_tree_root->children()[1]->RemoveFromParent(); | 226 layer_tree_root->children()[1]->RemoveFromParent(); |
226 | 227 |
227 // Synchronize again. After the sync the trees should be equivalent and we | 228 // Synchronize again. After the sync the trees should be equivalent and we |
228 // should have created and destroyed one LayerImpl. | 229 // should have created and destroyed one LayerImpl. |
229 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 230 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
230 host_->active_tree()); | 231 host_->active_tree()); |
231 layer_impl_tree_root = host_->active_tree()->root_layer(); | 232 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
232 | 233 |
233 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 234 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
234 host_->active_tree()); | 235 host_->active_tree()); |
235 | 236 |
236 ASSERT_EQ(1u, layer_impl_destruction_list.size()); | 237 ASSERT_EQ(1u, layer_impl_destruction_list.size()); |
237 EXPECT_EQ(second_layer_impl_id, layer_impl_destruction_list[0]); | 238 EXPECT_EQ(second_layer_impl_id, layer_impl_destruction_list[0]); |
238 | 239 |
239 host_->active_tree()->DetachLayers(); | 240 host_->active_tree()->DetachLayers(); |
240 } | 241 } |
241 | 242 |
242 // Constructs a very simple tree and checks that a stacking-order change is | 243 // Constructs a very simple tree and checks that a stacking-order change is |
243 // tracked properly. | 244 // tracked properly. |
244 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndTrackStackingOrderChange) { | 245 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndTrackStackingOrderChange) { |
245 std::vector<int> layer_impl_destruction_list; | 246 std::vector<int> layer_impl_destruction_list; |
246 | 247 |
247 // Set up the tree and sync once. child2 needs to be synced here, too, even | 248 // Set up the tree and sync once. child2 needs to be synced here, too, even |
248 // though we remove it to set up the intended scenario. | 249 // though we remove it to set up the intended scenario. |
249 scoped_refptr<Layer> layer_tree_root = | 250 scoped_refptr<Layer> layer_tree_root = |
250 MockLayer::Create(&layer_impl_destruction_list); | 251 MockLayer::Create(&layer_impl_destruction_list); |
251 scoped_refptr<Layer> child2 = MockLayer::Create(&layer_impl_destruction_list); | 252 scoped_refptr<Layer> child2 = MockLayer::Create(&layer_impl_destruction_list); |
252 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); | 253 layer_tree_root->AddChild(MockLayer::Create(&layer_impl_destruction_list)); |
253 layer_tree_root->AddChild(child2); | 254 layer_tree_root->AddChild(child2); |
254 int child1_id = layer_tree_root->children()[0]->id(); | 255 int child1_id = layer_tree_root->children()[0]->id(); |
255 int child2_id = layer_tree_root->children()[1]->id(); | 256 int child2_id = layer_tree_root->children()[1]->id(); |
256 | 257 |
257 host_->SetRootLayer(layer_tree_root); | 258 host_->SetRootLayer(layer_tree_root); |
258 | 259 |
259 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 260 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
260 host_->active_tree()); | 261 host_->active_tree()); |
261 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 262 LayerImpl* layer_impl_tree_root = |
| 263 host_->active_tree()->root_layer_for_testing(); |
262 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 264 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
263 host_->active_tree()); | 265 host_->active_tree()); |
264 | 266 |
265 // We have to push properties to pick up the destruction list pointer. | 267 // We have to push properties to pick up the destruction list pointer. |
266 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), | 268 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), |
267 host_->active_tree()); | 269 host_->active_tree()); |
268 | 270 |
269 host_->active_tree()->ResetAllChangeTracking(); | 271 host_->active_tree()->ResetAllChangeTracking(); |
270 | 272 |
271 // re-insert the layer and sync again. | 273 // re-insert the layer and sync again. |
272 child2->RemoveFromParent(); | 274 child2->RemoveFromParent(); |
273 layer_tree_root->AddChild(child2); | 275 layer_tree_root->AddChild(child2); |
274 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 276 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
275 host_->active_tree()); | 277 host_->active_tree()); |
276 layer_impl_tree_root = host_->active_tree()->root_layer(); | 278 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
277 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 279 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
278 host_->active_tree()); | 280 host_->active_tree()); |
279 | 281 |
280 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), | 282 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), |
281 host_->active_tree()); | 283 host_->active_tree()); |
282 | 284 |
283 // Check that the impl thread properly tracked the change. | 285 // Check that the impl thread properly tracked the change. |
284 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged()); | 286 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged()); |
285 EXPECT_FALSE( | 287 EXPECT_FALSE( |
286 host_->active_tree()->LayerById(child1_id)->LayerPropertyChanged()); | 288 host_->active_tree()->LayerById(child1_id)->LayerPropertyChanged()); |
(...skipping 14 matching lines...) Expand all Loading... |
301 gfx::PointF root_position = gfx::PointF(2.3f, 7.4f); | 303 gfx::PointF root_position = gfx::PointF(2.3f, 7.4f); |
302 layer_tree_root->SetPosition(root_position); | 304 layer_tree_root->SetPosition(root_position); |
303 | 305 |
304 gfx::Size second_child_bounds = gfx::Size(25, 53); | 306 gfx::Size second_child_bounds = gfx::Size(25, 53); |
305 layer_tree_root->children()[1]->SetBounds(second_child_bounds); | 307 layer_tree_root->children()[1]->SetBounds(second_child_bounds); |
306 layer_tree_root->children()[1]->SavePaintProperties(); | 308 layer_tree_root->children()[1]->SavePaintProperties(); |
307 int second_child_id = layer_tree_root->children()[1]->id(); | 309 int second_child_id = layer_tree_root->children()[1]->id(); |
308 | 310 |
309 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 311 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
310 host_->active_tree()); | 312 host_->active_tree()); |
311 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 313 LayerImpl* layer_impl_tree_root = |
| 314 host_->active_tree()->root_layer_for_testing(); |
312 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 315 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
313 host_->active_tree()); | 316 host_->active_tree()); |
314 | 317 |
315 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), | 318 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), |
316 host_->active_tree()); | 319 host_->active_tree()); |
317 | 320 |
318 // Check that the property values we set on the Layer tree are reflected in | 321 // Check that the property values we set on the Layer tree are reflected in |
319 // the LayerImpl tree. | 322 // the LayerImpl tree. |
320 gfx::PointF root_layer_impl_position = layer_impl_tree_root->position(); | 323 gfx::PointF root_layer_impl_position = layer_impl_tree_root->position(); |
321 EXPECT_EQ(root_position.x(), root_layer_impl_position.x()); | 324 EXPECT_EQ(root_position.x(), root_layer_impl_position.x()); |
(...skipping 27 matching lines...) Expand all Loading... |
349 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); | 352 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); |
350 | 353 |
351 scoped_refptr<Layer> layer_c = layer_b->children()[0]; | 354 scoped_refptr<Layer> layer_c = layer_b->children()[0]; |
352 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); | 355 layer_b->AddChild(MockLayer::Create(&layer_impl_destruction_list)); |
353 scoped_refptr<Layer> layer_d = layer_b->children()[1]; | 356 scoped_refptr<Layer> layer_d = layer_b->children()[1]; |
354 | 357 |
355 host_->SetRootLayer(layer_tree_root); | 358 host_->SetRootLayer(layer_tree_root); |
356 | 359 |
357 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 360 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
358 host_->active_tree()); | 361 host_->active_tree()); |
359 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 362 LayerImpl* layer_impl_tree_root = |
| 363 host_->active_tree()->root_layer_for_testing(); |
360 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 364 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
361 host_->active_tree()); | 365 host_->active_tree()); |
362 | 366 |
363 // We have to push properties to pick up the destruction list pointer. | 367 // We have to push properties to pick up the destruction list pointer. |
364 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), | 368 TreeSynchronizer::PushLayerProperties(layer_tree_root->layer_tree_host(), |
365 host_->active_tree()); | 369 host_->active_tree()); |
366 | 370 |
367 // Now restructure the tree to look like this: | 371 // Now restructure the tree to look like this: |
368 // root --- D ---+--- A | 372 // root --- D ---+--- A |
369 // | | 373 // | |
370 // +--- C --- B | 374 // +--- C --- B |
371 layer_tree_root->RemoveAllChildren(); | 375 layer_tree_root->RemoveAllChildren(); |
372 layer_d->RemoveAllChildren(); | 376 layer_d->RemoveAllChildren(); |
373 layer_tree_root->AddChild(layer_d); | 377 layer_tree_root->AddChild(layer_d); |
374 layer_a->RemoveAllChildren(); | 378 layer_a->RemoveAllChildren(); |
375 layer_d->AddChild(layer_a); | 379 layer_d->AddChild(layer_a); |
376 layer_c->RemoveAllChildren(); | 380 layer_c->RemoveAllChildren(); |
377 layer_d->AddChild(layer_c); | 381 layer_d->AddChild(layer_c); |
378 layer_b->RemoveAllChildren(); | 382 layer_b->RemoveAllChildren(); |
379 layer_c->AddChild(layer_b); | 383 layer_c->AddChild(layer_b); |
380 | 384 |
381 // After another synchronize our trees should match and we should not have | 385 // After another synchronize our trees should match and we should not have |
382 // destroyed any LayerImpls | 386 // destroyed any LayerImpls |
383 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 387 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
384 host_->active_tree()); | 388 host_->active_tree()); |
385 layer_impl_tree_root = host_->active_tree()->root_layer(); | 389 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
386 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 390 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
387 host_->active_tree()); | 391 host_->active_tree()); |
388 | 392 |
389 EXPECT_EQ(0u, layer_impl_destruction_list.size()); | 393 EXPECT_EQ(0u, layer_impl_destruction_list.size()); |
390 | 394 |
391 host_->active_tree()->DetachLayers(); | 395 host_->active_tree()->DetachLayers(); |
392 } | 396 } |
393 | 397 |
394 // Constructs a very simple tree, synchronizes it, then synchronizes to a | 398 // Constructs a very simple tree, synchronizes it, then synchronizes to a |
395 // totally new tree. All layers from the old tree should be deleted. | 399 // totally new tree. All layers from the old tree should be deleted. |
396 TEST_F(TreeSynchronizerTest, SyncSimpleTreeThenDestroy) { | 400 TEST_F(TreeSynchronizerTest, SyncSimpleTreeThenDestroy) { |
397 std::vector<int> layer_impl_destruction_list; | 401 std::vector<int> layer_impl_destruction_list; |
398 | 402 |
399 scoped_refptr<Layer> old_layer_tree_root = | 403 scoped_refptr<Layer> old_layer_tree_root = |
400 MockLayer::Create(&layer_impl_destruction_list); | 404 MockLayer::Create(&layer_impl_destruction_list); |
401 old_layer_tree_root->AddChild( | 405 old_layer_tree_root->AddChild( |
402 MockLayer::Create(&layer_impl_destruction_list)); | 406 MockLayer::Create(&layer_impl_destruction_list)); |
403 old_layer_tree_root->AddChild( | 407 old_layer_tree_root->AddChild( |
404 MockLayer::Create(&layer_impl_destruction_list)); | 408 MockLayer::Create(&layer_impl_destruction_list)); |
405 | 409 |
406 host_->SetRootLayer(old_layer_tree_root); | 410 host_->SetRootLayer(old_layer_tree_root); |
407 | 411 |
408 int old_tree_root_layer_id = old_layer_tree_root->id(); | 412 int old_tree_root_layer_id = old_layer_tree_root->id(); |
409 int old_tree_first_child_layer_id = old_layer_tree_root->children()[0]->id(); | 413 int old_tree_first_child_layer_id = old_layer_tree_root->children()[0]->id(); |
410 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id(); | 414 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id(); |
411 | 415 |
412 TreeSynchronizer::SynchronizeTrees(old_layer_tree_root.get(), | 416 TreeSynchronizer::SynchronizeTrees(old_layer_tree_root.get(), |
413 host_->active_tree()); | 417 host_->active_tree()); |
414 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 418 LayerImpl* layer_impl_tree_root = |
| 419 host_->active_tree()->root_layer_for_testing(); |
415 ExpectTreesAreIdentical(old_layer_tree_root.get(), layer_impl_tree_root, | 420 ExpectTreesAreIdentical(old_layer_tree_root.get(), layer_impl_tree_root, |
416 host_->active_tree()); | 421 host_->active_tree()); |
417 | 422 |
418 // We have to push properties to pick up the destruction list pointer. | 423 // We have to push properties to pick up the destruction list pointer. |
419 TreeSynchronizer::PushLayerProperties(old_layer_tree_root->layer_tree_host(), | 424 TreeSynchronizer::PushLayerProperties(old_layer_tree_root->layer_tree_host(), |
420 host_->active_tree()); | 425 host_->active_tree()); |
421 | 426 |
422 // Remove all children on the Layer side. | 427 // Remove all children on the Layer side. |
423 old_layer_tree_root->RemoveAllChildren(); | 428 old_layer_tree_root->RemoveAllChildren(); |
424 | 429 |
425 // Synchronize again. After the sync all LayerImpls from the old tree should | 430 // Synchronize again. After the sync all LayerImpls from the old tree should |
426 // be deleted. | 431 // be deleted. |
427 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(); | 432 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(); |
428 host_->SetRootLayer(new_layer_tree_root); | 433 host_->SetRootLayer(new_layer_tree_root); |
429 | 434 |
430 TreeSynchronizer::SynchronizeTrees(new_layer_tree_root.get(), | 435 TreeSynchronizer::SynchronizeTrees(new_layer_tree_root.get(), |
431 host_->active_tree()); | 436 host_->active_tree()); |
432 layer_impl_tree_root = host_->active_tree()->root_layer(); | 437 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
433 ExpectTreesAreIdentical(new_layer_tree_root.get(), layer_impl_tree_root, | 438 ExpectTreesAreIdentical(new_layer_tree_root.get(), layer_impl_tree_root, |
434 host_->active_tree()); | 439 host_->active_tree()); |
435 | 440 |
436 ASSERT_EQ(3u, layer_impl_destruction_list.size()); | 441 ASSERT_EQ(3u, layer_impl_destruction_list.size()); |
437 | 442 |
438 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), | 443 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), |
439 layer_impl_destruction_list.end(), | 444 layer_impl_destruction_list.end(), |
440 old_tree_root_layer_id) != | 445 old_tree_root_layer_id) != |
441 layer_impl_destruction_list.end()); | 446 layer_impl_destruction_list.end()); |
442 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), | 447 EXPECT_TRUE(std::find(layer_impl_destruction_list.begin(), |
(...skipping 25 matching lines...) Expand all Loading... |
468 scoped_refptr<Layer> replica_layer_with_mask = Layer::Create(); | 473 scoped_refptr<Layer> replica_layer_with_mask = Layer::Create(); |
469 scoped_refptr<Layer> replica_mask_layer = Layer::Create(); | 474 scoped_refptr<Layer> replica_mask_layer = Layer::Create(); |
470 replica_layer_with_mask->SetMaskLayer(replica_mask_layer.get()); | 475 replica_layer_with_mask->SetMaskLayer(replica_mask_layer.get()); |
471 layer_tree_root->children()[2]->SetReplicaLayer( | 476 layer_tree_root->children()[2]->SetReplicaLayer( |
472 replica_layer_with_mask.get()); | 477 replica_layer_with_mask.get()); |
473 | 478 |
474 host_->SetRootLayer(layer_tree_root); | 479 host_->SetRootLayer(layer_tree_root); |
475 host_->BuildPropertyTreesForTesting(); | 480 host_->BuildPropertyTreesForTesting(); |
476 host_->CommitAndCreateLayerImplTree(); | 481 host_->CommitAndCreateLayerImplTree(); |
477 | 482 |
478 LayerImpl* layer_impl_tree_root = host_->active_tree()->root_layer(); | 483 LayerImpl* layer_impl_tree_root = |
| 484 host_->active_tree()->root_layer_for_testing(); |
479 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 485 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
480 host_->active_tree()); | 486 host_->active_tree()); |
481 | 487 |
482 // Remove the mask layer. | 488 // Remove the mask layer. |
483 layer_tree_root->children()[0]->SetMaskLayer(NULL); | 489 layer_tree_root->children()[0]->SetMaskLayer(NULL); |
484 host_->BuildPropertyTreesForTesting(); | 490 host_->BuildPropertyTreesForTesting(); |
485 host_->CommitAndCreateLayerImplTree(); | 491 host_->CommitAndCreateLayerImplTree(); |
486 | 492 |
487 layer_impl_tree_root = host_->active_tree()->root_layer(); | 493 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
488 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 494 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
489 host_->active_tree()); | 495 host_->active_tree()); |
490 | 496 |
491 // Remove the replica layer. | 497 // Remove the replica layer. |
492 layer_tree_root->children()[1]->SetReplicaLayer(NULL); | 498 layer_tree_root->children()[1]->SetReplicaLayer(NULL); |
493 host_->BuildPropertyTreesForTesting(); | 499 host_->BuildPropertyTreesForTesting(); |
494 host_->CommitAndCreateLayerImplTree(); | 500 host_->CommitAndCreateLayerImplTree(); |
495 | 501 |
496 layer_impl_tree_root = host_->active_tree()->root_layer(); | 502 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
497 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 503 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
498 host_->active_tree()); | 504 host_->active_tree()); |
499 | 505 |
500 // Remove the replica mask. | 506 // Remove the replica mask. |
501 replica_layer_with_mask->SetMaskLayer(NULL); | 507 replica_layer_with_mask->SetMaskLayer(NULL); |
502 host_->BuildPropertyTreesForTesting(); | 508 host_->BuildPropertyTreesForTesting(); |
503 host_->CommitAndCreateLayerImplTree(); | 509 host_->CommitAndCreateLayerImplTree(); |
504 | 510 |
505 layer_impl_tree_root = host_->active_tree()->root_layer(); | 511 layer_impl_tree_root = host_->active_tree()->root_layer_for_testing(); |
506 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, | 512 ExpectTreesAreIdentical(layer_tree_root.get(), layer_impl_tree_root, |
507 host_->active_tree()); | 513 host_->active_tree()); |
508 | 514 |
509 host_->active_tree()->DetachLayers(); | 515 host_->active_tree()->DetachLayers(); |
510 } | 516 } |
511 | 517 |
512 TEST_F(TreeSynchronizerTest, SynchronizeCurrentlyScrollingNode) { | 518 TEST_F(TreeSynchronizerTest, SynchronizeCurrentlyScrollingNode) { |
513 LayerTreeSettings settings; | 519 LayerTreeSettings settings; |
514 FakeLayerTreeHostImplClient client; | 520 FakeLayerTreeHostImplClient client; |
515 FakeImplTaskRunnerProvider task_runner_provider; | 521 FakeImplTaskRunnerProvider task_runner_provider; |
(...skipping 16 matching lines...) Expand all Loading... |
532 | 538 |
533 transient_scroll_layer->SetScrollClipLayerId( | 539 transient_scroll_layer->SetScrollClipLayerId( |
534 transient_scroll_clip_layer->id()); | 540 transient_scroll_clip_layer->id()); |
535 scroll_layer->SetScrollClipLayerId(scroll_clip_layer->id()); | 541 scroll_layer->SetScrollClipLayerId(scroll_clip_layer->id()); |
536 host_->SetRootLayer(layer_tree_root); | 542 host_->SetRootLayer(layer_tree_root); |
537 host_->BuildPropertyTreesForTesting(); | 543 host_->BuildPropertyTreesForTesting(); |
538 host_->CommitAndCreatePendingTree(); | 544 host_->CommitAndCreatePendingTree(); |
539 host_impl->ActivateSyncTree(); | 545 host_impl->ActivateSyncTree(); |
540 | 546 |
541 ExpectTreesAreIdentical(layer_tree_root.get(), | 547 ExpectTreesAreIdentical(layer_tree_root.get(), |
542 host_impl->active_tree()->root_layer(), | 548 host_impl->active_tree()->root_layer_for_testing(), |
543 host_impl->active_tree()); | 549 host_impl->active_tree()); |
544 | 550 |
545 host_impl->active_tree()->SetCurrentlyScrollingLayer( | 551 host_impl->active_tree()->SetCurrentlyScrollingLayer( |
546 host_impl->active_tree()->LayerById(scroll_layer->id())); | 552 host_impl->active_tree()->LayerById(scroll_layer->id())); |
547 transient_scroll_layer->SetScrollClipLayerId(Layer::INVALID_ID); | 553 transient_scroll_layer->SetScrollClipLayerId(Layer::INVALID_ID); |
548 host_->BuildPropertyTreesForTesting(); | 554 host_->BuildPropertyTreesForTesting(); |
549 | 555 |
550 host_impl->CreatePendingTree(); | 556 host_impl->CreatePendingTree(); |
551 host_->CommitAndCreatePendingTree(); | 557 host_->CommitAndCreatePendingTree(); |
552 host_impl->ActivateSyncTree(); | 558 host_impl->ActivateSyncTree(); |
(...skipping 30 matching lines...) Expand all Loading... |
583 scroll_layer->SetScrollClipLayerId(scroll_clip_layer->id()); | 589 scroll_layer->SetScrollClipLayerId(scroll_clip_layer->id()); |
584 transient_scroll_layer->SetScrollOffset(gfx::ScrollOffset(1, 2)); | 590 transient_scroll_layer->SetScrollOffset(gfx::ScrollOffset(1, 2)); |
585 scroll_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); | 591 scroll_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); |
586 | 592 |
587 host_->SetRootLayer(layer_tree_root); | 593 host_->SetRootLayer(layer_tree_root); |
588 host_->BuildPropertyTreesForTesting(); | 594 host_->BuildPropertyTreesForTesting(); |
589 host_->CommitAndCreatePendingTree(); | 595 host_->CommitAndCreatePendingTree(); |
590 host_impl->ActivateSyncTree(); | 596 host_impl->ActivateSyncTree(); |
591 | 597 |
592 ExpectTreesAreIdentical(layer_tree_root.get(), | 598 ExpectTreesAreIdentical(layer_tree_root.get(), |
593 host_impl->active_tree()->root_layer(), | 599 host_impl->active_tree()->root_layer_for_testing(), |
594 host_impl->active_tree()); | 600 host_impl->active_tree()); |
595 | 601 |
596 // After the initial commit, scroll_offset_map in scroll_tree is expected to | 602 // After the initial commit, scroll_offset_map in scroll_tree is expected to |
597 // have one entry for scroll_layer and one entry for transient_scroll_layer, | 603 // have one entry for scroll_layer and one entry for transient_scroll_layer, |
598 // the pending base and active base must be the same at this stage. | 604 // the pending base and active base must be the same at this stage. |
599 ScrollTree::ScrollOffsetMap scroll_offset_map; | 605 ScrollTree::ScrollOffsetMap scroll_offset_map; |
600 scroll_offset_map[scroll_layer->id()] = new SyncedScrollOffset; | 606 scroll_offset_map[scroll_layer->id()] = new SyncedScrollOffset; |
601 scroll_offset_map[transient_scroll_layer->id()] = new SyncedScrollOffset; | 607 scroll_offset_map[transient_scroll_layer->id()] = new SyncedScrollOffset; |
602 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( | 608 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( |
603 scroll_layer->scroll_offset()); | 609 scroll_layer->scroll_offset()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 scroll_offset_map[scroll_layer->id()]->PullDeltaForMainThread(); | 652 scroll_offset_map[scroll_layer->id()]->PullDeltaForMainThread(); |
647 scroll_offset_map[scroll_layer->id()]->SetCurrent(gfx::ScrollOffset(40, 50)); | 653 scroll_offset_map[scroll_layer->id()]->SetCurrent(gfx::ScrollOffset(40, 50)); |
648 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( | 654 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( |
649 gfx::ScrollOffset(100, 100)); | 655 gfx::ScrollOffset(100, 100)); |
650 scroll_offset_map[scroll_layer->id()]->PushPendingToActive(); | 656 scroll_offset_map[scroll_layer->id()]->PushPendingToActive(); |
651 EXPECT_TRUE(is_equal(scroll_offset_map, scroll_tree.scroll_offset_map())); | 657 EXPECT_TRUE(is_equal(scroll_offset_map, scroll_tree.scroll_offset_map())); |
652 } | 658 } |
653 | 659 |
654 } // namespace | 660 } // namespace |
655 } // namespace cc | 661 } // namespace cc |
OLD | NEW |