| 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 clip_children_impl->end()); | 188 clip_children_impl->end()); |
| 189 } | 189 } |
| 190 | 190 |
| 191 for (size_t i = 0; i < layer_children.size(); ++i) { | 191 for (size_t i = 0; i < layer_children.size(); ++i) { |
| 192 SCOPED_TRACE(base::StringPrintf("child layer %" PRIuS, i).c_str()); | 192 SCOPED_TRACE(base::StringPrintf("child layer %" PRIuS, i).c_str()); |
| 193 ExpectTreesAreIdentical(layer_children[i].get(), | 193 ExpectTreesAreIdentical(layer_children[i].get(), |
| 194 layer_impl_children[i].get(), tree_impl); | 194 layer_impl_children[i].get(), tree_impl); |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 void PushLayerPropertiesTo(LayerTreeHost* tree_host, LayerTreeImpl* tree_impl) { |
| 199 std::unordered_set<Layer*> layers_that_should_push_properties = |
| 200 tree_host->LayersThatShouldPushProperties(); |
| 201 for (auto layer : layers_that_should_push_properties) { |
| 202 LayerImpl* impl_layer = tree_impl->LayerById(layer->id()); |
| 203 DCHECK(impl_layer) << layer->id(); |
| 204 layer->PushPropertiesTo(impl_layer); |
| 205 } |
| 206 } |
| 207 |
| 198 class LayerTreeSettingsForTreeSynchronizerTest : public LayerTreeSettings { | 208 class LayerTreeSettingsForTreeSynchronizerTest : public LayerTreeSettings { |
| 199 public: | 209 public: |
| 200 LayerTreeSettingsForTreeSynchronizerTest() { | 210 LayerTreeSettingsForTreeSynchronizerTest() { |
| 201 use_compositor_animation_timelines = true; | 211 use_compositor_animation_timelines = true; |
| 202 } | 212 } |
| 203 }; | 213 }; |
| 204 | 214 |
| 205 class TreeSynchronizerTest : public testing::Test { | 215 class TreeSynchronizerTest : public testing::Test { |
| 206 public: | 216 public: |
| 207 TreeSynchronizerTest() | 217 TreeSynchronizerTest() |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 host_->SetRootLayer(layer_tree_root); | 292 host_->SetRootLayer(layer_tree_root); |
| 283 | 293 |
| 284 scoped_ptr<LayerImpl> layer_impl_tree_root = | 294 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 285 TreeSynchronizer::SynchronizeTrees( | 295 TreeSynchronizer::SynchronizeTrees( |
| 286 layer_tree_root.get(), nullptr, host_->active_tree()); | 296 layer_tree_root.get(), nullptr, host_->active_tree()); |
| 287 ExpectTreesAreIdentical(layer_tree_root.get(), | 297 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 288 layer_impl_tree_root.get(), | 298 layer_impl_tree_root.get(), |
| 289 host_->active_tree()); | 299 host_->active_tree()); |
| 290 | 300 |
| 291 // We have to push properties to pick up the destruction list pointer. | 301 // We have to push properties to pick up the destruction list pointer. |
| 292 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 302 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 293 layer_impl_tree_root.get()); | 303 host_->active_tree()); |
| 294 | 304 |
| 295 // Add a new layer to the Layer side | 305 // Add a new layer to the Layer side |
| 296 layer_tree_root->children()[0]->AddChild( | 306 layer_tree_root->children()[0]->AddChild( |
| 297 MockLayer::Create(layer_settings_, &layer_impl_destruction_list)); | 307 MockLayer::Create(layer_settings_, &layer_impl_destruction_list)); |
| 298 // Remove one. | 308 // Remove one. |
| 299 layer_tree_root->children()[1]->RemoveFromParent(); | 309 layer_tree_root->children()[1]->RemoveFromParent(); |
| 300 int second_layer_impl_id = layer_impl_tree_root->children()[1]->id(); | 310 int second_layer_impl_id = layer_impl_tree_root->children()[1]->id(); |
| 301 | 311 |
| 302 // Synchronize again. After the sync the trees should be equivalent and we | 312 // Synchronize again. After the sync the trees should be equivalent and we |
| 303 // should have created and destroyed one LayerImpl. | 313 // should have created and destroyed one LayerImpl. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 330 host_->SetRootLayer(layer_tree_root); | 340 host_->SetRootLayer(layer_tree_root); |
| 331 | 341 |
| 332 scoped_ptr<LayerImpl> layer_impl_tree_root = | 342 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 333 TreeSynchronizer::SynchronizeTrees( | 343 TreeSynchronizer::SynchronizeTrees( |
| 334 layer_tree_root.get(), nullptr, host_->active_tree()); | 344 layer_tree_root.get(), nullptr, host_->active_tree()); |
| 335 ExpectTreesAreIdentical(layer_tree_root.get(), | 345 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 336 layer_impl_tree_root.get(), | 346 layer_impl_tree_root.get(), |
| 337 host_->active_tree()); | 347 host_->active_tree()); |
| 338 | 348 |
| 339 // We have to push properties to pick up the destruction list pointer. | 349 // We have to push properties to pick up the destruction list pointer. |
| 340 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 350 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 341 layer_impl_tree_root.get()); | 351 host_->active_tree()); |
| 342 | 352 |
| 343 layer_impl_tree_root->ResetAllChangeTrackingForSubtree(); | 353 layer_impl_tree_root->ResetAllChangeTrackingForSubtree(); |
| 344 | 354 |
| 345 // re-insert the layer and sync again. | 355 // re-insert the layer and sync again. |
| 346 child2->RemoveFromParent(); | 356 child2->RemoveFromParent(); |
| 347 layer_tree_root->AddChild(child2); | 357 layer_tree_root->AddChild(child2); |
| 348 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 358 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 349 layer_tree_root.get(), std::move(layer_impl_tree_root), | 359 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 350 host_->active_tree()); | 360 host_->active_tree()); |
| 351 ExpectTreesAreIdentical(layer_tree_root.get(), | 361 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 352 layer_impl_tree_root.get(), | 362 layer_impl_tree_root.get(), |
| 353 host_->active_tree()); | 363 host_->active_tree()); |
| 354 | 364 |
| 355 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 365 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 356 layer_impl_tree_root.get()); | 366 host_->active_tree()); |
| 357 | 367 |
| 358 // Check that the impl thread properly tracked the change. | 368 // Check that the impl thread properly tracked the change. |
| 359 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged()); | 369 EXPECT_FALSE(layer_impl_tree_root->LayerPropertyChanged()); |
| 360 EXPECT_FALSE(layer_impl_tree_root->children()[0]->LayerPropertyChanged()); | 370 EXPECT_FALSE(layer_impl_tree_root->children()[0]->LayerPropertyChanged()); |
| 361 EXPECT_TRUE(layer_impl_tree_root->children()[1]->LayerPropertyChanged()); | 371 EXPECT_TRUE(layer_impl_tree_root->children()[1]->LayerPropertyChanged()); |
| 362 } | 372 } |
| 363 | 373 |
| 364 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndProperties) { | 374 TEST_F(TreeSynchronizerTest, SyncSimpleTreeAndProperties) { |
| 365 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_); | 375 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings_); |
| 366 layer_tree_root->AddChild(Layer::Create(layer_settings_)); | 376 layer_tree_root->AddChild(Layer::Create(layer_settings_)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 380 layer_tree_root->children()[1]->SetBounds(second_child_bounds); | 390 layer_tree_root->children()[1]->SetBounds(second_child_bounds); |
| 381 layer_tree_root->children()[1]->SavePaintProperties(); | 391 layer_tree_root->children()[1]->SavePaintProperties(); |
| 382 | 392 |
| 383 scoped_ptr<LayerImpl> layer_impl_tree_root = | 393 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 384 TreeSynchronizer::SynchronizeTrees( | 394 TreeSynchronizer::SynchronizeTrees( |
| 385 layer_tree_root.get(), nullptr, host_->active_tree()); | 395 layer_tree_root.get(), nullptr, host_->active_tree()); |
| 386 ExpectTreesAreIdentical(layer_tree_root.get(), | 396 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 387 layer_impl_tree_root.get(), | 397 layer_impl_tree_root.get(), |
| 388 host_->active_tree()); | 398 host_->active_tree()); |
| 389 | 399 |
| 390 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 400 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 391 layer_impl_tree_root.get()); | 401 host_->active_tree()); |
| 392 | 402 |
| 393 // Check that the property values we set on the Layer tree are reflected in | 403 // Check that the property values we set on the Layer tree are reflected in |
| 394 // the LayerImpl tree. | 404 // the LayerImpl tree. |
| 395 gfx::PointF root_layer_impl_position = layer_impl_tree_root->position(); | 405 gfx::PointF root_layer_impl_position = layer_impl_tree_root->position(); |
| 396 EXPECT_EQ(root_position.x(), root_layer_impl_position.x()); | 406 EXPECT_EQ(root_position.x(), root_layer_impl_position.x()); |
| 397 EXPECT_EQ(root_position.y(), root_layer_impl_position.y()); | 407 EXPECT_EQ(root_position.y(), root_layer_impl_position.y()); |
| 398 | 408 |
| 399 EXPECT_EQ(first_child_opacity, | 409 EXPECT_EQ(first_child_opacity, |
| 400 layer_impl_tree_root->children()[0]->opacity()); | 410 layer_impl_tree_root->children()[0]->opacity()); |
| 401 | 411 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 host_->SetRootLayer(layer_tree_root); | 445 host_->SetRootLayer(layer_tree_root); |
| 436 | 446 |
| 437 scoped_ptr<LayerImpl> layer_impl_tree_root = | 447 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 438 TreeSynchronizer::SynchronizeTrees( | 448 TreeSynchronizer::SynchronizeTrees( |
| 439 layer_tree_root.get(), nullptr, host_->active_tree()); | 449 layer_tree_root.get(), nullptr, host_->active_tree()); |
| 440 ExpectTreesAreIdentical(layer_tree_root.get(), | 450 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 441 layer_impl_tree_root.get(), | 451 layer_impl_tree_root.get(), |
| 442 host_->active_tree()); | 452 host_->active_tree()); |
| 443 | 453 |
| 444 // We have to push properties to pick up the destruction list pointer. | 454 // We have to push properties to pick up the destruction list pointer. |
| 445 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 455 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 446 layer_impl_tree_root.get()); | 456 host_->active_tree()); |
| 447 | 457 |
| 448 // Now restructure the tree to look like this: | 458 // Now restructure the tree to look like this: |
| 449 // root --- D ---+--- A | 459 // root --- D ---+--- A |
| 450 // | | 460 // | |
| 451 // +--- C --- B | 461 // +--- C --- B |
| 452 layer_tree_root->RemoveAllChildren(); | 462 layer_tree_root->RemoveAllChildren(); |
| 453 layer_d->RemoveAllChildren(); | 463 layer_d->RemoveAllChildren(); |
| 454 layer_tree_root->AddChild(layer_d); | 464 layer_tree_root->AddChild(layer_d); |
| 455 layer_a->RemoveAllChildren(); | 465 layer_a->RemoveAllChildren(); |
| 456 layer_d->AddChild(layer_a); | 466 layer_d->AddChild(layer_a); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id(); | 500 int old_tree_second_child_layer_id = old_layer_tree_root->children()[1]->id(); |
| 491 | 501 |
| 492 scoped_ptr<LayerImpl> layer_impl_tree_root = | 502 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 493 TreeSynchronizer::SynchronizeTrees( | 503 TreeSynchronizer::SynchronizeTrees( |
| 494 old_layer_tree_root.get(), nullptr, host_->active_tree()); | 504 old_layer_tree_root.get(), nullptr, host_->active_tree()); |
| 495 ExpectTreesAreIdentical(old_layer_tree_root.get(), | 505 ExpectTreesAreIdentical(old_layer_tree_root.get(), |
| 496 layer_impl_tree_root.get(), | 506 layer_impl_tree_root.get(), |
| 497 host_->active_tree()); | 507 host_->active_tree()); |
| 498 | 508 |
| 499 // We have to push properties to pick up the destruction list pointer. | 509 // We have to push properties to pick up the destruction list pointer. |
| 500 TreeSynchronizer::PushProperties(old_layer_tree_root.get(), | 510 PushLayerPropertiesTo(old_layer_tree_root->layer_tree_host(), |
| 501 layer_impl_tree_root.get()); | 511 host_->active_tree()); |
| 502 | 512 |
| 503 // Remove all children on the Layer side. | 513 // Remove all children on the Layer side. |
| 504 old_layer_tree_root->RemoveAllChildren(); | 514 old_layer_tree_root->RemoveAllChildren(); |
| 505 | 515 |
| 506 // Synchronize again. After the sync all LayerImpls from the old tree should | 516 // Synchronize again. After the sync all LayerImpls from the old tree should |
| 507 // be deleted. | 517 // be deleted. |
| 508 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(layer_settings_); | 518 scoped_refptr<Layer> new_layer_tree_root = Layer::Create(layer_settings_); |
| 509 host_->SetRootLayer(new_layer_tree_root); | 519 host_->SetRootLayer(new_layer_tree_root); |
| 510 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 520 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 511 new_layer_tree_root.get(), std::move(layer_impl_tree_root), | 521 new_layer_tree_root.get(), std::move(layer_impl_tree_root), |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 | 620 |
| 611 layer_tree_root->SetLayerAnimationControllerForTest( | 621 layer_tree_root->SetLayerAnimationControllerForTest( |
| 612 FakeLayerAnimationController::Create()); | 622 FakeLayerAnimationController::Create()); |
| 613 | 623 |
| 614 EXPECT_FALSE(static_cast<FakeLayerAnimationController*>( | 624 EXPECT_FALSE(static_cast<FakeLayerAnimationController*>( |
| 615 layer_tree_root->layer_animation_controller())->SynchronizedAnimations()); | 625 layer_tree_root->layer_animation_controller())->SynchronizedAnimations()); |
| 616 | 626 |
| 617 scoped_ptr<LayerImpl> layer_impl_tree_root = | 627 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 618 TreeSynchronizer::SynchronizeTrees( | 628 TreeSynchronizer::SynchronizeTrees( |
| 619 layer_tree_root.get(), nullptr, host_->active_tree()); | 629 layer_tree_root.get(), nullptr, host_->active_tree()); |
| 620 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 630 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 621 layer_impl_tree_root.get()); | 631 host_impl->active_tree()); |
| 622 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 632 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 623 layer_tree_root.get(), std::move(layer_impl_tree_root), | 633 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 624 host_->active_tree()); | 634 host_->active_tree()); |
| 625 | 635 |
| 626 EXPECT_TRUE(static_cast<FakeLayerAnimationController*>( | 636 EXPECT_TRUE(static_cast<FakeLayerAnimationController*>( |
| 627 layer_tree_root->layer_animation_controller())->SynchronizedAnimations()); | 637 layer_tree_root->layer_animation_controller())->SynchronizedAnimations()); |
| 628 } | 638 } |
| 629 | 639 |
| 630 TEST_F(TreeSynchronizerTest, SynchronizeScrollParent) { | 640 TEST_F(TreeSynchronizerTest, SynchronizeScrollParent) { |
| 631 LayerTreeSettings settings; | 641 LayerTreeSettings settings; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 645 | 655 |
| 646 host_->SetRootLayer(layer_tree_root); | 656 host_->SetRootLayer(layer_tree_root); |
| 647 | 657 |
| 648 // First child is the second and third child's scroll parent. | 658 // First child is the second and third child's scroll parent. |
| 649 layer_tree_root->children()[1]->SetScrollParent(scroll_parent.get()); | 659 layer_tree_root->children()[1]->SetScrollParent(scroll_parent.get()); |
| 650 layer_tree_root->children()[2]->SetScrollParent(scroll_parent.get()); | 660 layer_tree_root->children()[2]->SetScrollParent(scroll_parent.get()); |
| 651 | 661 |
| 652 scoped_ptr<LayerImpl> layer_impl_tree_root = | 662 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 653 TreeSynchronizer::SynchronizeTrees( | 663 TreeSynchronizer::SynchronizeTrees( |
| 654 layer_tree_root.get(), nullptr, host_impl->active_tree()); | 664 layer_tree_root.get(), nullptr, host_impl->active_tree()); |
| 655 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 665 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 656 layer_impl_tree_root.get()); | 666 host_impl->active_tree()); |
| 657 { | 667 { |
| 658 SCOPED_TRACE("case one"); | 668 SCOPED_TRACE("case one"); |
| 659 ExpectTreesAreIdentical(layer_tree_root.get(), | 669 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 660 layer_impl_tree_root.get(), | 670 layer_impl_tree_root.get(), |
| 661 host_impl->active_tree()); | 671 host_impl->active_tree()); |
| 662 } | 672 } |
| 663 | 673 |
| 664 // Remove the first scroll child. | 674 // Remove the first scroll child. |
| 665 layer_tree_root->children()[1]->RemoveFromParent(); | 675 layer_tree_root->children()[1]->RemoveFromParent(); |
| 666 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 676 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 667 layer_tree_root.get(), std::move(layer_impl_tree_root), | 677 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 668 host_impl->active_tree()); | 678 host_impl->active_tree()); |
| 669 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 679 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 670 layer_impl_tree_root.get()); | 680 host_impl->active_tree()); |
| 671 { | 681 { |
| 672 SCOPED_TRACE("case two"); | 682 SCOPED_TRACE("case two"); |
| 673 ExpectTreesAreIdentical(layer_tree_root.get(), | 683 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 674 layer_impl_tree_root.get(), | 684 layer_impl_tree_root.get(), |
| 675 host_impl->active_tree()); | 685 host_impl->active_tree()); |
| 676 } | 686 } |
| 677 | 687 |
| 678 // Add an additional scroll layer. | 688 // Add an additional scroll layer. |
| 679 scoped_refptr<Layer> additional_scroll_child = Layer::Create(layer_settings_); | 689 scoped_refptr<Layer> additional_scroll_child = Layer::Create(layer_settings_); |
| 680 layer_tree_root->AddChild(additional_scroll_child); | 690 layer_tree_root->AddChild(additional_scroll_child); |
| 681 additional_scroll_child->SetScrollParent(scroll_parent.get()); | 691 additional_scroll_child->SetScrollParent(scroll_parent.get()); |
| 682 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 692 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 683 layer_tree_root.get(), std::move(layer_impl_tree_root), | 693 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 684 host_impl->active_tree()); | 694 host_impl->active_tree()); |
| 685 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 695 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 686 layer_impl_tree_root.get()); | 696 host_impl->active_tree()); |
| 687 { | 697 { |
| 688 SCOPED_TRACE("case three"); | 698 SCOPED_TRACE("case three"); |
| 689 ExpectTreesAreIdentical(layer_tree_root.get(), | 699 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 690 layer_impl_tree_root.get(), | 700 layer_impl_tree_root.get(), |
| 691 host_impl->active_tree()); | 701 host_impl->active_tree()); |
| 692 } | 702 } |
| 693 } | 703 } |
| 694 | 704 |
| 695 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) { | 705 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) { |
| 696 LayerTreeSettings settings; | 706 LayerTreeSettings settings; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 714 | 724 |
| 715 host_->SetRootLayer(layer_tree_root); | 725 host_->SetRootLayer(layer_tree_root); |
| 716 | 726 |
| 717 // First child is the second and third child's scroll parent. | 727 // First child is the second and third child's scroll parent. |
| 718 clip_child1->SetClipParent(clip_parent.get()); | 728 clip_child1->SetClipParent(clip_parent.get()); |
| 719 clip_child2->SetClipParent(clip_parent.get()); | 729 clip_child2->SetClipParent(clip_parent.get()); |
| 720 | 730 |
| 721 scoped_ptr<LayerImpl> layer_impl_tree_root = | 731 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 722 TreeSynchronizer::SynchronizeTrees( | 732 TreeSynchronizer::SynchronizeTrees( |
| 723 layer_tree_root.get(), nullptr, host_impl->active_tree()); | 733 layer_tree_root.get(), nullptr, host_impl->active_tree()); |
| 724 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 734 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 725 layer_impl_tree_root.get()); | 735 host_impl->active_tree()); |
| 726 ExpectTreesAreIdentical(layer_tree_root.get(), | 736 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 727 layer_impl_tree_root.get(), | 737 layer_impl_tree_root.get(), |
| 728 host_impl->active_tree()); | 738 host_impl->active_tree()); |
| 729 | 739 |
| 730 // Remove the first clip child. | 740 // Remove the first clip child. |
| 731 clip_child1->RemoveFromParent(); | 741 clip_child1->RemoveFromParent(); |
| 732 clip_child1 = NULL; | 742 clip_child1 = NULL; |
| 733 | 743 |
| 734 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 744 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 735 layer_tree_root.get(), std::move(layer_impl_tree_root), | 745 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 736 host_impl->active_tree()); | 746 host_impl->active_tree()); |
| 737 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 747 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 738 layer_impl_tree_root.get()); | 748 host_impl->active_tree()); |
| 739 ExpectTreesAreIdentical(layer_tree_root.get(), | 749 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 740 layer_impl_tree_root.get(), | 750 layer_impl_tree_root.get(), |
| 741 host_impl->active_tree()); | 751 host_impl->active_tree()); |
| 742 | 752 |
| 743 // Add an additional clip child. | 753 // Add an additional clip child. |
| 744 scoped_refptr<Layer> additional_clip_child = Layer::Create(layer_settings_); | 754 scoped_refptr<Layer> additional_clip_child = Layer::Create(layer_settings_); |
| 745 intervening->AddChild(additional_clip_child); | 755 intervening->AddChild(additional_clip_child); |
| 746 additional_clip_child->SetClipParent(clip_parent.get()); | 756 additional_clip_child->SetClipParent(clip_parent.get()); |
| 747 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 757 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 748 layer_tree_root.get(), std::move(layer_impl_tree_root), | 758 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 749 host_impl->active_tree()); | 759 host_impl->active_tree()); |
| 750 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 760 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 751 layer_impl_tree_root.get()); | 761 host_impl->active_tree()); |
| 752 ExpectTreesAreIdentical(layer_tree_root.get(), | 762 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 753 layer_impl_tree_root.get(), | 763 layer_impl_tree_root.get(), |
| 754 host_impl->active_tree()); | 764 host_impl->active_tree()); |
| 755 | 765 |
| 756 // Remove the nearest clipping ancestor. | 766 // Remove the nearest clipping ancestor. |
| 757 clip_parent->RemoveFromParent(); | 767 clip_parent->RemoveFromParent(); |
| 758 clip_parent = NULL; | 768 clip_parent = NULL; |
| 759 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( | 769 layer_impl_tree_root = TreeSynchronizer::SynchronizeTrees( |
| 760 layer_tree_root.get(), std::move(layer_impl_tree_root), | 770 layer_tree_root.get(), std::move(layer_impl_tree_root), |
| 761 host_impl->active_tree()); | 771 host_impl->active_tree()); |
| 762 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 772 PushLayerPropertiesTo(layer_tree_root->layer_tree_host(), |
| 763 layer_impl_tree_root.get()); | 773 host_impl->active_tree()); |
| 764 ExpectTreesAreIdentical(layer_tree_root.get(), | 774 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 765 layer_impl_tree_root.get(), | 775 layer_impl_tree_root.get(), |
| 766 host_impl->active_tree()); | 776 host_impl->active_tree()); |
| 767 | 777 |
| 768 // The clip children should have been unhooked. | 778 // The clip children should have been unhooked. |
| 769 EXPECT_EQ(2u, intervening->children().size()); | 779 EXPECT_EQ(2u, intervening->children().size()); |
| 770 EXPECT_FALSE(clip_child2->clip_parent()); | 780 EXPECT_FALSE(clip_child2->clip_parent()); |
| 771 EXPECT_FALSE(additional_clip_child->clip_parent()); | 781 EXPECT_FALSE(additional_clip_child->clip_parent()); |
| 772 } | 782 } |
| 773 | 783 |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 scroll_offset_map[scroll_layer->id()]->PullDeltaForMainThread(); | 920 scroll_offset_map[scroll_layer->id()]->PullDeltaForMainThread(); |
| 911 scroll_offset_map[scroll_layer->id()]->SetCurrent(gfx::ScrollOffset(40, 50)); | 921 scroll_offset_map[scroll_layer->id()]->SetCurrent(gfx::ScrollOffset(40, 50)); |
| 912 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( | 922 scroll_offset_map[scroll_layer->id()]->PushFromMainThread( |
| 913 gfx::ScrollOffset(100, 100)); | 923 gfx::ScrollOffset(100, 100)); |
| 914 scroll_offset_map[scroll_layer->id()]->PushPendingToActive(); | 924 scroll_offset_map[scroll_layer->id()]->PushPendingToActive(); |
| 915 EXPECT_TRUE(is_equal(scroll_offset_map, scroll_tree.scroll_offset_map())); | 925 EXPECT_TRUE(is_equal(scroll_offset_map, scroll_tree.scroll_offset_map())); |
| 916 } | 926 } |
| 917 | 927 |
| 918 } // namespace | 928 } // namespace |
| 919 } // namespace cc | 929 } // namespace cc |
| OLD | NEW |