Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 if (layer_impl_destruction_list_) | 34 if (layer_impl_destruction_list_) |
| 35 layer_impl_destruction_list_->push_back(id()); | 35 layer_impl_destruction_list_->push_back(id()); |
| 36 } | 36 } |
| 37 | 37 |
| 38 void SetLayerImplDestructionList(std::vector<int>* list) { | 38 void SetLayerImplDestructionList(std::vector<int>* list) { |
| 39 layer_impl_destruction_list_ = list; | 39 layer_impl_destruction_list_ = list; |
| 40 } | 40 } |
| 41 | 41 |
| 42 private: | 42 private: |
| 43 MockLayerImpl(LayerTreeImpl* tree_impl, int layer_id) | 43 MockLayerImpl(LayerTreeImpl* tree_impl, int layer_id) |
| 44 : LayerImpl(tree_impl, layer_id), | 44 : LayerImpl(tree_impl, layer_id), layer_impl_destruction_list_(nullptr) {} |
| 45 layer_impl_destruction_list_(NULL) {} | |
| 46 | 45 |
| 47 std::vector<int>* layer_impl_destruction_list_; | 46 std::vector<int>* layer_impl_destruction_list_; |
| 48 }; | 47 }; |
| 49 | 48 |
| 50 class MockLayer : public Layer { | 49 class MockLayer : public Layer { |
| 51 public: | 50 public: |
| 52 static scoped_refptr<MockLayer> Create( | 51 static scoped_refptr<MockLayer> Create( |
| 53 std::vector<int>* layer_impl_destruction_list) { | 52 std::vector<int>* layer_impl_destruction_list) { |
| 54 return make_scoped_refptr(new MockLayer(layer_impl_destruction_list)); | 53 return make_scoped_refptr(new MockLayer(layer_impl_destruction_list)); |
| 55 } | 54 } |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 195 | 194 |
| 196 protected: | 195 protected: |
| 197 FakeLayerTreeHostClient client_; | 196 FakeLayerTreeHostClient client_; |
| 198 scoped_ptr<FakeLayerTreeHost> host_; | 197 scoped_ptr<FakeLayerTreeHost> host_; |
| 199 }; | 198 }; |
| 200 | 199 |
| 201 // Attempts to synchronizes a null tree. This should not crash, and should | 200 // Attempts to synchronizes a null tree. This should not crash, and should |
| 202 // return a null tree. | 201 // return a null tree. |
| 203 TEST_F(TreeSynchronizerTest, SyncNullTree) { | 202 TEST_F(TreeSynchronizerTest, SyncNullTree) { |
| 204 scoped_ptr<LayerImpl> layer_impl_tree_root = | 203 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 205 TreeSynchronizer::SynchronizeTrees(static_cast<Layer*>(NULL), | 204 TreeSynchronizer::SynchronizeTrees(static_cast<Layer*>(nullptr), |
|
danakj
2014/10/10 16:47:12
static cast isn't needed, remove that please
| |
| 206 scoped_ptr<LayerImpl>(), | 205 scoped_ptr<LayerImpl>(), |
| 207 host_->active_tree()); | 206 host_->active_tree()); |
| 208 | 207 |
| 209 EXPECT_TRUE(!layer_impl_tree_root.get()); | 208 EXPECT_TRUE(!layer_impl_tree_root.get()); |
| 210 } | 209 } |
| 211 | 210 |
| 212 // Constructs a very simple tree and synchronizes it without trying to reuse any | 211 // Constructs a very simple tree and synchronizes it without trying to reuse any |
| 213 // preexisting layers. | 212 // preexisting layers. |
| 214 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) { | 213 TEST_F(TreeSynchronizerTest, SyncSimpleTreeFromEmpty) { |
| 215 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 214 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 519 scoped_ptr<LayerImpl> layer_impl_tree_root = | 518 scoped_ptr<LayerImpl> layer_impl_tree_root = |
| 520 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 519 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 521 scoped_ptr<LayerImpl>(), | 520 scoped_ptr<LayerImpl>(), |
| 522 host_->active_tree()); | 521 host_->active_tree()); |
| 523 | 522 |
| 524 ExpectTreesAreIdentical(layer_tree_root.get(), | 523 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 525 layer_impl_tree_root.get(), | 524 layer_impl_tree_root.get(), |
| 526 host_->active_tree()); | 525 host_->active_tree()); |
| 527 | 526 |
| 528 // Remove the mask layer. | 527 // Remove the mask layer. |
| 529 layer_tree_root->children()[0]->SetMaskLayer(NULL); | 528 layer_tree_root->children()[0]->SetMaskLayer(nullptr); |
| 530 layer_impl_tree_root = | 529 layer_impl_tree_root = |
| 531 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 530 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 532 layer_impl_tree_root.Pass(), | 531 layer_impl_tree_root.Pass(), |
| 533 host_->active_tree()); | 532 host_->active_tree()); |
| 534 ExpectTreesAreIdentical(layer_tree_root.get(), | 533 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 535 layer_impl_tree_root.get(), | 534 layer_impl_tree_root.get(), |
| 536 host_->active_tree()); | 535 host_->active_tree()); |
| 537 | 536 |
| 538 // Remove the replica layer. | 537 // Remove the replica layer. |
| 539 layer_tree_root->children()[1]->SetReplicaLayer(NULL); | 538 layer_tree_root->children()[1]->SetReplicaLayer(nullptr); |
| 540 layer_impl_tree_root = | 539 layer_impl_tree_root = |
| 541 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 540 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 542 layer_impl_tree_root.Pass(), | 541 layer_impl_tree_root.Pass(), |
| 543 host_->active_tree()); | 542 host_->active_tree()); |
| 544 ExpectTreesAreIdentical(layer_tree_root.get(), | 543 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 545 layer_impl_tree_root.get(), | 544 layer_impl_tree_root.get(), |
| 546 host_->active_tree()); | 545 host_->active_tree()); |
| 547 | 546 |
| 548 // Remove the replica mask. | 547 // Remove the replica mask. |
| 549 replica_layer_with_mask->SetMaskLayer(NULL); | 548 replica_layer_with_mask->SetMaskLayer(nullptr); |
| 550 layer_impl_tree_root = | 549 layer_impl_tree_root = |
| 551 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 550 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 552 layer_impl_tree_root.Pass(), | 551 layer_impl_tree_root.Pass(), |
| 553 host_->active_tree()); | 552 host_->active_tree()); |
| 554 ExpectTreesAreIdentical(layer_tree_root.get(), | 553 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 555 layer_impl_tree_root.get(), | 554 layer_impl_tree_root.get(), |
| 556 host_->active_tree()); | 555 host_->active_tree()); |
| 557 } | 556 } |
| 558 | 557 |
| 559 TEST_F(TreeSynchronizerTest, SynchronizeAnimations) { | 558 TEST_F(TreeSynchronizerTest, SynchronizeAnimations) { |
| 560 LayerTreeSettings settings; | 559 LayerTreeSettings settings; |
| 561 FakeProxy proxy; | 560 FakeProxy proxy; |
| 562 DebugScopedSetImplThread impl(&proxy); | 561 DebugScopedSetImplThread impl(&proxy); |
| 563 FakeRenderingStatsInstrumentation stats_instrumentation; | 562 FakeRenderingStatsInstrumentation stats_instrumentation; |
| 564 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 563 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 565 new TestSharedBitmapManager()); | 564 new TestSharedBitmapManager()); |
| 566 scoped_ptr<LayerTreeHostImpl> host_impl = | 565 scoped_ptr<LayerTreeHostImpl> host_impl = |
| 567 LayerTreeHostImpl::Create(settings, | 566 LayerTreeHostImpl::Create(settings, |
| 568 NULL, | 567 nullptr, |
| 569 &proxy, | 568 &proxy, |
| 570 &stats_instrumentation, | 569 &stats_instrumentation, |
| 571 shared_bitmap_manager.get(), | 570 shared_bitmap_manager.get(), |
| 572 0); | 571 0); |
| 573 | 572 |
| 574 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 573 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
| 575 host_->SetRootLayer(layer_tree_root); | 574 host_->SetRootLayer(layer_tree_root); |
| 576 | 575 |
| 577 layer_tree_root->SetLayerAnimationControllerForTest( | 576 layer_tree_root->SetLayerAnimationControllerForTest( |
| 578 FakeLayerAnimationController::Create()); | 577 FakeLayerAnimationController::Create()); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 597 | 596 |
| 598 TEST_F(TreeSynchronizerTest, SynchronizeScrollParent) { | 597 TEST_F(TreeSynchronizerTest, SynchronizeScrollParent) { |
| 599 LayerTreeSettings settings; | 598 LayerTreeSettings settings; |
| 600 FakeProxy proxy; | 599 FakeProxy proxy; |
| 601 DebugScopedSetImplThread impl(&proxy); | 600 DebugScopedSetImplThread impl(&proxy); |
| 602 FakeRenderingStatsInstrumentation stats_instrumentation; | 601 FakeRenderingStatsInstrumentation stats_instrumentation; |
| 603 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 602 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 604 new TestSharedBitmapManager()); | 603 new TestSharedBitmapManager()); |
| 605 scoped_ptr<LayerTreeHostImpl> host_impl = | 604 scoped_ptr<LayerTreeHostImpl> host_impl = |
| 606 LayerTreeHostImpl::Create(settings, | 605 LayerTreeHostImpl::Create(settings, |
| 607 NULL, | 606 nullptr, |
| 608 &proxy, | 607 &proxy, |
| 609 &stats_instrumentation, | 608 &stats_instrumentation, |
| 610 shared_bitmap_manager.get(), | 609 shared_bitmap_manager.get(), |
| 611 0); | 610 0); |
| 612 | 611 |
| 613 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 612 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
| 614 scoped_refptr<Layer> scroll_parent = Layer::Create(); | 613 scoped_refptr<Layer> scroll_parent = Layer::Create(); |
| 615 layer_tree_root->AddChild(scroll_parent); | 614 layer_tree_root->AddChild(scroll_parent); |
| 616 layer_tree_root->AddChild(Layer::Create()); | 615 layer_tree_root->AddChild(Layer::Create()); |
| 617 layer_tree_root->AddChild(Layer::Create()); | 616 layer_tree_root->AddChild(Layer::Create()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 670 | 669 |
| 671 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) { | 670 TEST_F(TreeSynchronizerTest, SynchronizeClipParent) { |
| 672 LayerTreeSettings settings; | 671 LayerTreeSettings settings; |
| 673 FakeProxy proxy; | 672 FakeProxy proxy; |
| 674 DebugScopedSetImplThread impl(&proxy); | 673 DebugScopedSetImplThread impl(&proxy); |
| 675 FakeRenderingStatsInstrumentation stats_instrumentation; | 674 FakeRenderingStatsInstrumentation stats_instrumentation; |
| 676 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 675 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
| 677 new TestSharedBitmapManager()); | 676 new TestSharedBitmapManager()); |
| 678 scoped_ptr<LayerTreeHostImpl> host_impl = | 677 scoped_ptr<LayerTreeHostImpl> host_impl = |
| 679 LayerTreeHostImpl::Create(settings, | 678 LayerTreeHostImpl::Create(settings, |
| 680 NULL, | 679 nullptr, |
| 681 &proxy, | 680 &proxy, |
| 682 &stats_instrumentation, | 681 &stats_instrumentation, |
| 683 shared_bitmap_manager.get(), | 682 shared_bitmap_manager.get(), |
| 684 0); | 683 0); |
| 685 | 684 |
| 686 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 685 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
| 687 scoped_refptr<Layer> clip_parent = Layer::Create(); | 686 scoped_refptr<Layer> clip_parent = Layer::Create(); |
| 688 scoped_refptr<Layer> intervening = Layer::Create(); | 687 scoped_refptr<Layer> intervening = Layer::Create(); |
| 689 scoped_refptr<Layer> clip_child1 = Layer::Create(); | 688 scoped_refptr<Layer> clip_child1 = Layer::Create(); |
| 690 scoped_refptr<Layer> clip_child2 = Layer::Create(); | 689 scoped_refptr<Layer> clip_child2 = Layer::Create(); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 704 scoped_ptr<LayerImpl>(), | 703 scoped_ptr<LayerImpl>(), |
| 705 host_impl->active_tree()); | 704 host_impl->active_tree()); |
| 706 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 705 TreeSynchronizer::PushProperties(layer_tree_root.get(), |
| 707 layer_impl_tree_root.get()); | 706 layer_impl_tree_root.get()); |
| 708 ExpectTreesAreIdentical(layer_tree_root.get(), | 707 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 709 layer_impl_tree_root.get(), | 708 layer_impl_tree_root.get(), |
| 710 host_impl->active_tree()); | 709 host_impl->active_tree()); |
| 711 | 710 |
| 712 // Remove the first clip child. | 711 // Remove the first clip child. |
| 713 clip_child1->RemoveFromParent(); | 712 clip_child1->RemoveFromParent(); |
| 714 clip_child1 = NULL; | 713 clip_child1 = nullptr; |
| 715 | 714 |
| 716 layer_impl_tree_root = | 715 layer_impl_tree_root = |
| 717 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 716 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 718 layer_impl_tree_root.Pass(), | 717 layer_impl_tree_root.Pass(), |
| 719 host_impl->active_tree()); | 718 host_impl->active_tree()); |
| 720 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 719 TreeSynchronizer::PushProperties(layer_tree_root.get(), |
| 721 layer_impl_tree_root.get()); | 720 layer_impl_tree_root.get()); |
| 722 ExpectTreesAreIdentical(layer_tree_root.get(), | 721 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 723 layer_impl_tree_root.get(), | 722 layer_impl_tree_root.get(), |
| 724 host_impl->active_tree()); | 723 host_impl->active_tree()); |
| 725 | 724 |
| 726 // Add an additional clip child. | 725 // Add an additional clip child. |
| 727 scoped_refptr<Layer> additional_clip_child = Layer::Create(); | 726 scoped_refptr<Layer> additional_clip_child = Layer::Create(); |
| 728 intervening->AddChild(additional_clip_child); | 727 intervening->AddChild(additional_clip_child); |
| 729 additional_clip_child->SetClipParent(clip_parent.get()); | 728 additional_clip_child->SetClipParent(clip_parent.get()); |
| 730 layer_impl_tree_root = | 729 layer_impl_tree_root = |
| 731 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 730 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 732 layer_impl_tree_root.Pass(), | 731 layer_impl_tree_root.Pass(), |
| 733 host_impl->active_tree()); | 732 host_impl->active_tree()); |
| 734 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 733 TreeSynchronizer::PushProperties(layer_tree_root.get(), |
| 735 layer_impl_tree_root.get()); | 734 layer_impl_tree_root.get()); |
| 736 ExpectTreesAreIdentical(layer_tree_root.get(), | 735 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 737 layer_impl_tree_root.get(), | 736 layer_impl_tree_root.get(), |
| 738 host_impl->active_tree()); | 737 host_impl->active_tree()); |
| 739 | 738 |
| 740 // Remove the nearest clipping ancestor. | 739 // Remove the nearest clipping ancestor. |
| 741 clip_parent->RemoveFromParent(); | 740 clip_parent->RemoveFromParent(); |
| 742 clip_parent = NULL; | 741 clip_parent = nullptr; |
| 743 layer_impl_tree_root = | 742 layer_impl_tree_root = |
| 744 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), | 743 TreeSynchronizer::SynchronizeTrees(layer_tree_root.get(), |
| 745 layer_impl_tree_root.Pass(), | 744 layer_impl_tree_root.Pass(), |
| 746 host_impl->active_tree()); | 745 host_impl->active_tree()); |
| 747 TreeSynchronizer::PushProperties(layer_tree_root.get(), | 746 TreeSynchronizer::PushProperties(layer_tree_root.get(), |
| 748 layer_impl_tree_root.get()); | 747 layer_impl_tree_root.get()); |
| 749 ExpectTreesAreIdentical(layer_tree_root.get(), | 748 ExpectTreesAreIdentical(layer_tree_root.get(), |
| 750 layer_impl_tree_root.get(), | 749 layer_impl_tree_root.get(), |
| 751 host_impl->active_tree()); | 750 host_impl->active_tree()); |
| 752 | 751 |
| 753 // The clip children should have been unhooked. | 752 // The clip children should have been unhooked. |
| 754 EXPECT_EQ(2u, intervening->children().size()); | 753 EXPECT_EQ(2u, intervening->children().size()); |
| 755 EXPECT_FALSE(clip_child2->clip_parent()); | 754 EXPECT_FALSE(clip_child2->clip_parent()); |
| 756 EXPECT_FALSE(additional_clip_child->clip_parent()); | 755 EXPECT_FALSE(additional_clip_child->clip_parent()); |
| 757 } | 756 } |
| 758 | 757 |
| 759 } // namespace | 758 } // namespace |
| 760 } // namespace cc | 759 } // namespace cc |
| OLD | NEW |