Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: cc/layers/texture_layer_unittest.cc

Issue 2317753002: cc: Abstract the LayerTreeHost. (Closed)
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/layers/surface_layer_unittest.cc ('k') | cc/test/layer_tree_pixel_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/layers/texture_layer.h" 5 #include "cc/layers/texture_layer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 633
634 class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest { 634 class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest {
635 public: 635 public:
636 TextureLayerImplWithMailboxThreadedCallback() = default; 636 TextureLayerImplWithMailboxThreadedCallback() = default;
637 637
638 std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface( 638 std::unique_ptr<TestDelegatingOutputSurface> CreateDelegatingOutputSurface(
639 scoped_refptr<ContextProvider> compositor_context_provider, 639 scoped_refptr<ContextProvider> compositor_context_provider,
640 scoped_refptr<ContextProvider> worker_context_provider) override { 640 scoped_refptr<ContextProvider> worker_context_provider) override {
641 bool synchronous_composite = 641 bool synchronous_composite =
642 !HasImplThread() && 642 !HasImplThread() &&
643 !layer_tree_host()->settings().single_thread_proxy_scheduler; 643 !layer_tree_host()->GetSettings().single_thread_proxy_scheduler;
644 // Allow relaim resources for this test so that mailboxes in the display 644 // Allow relaim resources for this test so that mailboxes in the display
645 // will be returned inside the commit that replaces them. 645 // will be returned inside the commit that replaces them.
646 bool force_disable_reclaim_resources = false; 646 bool force_disable_reclaim_resources = false;
647 return base::MakeUnique<TestDelegatingOutputSurface>( 647 return base::MakeUnique<TestDelegatingOutputSurface>(
648 compositor_context_provider, std::move(worker_context_provider), 648 compositor_context_provider, std::move(worker_context_provider),
649 CreateDisplayOutputSurface(compositor_context_provider), 649 CreateDisplayOutputSurface(compositor_context_provider),
650 shared_bitmap_manager(), gpu_memory_buffer_manager(), 650 shared_bitmap_manager(), gpu_memory_buffer_manager(),
651 layer_tree_host()->settings().renderer_settings, ImplThreadTaskRunner(), 651 layer_tree_host()->GetSettings().renderer_settings,
652 synchronous_composite, force_disable_reclaim_resources); 652 ImplThreadTaskRunner(), synchronous_composite,
653 force_disable_reclaim_resources);
653 } 654 }
654 655
655 // Make sure callback is received on main and doesn't block the impl thread. 656 // Make sure callback is received on main and doesn't block the impl thread.
656 void ReleaseCallback(char mailbox_char, 657 void ReleaseCallback(char mailbox_char,
657 const gpu::SyncToken& sync_token, 658 const gpu::SyncToken& sync_token,
658 bool lost_resource) { 659 bool lost_resource) {
659 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); 660 EXPECT_EQ(true, main_thread_.CalledOnValidThread());
660 EXPECT_FALSE(lost_resource); 661 EXPECT_FALSE(lost_resource);
661 ++callback_count_; 662 ++callback_count_;
662 } 663 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 } 799 }
799 800
800 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override { 801 void WillActivateTreeOnThread(LayerTreeHostImpl* impl) override {
801 base::AutoLock lock(activate_count_lock_); 802 base::AutoLock lock(activate_count_lock_);
802 ++activate_count_; 803 ++activate_count_;
803 } 804 }
804 805
805 void DidCommit() override { 806 void DidCommit() override {
806 // The first frame doesn't cause anything to be returned so it does not 807 // The first frame doesn't cause anything to be returned so it does not
807 // need to wait for activation. 808 // need to wait for activation.
808 if (layer_tree_host()->source_frame_number() > 1) { 809 if (layer_tree_host()->SourceFrameNumber() > 1) {
809 base::AutoLock lock(activate_count_lock_); 810 base::AutoLock lock(activate_count_lock_);
810 // The activate happened before commit is done on the main side. 811 // The activate happened before commit is done on the main side.
811 EXPECT_EQ(activate_count_, layer_tree_host()->source_frame_number()); 812 EXPECT_EQ(activate_count_, layer_tree_host()->SourceFrameNumber());
812 } 813 }
813 814
814 switch (layer_tree_host()->source_frame_number()) { 815 switch (layer_tree_host()->SourceFrameNumber()) {
815 case 1: 816 case 1:
816 // The first mailbox has been activated. Set a new mailbox, and 817 // The first mailbox has been activated. Set a new mailbox, and
817 // expect the next commit to finish *after* it is activated. 818 // expect the next commit to finish *after* it is activated.
818 SetMailbox('2'); 819 SetMailbox('2');
819 break; 820 break;
820 case 2: 821 case 2:
821 // The second mailbox has been activated. Remove the layer from 822 // The second mailbox has been activated. Remove the layer from
822 // the tree to cause another commit/activation. The commit should 823 // the tree to cause another commit/activation. The commit should
823 // finish *after* the layer is removed from the active tree. 824 // finish *after* the layer is removed from the active tree.
824 layer_->RemoveFromParent(); 825 layer_->RemoveFromParent();
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 // Checks that TextureLayer::Update does not cause an extra commit when setting 1049 // Checks that TextureLayer::Update does not cause an extra commit when setting
1049 // the texture mailbox. 1050 // the texture mailbox.
1050 class TextureLayerNoExtraCommitForMailboxTest 1051 class TextureLayerNoExtraCommitForMailboxTest
1051 : public LayerTreeTest, 1052 : public LayerTreeTest,
1052 public TextureLayerClient { 1053 public TextureLayerClient {
1053 public: 1054 public:
1054 // TextureLayerClient implementation. 1055 // TextureLayerClient implementation.
1055 bool PrepareTextureMailbox( 1056 bool PrepareTextureMailbox(
1056 TextureMailbox* texture_mailbox, 1057 TextureMailbox* texture_mailbox,
1057 std::unique_ptr<SingleReleaseCallback>* release_callback) override { 1058 std::unique_ptr<SingleReleaseCallback>* release_callback) override {
1058 if (layer_tree_host()->source_frame_number() == 1) { 1059 if (layer_tree_host()->SourceFrameNumber() == 1) {
1059 // Once this has been committed, the mailbox will be released. 1060 // Once this has been committed, the mailbox will be released.
1060 *texture_mailbox = TextureMailbox(); 1061 *texture_mailbox = TextureMailbox();
1061 return true; 1062 return true;
1062 } 1063 }
1063 1064
1064 *texture_mailbox = TextureMailbox(MailboxFromChar('1'), 1065 *texture_mailbox = TextureMailbox(MailboxFromChar('1'),
1065 SyncTokenFromUInt(0x123), GL_TEXTURE_2D); 1066 SyncTokenFromUInt(0x123), GL_TEXTURE_2D);
1066 *release_callback = SingleReleaseCallback::Create( 1067 *release_callback = SingleReleaseCallback::Create(
1067 base::Bind(&TextureLayerNoExtraCommitForMailboxTest::MailboxReleased, 1068 base::Bind(&TextureLayerNoExtraCommitForMailboxTest::MailboxReleased,
1068 base::Unretained(this))); 1069 base::Unretained(this)));
(...skipping 15 matching lines...) Expand all
1084 texture_layer_->SetIsDrawable(true); 1085 texture_layer_->SetIsDrawable(true);
1085 root->AddChild(texture_layer_); 1086 root->AddChild(texture_layer_);
1086 1087
1087 layer_tree()->SetRootLayer(root); 1088 layer_tree()->SetRootLayer(root);
1088 LayerTreeTest::SetupTree(); 1089 LayerTreeTest::SetupTree();
1089 } 1090 }
1090 1091
1091 void BeginTest() override { PostSetNeedsCommitToMainThread(); } 1092 void BeginTest() override { PostSetNeedsCommitToMainThread(); }
1092 1093
1093 void DidCommitAndDrawFrame() override { 1094 void DidCommitAndDrawFrame() override {
1094 switch (layer_tree_host()->source_frame_number()) { 1095 switch (layer_tree_host()->SourceFrameNumber()) {
1095 case 1: 1096 case 1:
1096 EXPECT_FALSE(proxy()->MainFrameWillHappenForTesting()); 1097 EXPECT_FALSE(proxy()->MainFrameWillHappenForTesting());
1097 // Invalidate the texture layer to clear the mailbox before 1098 // Invalidate the texture layer to clear the mailbox before
1098 // ending the test. 1099 // ending the test.
1099 texture_layer_->SetNeedsDisplay(); 1100 texture_layer_->SetNeedsDisplay();
1100 break; 1101 break;
1101 case 2: 1102 case 2:
1102 break; 1103 break;
1103 default: 1104 default:
1104 NOTREACHED(); 1105 NOTREACHED();
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 callback_count_ = 0; 1357 callback_count_ = 0;
1357 1358
1358 // Set the mailbox on the main thread. 1359 // Set the mailbox on the main thread.
1359 SetMailbox('1'); 1360 SetMailbox('1');
1360 EXPECT_EQ(0, callback_count_); 1361 EXPECT_EQ(0, callback_count_);
1361 1362
1362 PostSetNeedsCommitToMainThread(); 1363 PostSetNeedsCommitToMainThread();
1363 } 1364 }
1364 1365
1365 void DidCommitAndDrawFrame() override { 1366 void DidCommitAndDrawFrame() override {
1366 switch (layer_tree_host()->source_frame_number()) { 1367 switch (layer_tree_host()->SourceFrameNumber()) {
1367 case 1: 1368 case 1:
1368 // Delete the TextureLayer on the main thread while the mailbox is in 1369 // Delete the TextureLayer on the main thread while the mailbox is in
1369 // the impl tree. 1370 // the impl tree.
1370 layer_->RemoveFromParent(); 1371 layer_->RemoveFromParent();
1371 layer_ = nullptr; 1372 layer_ = nullptr;
1372 break; 1373 break;
1373 } 1374 }
1374 } 1375 }
1375 1376
1376 void AfterTest() override { EXPECT_EQ(1, callback_count_); } 1377 void AfterTest() override { EXPECT_EQ(1, callback_count_); }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1426 callback_count_ = 0; 1427 callback_count_ = 0;
1427 1428
1428 // Set the mailbox on the main thread. 1429 // Set the mailbox on the main thread.
1429 SetMailbox('1'); 1430 SetMailbox('1');
1430 EXPECT_EQ(0, callback_count_); 1431 EXPECT_EQ(0, callback_count_);
1431 1432
1432 PostSetNeedsCommitToMainThread(); 1433 PostSetNeedsCommitToMainThread();
1433 } 1434 }
1434 1435
1435 void DidCommitAndDrawFrame() override { 1436 void DidCommitAndDrawFrame() override {
1436 switch (layer_tree_host()->source_frame_number()) { 1437 switch (layer_tree_host()->SourceFrameNumber()) {
1437 case 1: 1438 case 1:
1438 // Remove the TextureLayer on the main thread while the mailbox is in 1439 // Remove the TextureLayer on the main thread while the mailbox is in
1439 // the impl tree, but don't delete the TextureLayer until after the impl 1440 // the impl tree, but don't delete the TextureLayer until after the impl
1440 // tree side is deleted. 1441 // tree side is deleted.
1441 layer_->RemoveFromParent(); 1442 layer_->RemoveFromParent();
1442 break; 1443 break;
1443 case 2: 1444 case 2:
1444 layer_ = nullptr; 1445 layer_ = nullptr;
1445 break; 1446 break;
1446 } 1447 }
1447 } 1448 }
1448 1449
1449 void AfterTest() override { EXPECT_EQ(1, callback_count_); } 1450 void AfterTest() override { EXPECT_EQ(1, callback_count_); }
1450 1451
1451 private: 1452 private:
1452 base::ThreadChecker main_thread_; 1453 base::ThreadChecker main_thread_;
1453 int callback_count_; 1454 int callback_count_;
1454 scoped_refptr<Layer> root_; 1455 scoped_refptr<Layer> root_;
1455 scoped_refptr<TextureLayer> layer_; 1456 scoped_refptr<TextureLayer> layer_;
1456 }; 1457 };
1457 1458
1458 SINGLE_AND_MULTI_THREAD_TEST_F(TextureLayerWithMailboxImplThreadDeleted); 1459 SINGLE_AND_MULTI_THREAD_TEST_F(TextureLayerWithMailboxImplThreadDeleted);
1459 1460
1460 } // namespace 1461 } // namespace
1461 } // namespace cc 1462 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/surface_layer_unittest.cc ('k') | cc/test/layer_tree_pixel_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698