| OLD | NEW |
| 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> |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/bind.h" | 13 #include "base/bind.h" |
| 14 #include "base/callback.h" | 14 #include "base/callback.h" |
| 15 #include "base/location.h" | 15 #include "base/location.h" |
| 16 #include "base/macros.h" | 16 #include "base/macros.h" |
| 17 #include "base/memory/ptr_util.h" |
| 17 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| 18 #include "base/synchronization/lock.h" | 19 #include "base/synchronization/lock.h" |
| 19 #include "base/synchronization/waitable_event.h" | 20 #include "base/synchronization/waitable_event.h" |
| 20 #include "base/thread_task_runner_handle.h" | 21 #include "base/thread_task_runner_handle.h" |
| 21 #include "base/threading/thread.h" | 22 #include "base/threading/thread.h" |
| 22 #include "base/time/time.h" | 23 #include "base/time/time.h" |
| 23 #include "cc/layers/solid_color_layer.h" | 24 #include "cc/layers/solid_color_layer.h" |
| 24 #include "cc/layers/texture_layer_client.h" | 25 #include "cc/layers/texture_layer_client.h" |
| 25 #include "cc/layers/texture_layer_impl.h" | 26 #include "cc/layers/texture_layer_impl.h" |
| 26 #include "cc/output/compositor_frame_ack.h" | 27 #include "cc/output/compositor_frame_ack.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 57 return mailbox; | 58 return mailbox; |
| 58 } | 59 } |
| 59 | 60 |
| 60 gpu::SyncToken SyncTokenFromUInt(uint32_t value) { | 61 gpu::SyncToken SyncTokenFromUInt(uint32_t value) { |
| 61 return gpu::SyncToken(gpu::CommandBufferNamespace::GPU_IO, 0, | 62 return gpu::SyncToken(gpu::CommandBufferNamespace::GPU_IO, 0, |
| 62 gpu::CommandBufferId::FromUnsafeValue(0x123), value); | 63 gpu::CommandBufferId::FromUnsafeValue(0x123), value); |
| 63 } | 64 } |
| 64 | 65 |
| 65 class MockLayerTreeHost : public LayerTreeHost { | 66 class MockLayerTreeHost : public LayerTreeHost { |
| 66 public: | 67 public: |
| 67 static scoped_ptr<MockLayerTreeHost> Create( | 68 static std::unique_ptr<MockLayerTreeHost> Create( |
| 68 FakeLayerTreeHostClient* client, | 69 FakeLayerTreeHostClient* client, |
| 69 TaskGraphRunner* task_graph_runner) { | 70 TaskGraphRunner* task_graph_runner) { |
| 70 LayerTreeHost::InitParams params; | 71 LayerTreeHost::InitParams params; |
| 71 params.client = client; | 72 params.client = client; |
| 72 params.task_graph_runner = task_graph_runner; | 73 params.task_graph_runner = task_graph_runner; |
| 73 LayerTreeSettings settings; | 74 LayerTreeSettings settings; |
| 74 params.settings = &settings; | 75 params.settings = &settings; |
| 75 return make_scoped_ptr(new MockLayerTreeHost(client, ¶ms)); | 76 return base::WrapUnique(new MockLayerTreeHost(client, ¶ms)); |
| 76 } | 77 } |
| 77 | 78 |
| 78 MOCK_METHOD0(SetNeedsCommit, void()); | 79 MOCK_METHOD0(SetNeedsCommit, void()); |
| 79 MOCK_METHOD0(SetNeedsUpdateLayers, void()); | 80 MOCK_METHOD0(SetNeedsUpdateLayers, void()); |
| 80 MOCK_METHOD0(StartRateLimiter, void()); | 81 MOCK_METHOD0(StartRateLimiter, void()); |
| 81 MOCK_METHOD0(StopRateLimiter, void()); | 82 MOCK_METHOD0(StopRateLimiter, void()); |
| 82 | 83 |
| 83 private: | 84 private: |
| 84 MockLayerTreeHost(FakeLayerTreeHostClient* client, | 85 MockLayerTreeHost(FakeLayerTreeHostClient* client, |
| 85 LayerTreeHost::InitParams* params) | 86 LayerTreeHost::InitParams* params) |
| 86 : LayerTreeHost(params, CompositorMode::SINGLE_THREADED) { | 87 : LayerTreeHost(params, CompositorMode::SINGLE_THREADED) { |
| 87 InitializeSingleThreaded(client, base::ThreadTaskRunnerHandle::Get(), | 88 InitializeSingleThreaded(client, base::ThreadTaskRunnerHandle::Get(), |
| 88 nullptr); | 89 nullptr); |
| 89 } | 90 } |
| 90 }; | 91 }; |
| 91 | 92 |
| 92 class FakeTextureLayerClient : public TextureLayerClient { | 93 class FakeTextureLayerClient : public TextureLayerClient { |
| 93 public: | 94 public: |
| 94 FakeTextureLayerClient() : mailbox_changed_(true) {} | 95 FakeTextureLayerClient() : mailbox_changed_(true) {} |
| 95 | 96 |
| 96 bool PrepareTextureMailbox( | 97 bool PrepareTextureMailbox( |
| 97 TextureMailbox* mailbox, | 98 TextureMailbox* mailbox, |
| 98 scoped_ptr<SingleReleaseCallback>* release_callback, | 99 std::unique_ptr<SingleReleaseCallback>* release_callback, |
| 99 bool use_shared_memory) override { | 100 bool use_shared_memory) override { |
| 100 if (!mailbox_changed_) | 101 if (!mailbox_changed_) |
| 101 return false; | 102 return false; |
| 102 | 103 |
| 103 *mailbox = mailbox_; | 104 *mailbox = mailbox_; |
| 104 *release_callback = std::move(release_callback_); | 105 *release_callback = std::move(release_callback_); |
| 105 mailbox_changed_ = false; | 106 mailbox_changed_ = false; |
| 106 return true; | 107 return true; |
| 107 } | 108 } |
| 108 | 109 |
| 109 void set_mailbox(const TextureMailbox& mailbox, | 110 void set_mailbox(const TextureMailbox& mailbox, |
| 110 scoped_ptr<SingleReleaseCallback> release_callback) { | 111 std::unique_ptr<SingleReleaseCallback> release_callback) { |
| 111 mailbox_ = mailbox; | 112 mailbox_ = mailbox; |
| 112 release_callback_ = std::move(release_callback); | 113 release_callback_ = std::move(release_callback); |
| 113 mailbox_changed_ = true; | 114 mailbox_changed_ = true; |
| 114 } | 115 } |
| 115 | 116 |
| 116 private: | 117 private: |
| 117 TextureMailbox mailbox_; | 118 TextureMailbox mailbox_; |
| 118 scoped_ptr<SingleReleaseCallback> release_callback_; | 119 std::unique_ptr<SingleReleaseCallback> release_callback_; |
| 119 bool mailbox_changed_; | 120 bool mailbox_changed_; |
| 120 DISALLOW_COPY_AND_ASSIGN(FakeTextureLayerClient); | 121 DISALLOW_COPY_AND_ASSIGN(FakeTextureLayerClient); |
| 121 }; | 122 }; |
| 122 | 123 |
| 123 class MockMailboxCallback { | 124 class MockMailboxCallback { |
| 124 public: | 125 public: |
| 125 MOCK_METHOD3(Release, | 126 MOCK_METHOD3(Release, |
| 126 void(const gpu::Mailbox& mailbox, | 127 void(const gpu::Mailbox& mailbox, |
| 127 const gpu::SyncToken& sync_token, | 128 const gpu::SyncToken& sync_token, |
| 128 bool lost_resource)); | 129 bool lost_resource)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 ReleaseCallback release_mailbox2_; | 190 ReleaseCallback release_mailbox2_; |
| 190 ReleaseCallback release_mailbox3_; | 191 ReleaseCallback release_mailbox3_; |
| 191 ReleaseCallbackImpl release_mailbox1_impl_; | 192 ReleaseCallbackImpl release_mailbox1_impl_; |
| 192 ReleaseCallbackImpl release_mailbox2_impl_; | 193 ReleaseCallbackImpl release_mailbox2_impl_; |
| 193 ReleaseCallbackImpl release_mailbox3_impl_; | 194 ReleaseCallbackImpl release_mailbox3_impl_; |
| 194 TextureMailbox mailbox1_; | 195 TextureMailbox mailbox1_; |
| 195 TextureMailbox mailbox2_; | 196 TextureMailbox mailbox2_; |
| 196 TextureMailbox mailbox3_; | 197 TextureMailbox mailbox3_; |
| 197 gpu::SyncToken sync_token1_; | 198 gpu::SyncToken sync_token1_; |
| 198 gpu::SyncToken sync_token2_; | 199 gpu::SyncToken sync_token2_; |
| 199 scoped_ptr<SharedBitmap> shared_bitmap_; | 200 std::unique_ptr<SharedBitmap> shared_bitmap_; |
| 200 }; | 201 }; |
| 201 | 202 |
| 202 class TextureLayerTest : public testing::Test { | 203 class TextureLayerTest : public testing::Test { |
| 203 public: | 204 public: |
| 204 TextureLayerTest() | 205 TextureLayerTest() |
| 205 : fake_client_( | 206 : fake_client_( |
| 206 FakeLayerTreeHostClient(FakeLayerTreeHostClient::DIRECT_3D)), | 207 FakeLayerTreeHostClient(FakeLayerTreeHostClient::DIRECT_3D)), |
| 207 output_surface_(FakeOutputSurface::Create3d()), | 208 output_surface_(FakeOutputSurface::Create3d()), |
| 208 host_impl_(&task_runner_provider_, | 209 host_impl_(&task_runner_provider_, |
| 209 &shared_bitmap_manager_, | 210 &shared_bitmap_manager_, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 220 } | 221 } |
| 221 | 222 |
| 222 void TearDown() override { | 223 void TearDown() override { |
| 223 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 224 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
| 224 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); | 225 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); |
| 225 | 226 |
| 226 layer_tree_host_->SetRootLayer(nullptr); | 227 layer_tree_host_->SetRootLayer(nullptr); |
| 227 layer_tree_host_ = nullptr; | 228 layer_tree_host_ = nullptr; |
| 228 } | 229 } |
| 229 | 230 |
| 230 scoped_ptr<MockLayerTreeHost> layer_tree_host_; | 231 std::unique_ptr<MockLayerTreeHost> layer_tree_host_; |
| 231 FakeImplTaskRunnerProvider task_runner_provider_; | 232 FakeImplTaskRunnerProvider task_runner_provider_; |
| 232 FakeLayerTreeHostClient fake_client_; | 233 FakeLayerTreeHostClient fake_client_; |
| 233 TestSharedBitmapManager shared_bitmap_manager_; | 234 TestSharedBitmapManager shared_bitmap_manager_; |
| 234 TestTaskGraphRunner task_graph_runner_; | 235 TestTaskGraphRunner task_graph_runner_; |
| 235 scoped_ptr<OutputSurface> output_surface_; | 236 std::unique_ptr<OutputSurface> output_surface_; |
| 236 FakeLayerTreeHostImpl host_impl_; | 237 FakeLayerTreeHostImpl host_impl_; |
| 237 CommonMailboxObjects test_data_; | 238 CommonMailboxObjects test_data_; |
| 238 }; | 239 }; |
| 239 | 240 |
| 240 TEST_F(TextureLayerTest, CheckPropertyChangeCausesCorrectBehavior) { | 241 TEST_F(TextureLayerTest, CheckPropertyChangeCausesCorrectBehavior) { |
| 241 scoped_refptr<TextureLayer> test_layer = | 242 scoped_refptr<TextureLayer> test_layer = |
| 242 TextureLayer::CreateForMailbox(nullptr); | 243 TextureLayer::CreateForMailbox(nullptr); |
| 243 EXPECT_SET_NEEDS_COMMIT(1, layer_tree_host_->SetRootLayer(test_layer)); | 244 EXPECT_SET_NEEDS_COMMIT(1, layer_tree_host_->SetRootLayer(test_layer)); |
| 244 | 245 |
| 245 // Test properties that should call SetNeedsCommit. All properties need to | 246 // Test properties that should call SetNeedsCommit. All properties need to |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 } | 381 } |
| 381 | 382 |
| 382 void CreateMainRef() { | 383 void CreateMainRef() { |
| 383 main_ref_ = TestMailboxHolder::Create( | 384 main_ref_ = TestMailboxHolder::Create( |
| 384 test_data_.mailbox1_, | 385 test_data_.mailbox1_, |
| 385 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); | 386 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); |
| 386 } | 387 } |
| 387 | 388 |
| 388 void ReleaseMainRef() { main_ref_ = nullptr; } | 389 void ReleaseMainRef() { main_ref_ = nullptr; } |
| 389 | 390 |
| 390 void CreateImplRef(scoped_ptr<SingleReleaseCallbackImpl>* impl_ref) { | 391 void CreateImplRef(std::unique_ptr<SingleReleaseCallbackImpl>* impl_ref) { |
| 391 *impl_ref = main_ref_->holder()->GetCallbackForImplThread(); | 392 *impl_ref = main_ref_->holder()->GetCallbackForImplThread(); |
| 392 } | 393 } |
| 393 | 394 |
| 394 void CapturePostTasksAndWait(base::WaitableEvent* begin_capture, | 395 void CapturePostTasksAndWait(base::WaitableEvent* begin_capture, |
| 395 base::WaitableEvent* wait_for_capture, | 396 base::WaitableEvent* wait_for_capture, |
| 396 base::WaitableEvent* stop_capture) { | 397 base::WaitableEvent* stop_capture) { |
| 397 begin_capture->Wait(); | 398 begin_capture->Wait(); |
| 398 BlockingTaskRunner::CapturePostTasks capture( | 399 BlockingTaskRunner::CapturePostTasks capture( |
| 399 main_thread_task_runner_.get()); | 400 main_thread_task_runner_.get()); |
| 400 wait_for_capture->Signal(); | 401 wait_for_capture->Signal(); |
| 401 stop_capture->Wait(); | 402 stop_capture->Wait(); |
| 402 } | 403 } |
| 403 | 404 |
| 404 protected: | 405 protected: |
| 405 void InitializeOnMain() { | 406 void InitializeOnMain() { |
| 406 main_thread_task_runner_ = | 407 main_thread_task_runner_ = |
| 407 BlockingTaskRunner::Create(main_thread_.task_runner()); | 408 BlockingTaskRunner::Create(main_thread_.task_runner()); |
| 408 } | 409 } |
| 409 | 410 |
| 410 scoped_ptr<TestMailboxHolder::MainThreadReference> | 411 std::unique_ptr<TestMailboxHolder::MainThreadReference> main_ref_; |
| 411 main_ref_; | |
| 412 base::Thread main_thread_; | 412 base::Thread main_thread_; |
| 413 scoped_ptr<BlockingTaskRunner> main_thread_task_runner_; | 413 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_; |
| 414 }; | 414 }; |
| 415 | 415 |
| 416 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) { | 416 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) { |
| 417 scoped_refptr<TextureLayer> test_layer = | 417 scoped_refptr<TextureLayer> test_layer = |
| 418 TextureLayer::CreateForMailbox(nullptr); | 418 TextureLayer::CreateForMailbox(nullptr); |
| 419 ASSERT_TRUE(test_layer.get()); | 419 ASSERT_TRUE(test_layer.get()); |
| 420 | 420 |
| 421 main_thread_.message_loop()->task_runner()->PostTask( | 421 main_thread_.message_loop()->task_runner()->PostTask( |
| 422 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 422 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 423 base::Unretained(this))); | 423 base::Unretained(this))); |
| 424 | 424 |
| 425 Wait(main_thread_); | 425 Wait(main_thread_); |
| 426 | 426 |
| 427 // The texture layer is attached to compositor1, and passes a reference to its | 427 // The texture layer is attached to compositor1, and passes a reference to its |
| 428 // impl tree. | 428 // impl tree. |
| 429 scoped_ptr<SingleReleaseCallbackImpl> compositor1; | 429 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 430 main_thread_.message_loop()->task_runner()->PostTask( | 430 main_thread_.message_loop()->task_runner()->PostTask( |
| 431 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 431 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 432 base::Unretained(this), &compositor1)); | 432 base::Unretained(this), &compositor1)); |
| 433 | 433 |
| 434 // Then the texture layer is removed and attached to compositor2, and passes a | 434 // Then the texture layer is removed and attached to compositor2, and passes a |
| 435 // reference to its impl tree. | 435 // reference to its impl tree. |
| 436 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 436 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 437 main_thread_.message_loop()->task_runner()->PostTask( | 437 main_thread_.message_loop()->task_runner()->PostTask( |
| 438 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 438 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 439 base::Unretained(this), &compositor2)); | 439 base::Unretained(this), &compositor2)); |
| 440 | 440 |
| 441 Wait(main_thread_); | 441 Wait(main_thread_); |
| 442 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 442 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 443 | 443 |
| 444 // The compositors both destroy their impl trees before the main thread layer | 444 // The compositors both destroy their impl trees before the main thread layer |
| 445 // is destroyed. | 445 // is destroyed. |
| 446 compositor1->Run(SyncTokenFromUInt(100), false, | 446 compositor1->Run(SyncTokenFromUInt(100), false, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 472 ASSERT_TRUE(test_layer.get()); | 472 ASSERT_TRUE(test_layer.get()); |
| 473 | 473 |
| 474 main_thread_.message_loop()->task_runner()->PostTask( | 474 main_thread_.message_loop()->task_runner()->PostTask( |
| 475 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 475 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 476 base::Unretained(this))); | 476 base::Unretained(this))); |
| 477 | 477 |
| 478 Wait(main_thread_); | 478 Wait(main_thread_); |
| 479 | 479 |
| 480 // The texture layer is attached to compositor1, and passes a reference to its | 480 // The texture layer is attached to compositor1, and passes a reference to its |
| 481 // impl tree. | 481 // impl tree. |
| 482 scoped_ptr<SingleReleaseCallbackImpl> compositor1; | 482 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 483 main_thread_.message_loop()->task_runner()->PostTask( | 483 main_thread_.message_loop()->task_runner()->PostTask( |
| 484 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 484 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 485 base::Unretained(this), &compositor1)); | 485 base::Unretained(this), &compositor1)); |
| 486 | 486 |
| 487 // Then the texture layer is removed and attached to compositor2, and passes a | 487 // Then the texture layer is removed and attached to compositor2, and passes a |
| 488 // reference to its impl tree. | 488 // reference to its impl tree. |
| 489 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 489 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 490 main_thread_.message_loop()->task_runner()->PostTask( | 490 main_thread_.message_loop()->task_runner()->PostTask( |
| 491 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 491 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 492 base::Unretained(this), &compositor2)); | 492 base::Unretained(this), &compositor2)); |
| 493 | 493 |
| 494 Wait(main_thread_); | 494 Wait(main_thread_); |
| 495 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 495 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 496 | 496 |
| 497 // One compositor destroys their impl tree. | 497 // One compositor destroys their impl tree. |
| 498 compositor1->Run(SyncTokenFromUInt(100), false, | 498 compositor1->Run(SyncTokenFromUInt(100), false, |
| 499 main_thread_task_runner_.get()); | 499 main_thread_task_runner_.get()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 526 ASSERT_TRUE(test_layer.get()); | 526 ASSERT_TRUE(test_layer.get()); |
| 527 | 527 |
| 528 main_thread_.message_loop()->task_runner()->PostTask( | 528 main_thread_.message_loop()->task_runner()->PostTask( |
| 529 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 529 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 530 base::Unretained(this))); | 530 base::Unretained(this))); |
| 531 | 531 |
| 532 Wait(main_thread_); | 532 Wait(main_thread_); |
| 533 | 533 |
| 534 // The texture layer is attached to compositor1, and passes a reference to its | 534 // The texture layer is attached to compositor1, and passes a reference to its |
| 535 // impl tree. | 535 // impl tree. |
| 536 scoped_ptr<SingleReleaseCallbackImpl> compositor1; | 536 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 537 main_thread_.message_loop()->task_runner()->PostTask( | 537 main_thread_.message_loop()->task_runner()->PostTask( |
| 538 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 538 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 539 base::Unretained(this), &compositor1)); | 539 base::Unretained(this), &compositor1)); |
| 540 | 540 |
| 541 // Then the texture layer is removed and attached to compositor2, and passes a | 541 // Then the texture layer is removed and attached to compositor2, and passes a |
| 542 // reference to its impl tree. | 542 // reference to its impl tree. |
| 543 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 543 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 544 main_thread_.message_loop()->task_runner()->PostTask( | 544 main_thread_.message_loop()->task_runner()->PostTask( |
| 545 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 545 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 546 base::Unretained(this), &compositor2)); | 546 base::Unretained(this), &compositor2)); |
| 547 | 547 |
| 548 Wait(main_thread_); | 548 Wait(main_thread_); |
| 549 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 549 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 550 | 550 |
| 551 // The main thread reference is destroyed first. | 551 // The main thread reference is destroyed first. |
| 552 main_thread_.message_loop()->task_runner()->PostTask( | 552 main_thread_.message_loop()->task_runner()->PostTask( |
| 553 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 553 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 580 ASSERT_TRUE(test_layer.get()); | 580 ASSERT_TRUE(test_layer.get()); |
| 581 | 581 |
| 582 main_thread_.message_loop()->task_runner()->PostTask( | 582 main_thread_.message_loop()->task_runner()->PostTask( |
| 583 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 583 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 584 base::Unretained(this))); | 584 base::Unretained(this))); |
| 585 | 585 |
| 586 Wait(main_thread_); | 586 Wait(main_thread_); |
| 587 | 587 |
| 588 // The texture layer is attached to compositor1, and passes a reference to its | 588 // The texture layer is attached to compositor1, and passes a reference to its |
| 589 // impl tree. | 589 // impl tree. |
| 590 scoped_ptr<SingleReleaseCallbackImpl> compositor1; | 590 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 591 main_thread_.message_loop()->task_runner()->PostTask( | 591 main_thread_.message_loop()->task_runner()->PostTask( |
| 592 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 592 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 593 base::Unretained(this), &compositor1)); | 593 base::Unretained(this), &compositor1)); |
| 594 | 594 |
| 595 // Then the texture layer is removed and attached to compositor2, and passes a | 595 // Then the texture layer is removed and attached to compositor2, and passes a |
| 596 // reference to its impl tree. | 596 // reference to its impl tree. |
| 597 scoped_ptr<SingleReleaseCallbackImpl> compositor2; | 597 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 598 main_thread_.message_loop()->task_runner()->PostTask( | 598 main_thread_.message_loop()->task_runner()->PostTask( |
| 599 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 599 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 600 base::Unretained(this), &compositor2)); | 600 base::Unretained(this), &compositor2)); |
| 601 | 601 |
| 602 Wait(main_thread_); | 602 Wait(main_thread_); |
| 603 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 603 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 604 | 604 |
| 605 // The main thread reference is destroyed first. | 605 // The main thread reference is destroyed first. |
| 606 main_thread_.message_loop()->task_runner()->PostTask( | 606 main_thread_.message_loop()->task_runner()->PostTask( |
| 607 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 607 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 | 657 |
| 658 // Make sure callback is received on main and doesn't block the impl thread. | 658 // Make sure callback is received on main and doesn't block the impl thread. |
| 659 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { | 659 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { |
| 660 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 660 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 661 EXPECT_FALSE(lost_resource); | 661 EXPECT_FALSE(lost_resource); |
| 662 ++callback_count_; | 662 ++callback_count_; |
| 663 } | 663 } |
| 664 | 664 |
| 665 void SetMailbox(char mailbox_char) { | 665 void SetMailbox(char mailbox_char) { |
| 666 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 666 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 667 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( | 667 std::unique_ptr<SingleReleaseCallback> callback = |
| 668 base::Bind( | 668 SingleReleaseCallback::Create(base::Bind( |
| 669 &TextureLayerImplWithMailboxThreadedCallback::ReleaseCallback, | 669 &TextureLayerImplWithMailboxThreadedCallback::ReleaseCallback, |
| 670 base::Unretained(this))); | 670 base::Unretained(this))); |
| 671 layer_->SetTextureMailbox( | 671 layer_->SetTextureMailbox( |
| 672 TextureMailbox(MailboxFromChar(mailbox_char), | 672 TextureMailbox(MailboxFromChar(mailbox_char), |
| 673 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), | 673 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), |
| 674 GL_TEXTURE_2D), | 674 GL_TEXTURE_2D), |
| 675 std::move(callback)); | 675 std::move(callback)); |
| 676 } | 676 } |
| 677 | 677 |
| 678 void BeginTest() override { | 678 void BeginTest() override { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 779 protected: | 779 protected: |
| 780 TextureLayerMailboxIsActivatedDuringCommit() : activate_count_(0) {} | 780 TextureLayerMailboxIsActivatedDuringCommit() : activate_count_(0) {} |
| 781 | 781 |
| 782 static void ReleaseCallback(const gpu::SyncToken& original_sync_token, | 782 static void ReleaseCallback(const gpu::SyncToken& original_sync_token, |
| 783 const gpu::SyncToken& release_sync_token, | 783 const gpu::SyncToken& release_sync_token, |
| 784 bool lost_resource) {} | 784 bool lost_resource) {} |
| 785 | 785 |
| 786 void SetMailbox(char mailbox_char) { | 786 void SetMailbox(char mailbox_char) { |
| 787 const gpu::SyncToken sync_token = | 787 const gpu::SyncToken sync_token = |
| 788 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)); | 788 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)); |
| 789 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( | 789 std::unique_ptr<SingleReleaseCallback> callback = |
| 790 base::Bind(&TextureLayerMailboxIsActivatedDuringCommit::ReleaseCallback, | 790 SingleReleaseCallback::Create(base::Bind( |
| 791 sync_token)); | 791 &TextureLayerMailboxIsActivatedDuringCommit::ReleaseCallback, |
| 792 sync_token)); |
| 792 layer_->SetTextureMailbox(TextureMailbox(MailboxFromChar(mailbox_char), | 793 layer_->SetTextureMailbox(TextureMailbox(MailboxFromChar(mailbox_char), |
| 793 sync_token, GL_TEXTURE_2D), | 794 sync_token, GL_TEXTURE_2D), |
| 794 std::move(callback)); | 795 std::move(callback)); |
| 795 } | 796 } |
| 796 | 797 |
| 797 void BeginTest() override { | 798 void BeginTest() override { |
| 798 gfx::Size bounds(100, 100); | 799 gfx::Size bounds(100, 100); |
| 799 root_ = Layer::Create(); | 800 root_ = Layer::Create(); |
| 800 root_->SetBounds(bounds); | 801 root_->SetBounds(bounds); |
| 801 | 802 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 891 EXPECT_CALL( | 892 EXPECT_CALL( |
| 892 test_data_.mock_callback_, | 893 test_data_.mock_callback_, |
| 893 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _)) | 894 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _)) |
| 894 .Times(AnyNumber()); | 895 .Times(AnyNumber()); |
| 895 EXPECT_CALL( | 896 EXPECT_CALL( |
| 896 test_data_.mock_callback_, | 897 test_data_.mock_callback_, |
| 897 ReleaseImpl2(test_data_.shared_bitmap_.get(), gpu::SyncToken(), false, _)) | 898 ReleaseImpl2(test_data_.shared_bitmap_.get(), gpu::SyncToken(), false, _)) |
| 898 .Times(AnyNumber()); | 899 .Times(AnyNumber()); |
| 899 // Hardware mode. | 900 // Hardware mode. |
| 900 { | 901 { |
| 901 scoped_ptr<TextureLayerImpl> impl_layer = | 902 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 902 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 903 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 903 impl_layer->SetTextureMailbox( | 904 impl_layer->SetTextureMailbox( |
| 904 test_data_.mailbox1_, | 905 test_data_.mailbox1_, |
| 905 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 906 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 906 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); | 907 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); |
| 907 } | 908 } |
| 908 | 909 |
| 909 { | 910 { |
| 910 scoped_ptr<TextureLayerImpl> impl_layer = | 911 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 911 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 912 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 912 impl_layer->SetTextureMailbox(TextureMailbox(), nullptr); | 913 impl_layer->SetTextureMailbox(TextureMailbox(), nullptr); |
| 913 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); | 914 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); |
| 914 } | 915 } |
| 915 | 916 |
| 916 { | 917 { |
| 917 // Software resource. | 918 // Software resource. |
| 918 scoped_ptr<TextureLayerImpl> impl_layer = | 919 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 919 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 920 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 920 impl_layer->SetTextureMailbox( | 921 impl_layer->SetTextureMailbox( |
| 921 test_data_.mailbox3_, | 922 test_data_.mailbox3_, |
| 922 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_)); | 923 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_)); |
| 923 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); | 924 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE)); |
| 924 } | 925 } |
| 925 | 926 |
| 926 // Software mode. | 927 // Software mode. |
| 927 { | 928 { |
| 928 scoped_ptr<TextureLayerImpl> impl_layer = | 929 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 929 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 930 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 930 impl_layer->SetTextureMailbox( | 931 impl_layer->SetTextureMailbox( |
| 931 test_data_.mailbox1_, | 932 test_data_.mailbox1_, |
| 932 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 933 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 933 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); | 934 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); |
| 934 } | 935 } |
| 935 | 936 |
| 936 { | 937 { |
| 937 scoped_ptr<TextureLayerImpl> impl_layer = | 938 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 938 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 939 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 939 impl_layer->SetTextureMailbox(TextureMailbox(), nullptr); | 940 impl_layer->SetTextureMailbox(TextureMailbox(), nullptr); |
| 940 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); | 941 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); |
| 941 } | 942 } |
| 942 | 943 |
| 943 { | 944 { |
| 944 // Software resource. | 945 // Software resource. |
| 945 scoped_ptr<TextureLayerImpl> impl_layer = | 946 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 946 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 947 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 947 impl_layer->SetTextureMailbox( | 948 impl_layer->SetTextureMailbox( |
| 948 test_data_.mailbox3_, | 949 test_data_.mailbox3_, |
| 949 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_)); | 950 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_)); |
| 950 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); | 951 EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE)); |
| 951 } | 952 } |
| 952 | 953 |
| 953 // Resourceless software mode. | 954 // Resourceless software mode. |
| 954 { | 955 { |
| 955 scoped_ptr<TextureLayerImpl> impl_layer = | 956 std::unique_ptr<TextureLayerImpl> impl_layer = |
| 956 TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 957 TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 957 impl_layer->SetTextureMailbox( | 958 impl_layer->SetTextureMailbox( |
| 958 test_data_.mailbox1_, | 959 test_data_.mailbox1_, |
| 959 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 960 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 960 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE)); | 961 EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE)); |
| 961 } | 962 } |
| 962 } | 963 } |
| 963 | 964 |
| 964 TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) { | 965 TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) { |
| 965 host_impl_.CreatePendingTree(); | 966 host_impl_.CreatePendingTree(); |
| 966 scoped_ptr<TextureLayerImpl> pending_layer; | 967 std::unique_ptr<TextureLayerImpl> pending_layer; |
| 967 pending_layer = TextureLayerImpl::Create(host_impl_.pending_tree(), 1); | 968 pending_layer = TextureLayerImpl::Create(host_impl_.pending_tree(), 1); |
| 968 ASSERT_TRUE(pending_layer); | 969 ASSERT_TRUE(pending_layer); |
| 969 | 970 |
| 970 scoped_ptr<LayerImpl> active_layer( | 971 std::unique_ptr<LayerImpl> active_layer( |
| 971 pending_layer->CreateLayerImpl(host_impl_.active_tree())); | 972 pending_layer->CreateLayerImpl(host_impl_.active_tree())); |
| 972 ASSERT_TRUE(active_layer); | 973 ASSERT_TRUE(active_layer); |
| 973 | 974 |
| 974 pending_layer->SetTextureMailbox( | 975 pending_layer->SetTextureMailbox( |
| 975 test_data_.mailbox1_, | 976 test_data_.mailbox1_, |
| 976 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 977 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 977 | 978 |
| 978 // Test multiple commits without an activation. | 979 // Test multiple commits without an activation. |
| 979 EXPECT_CALL( | 980 EXPECT_CALL( |
| 980 test_data_.mock_callback_, | 981 test_data_.mock_callback_, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 test_data_.mock_callback_, | 1015 test_data_.mock_callback_, |
| 1015 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _)) | 1016 ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _)) |
| 1016 .Times(1); | 1017 .Times(1); |
| 1017 pending_layer->SetTextureMailbox( | 1018 pending_layer->SetTextureMailbox( |
| 1018 test_data_.mailbox1_, | 1019 test_data_.mailbox1_, |
| 1019 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 1020 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 1020 } | 1021 } |
| 1021 | 1022 |
| 1022 TEST_F(TextureLayerImplWithMailboxTest, | 1023 TEST_F(TextureLayerImplWithMailboxTest, |
| 1023 TestDestructorCallbackOnCreatedResource) { | 1024 TestDestructorCallbackOnCreatedResource) { |
| 1024 scoped_ptr<TextureLayerImpl> impl_layer; | 1025 std::unique_ptr<TextureLayerImpl> impl_layer; |
| 1025 impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1); | 1026 impl_layer = TextureLayerImpl::Create(host_impl_.active_tree(), 1); |
| 1026 ASSERT_TRUE(impl_layer); | 1027 ASSERT_TRUE(impl_layer); |
| 1027 | 1028 |
| 1028 EXPECT_CALL(test_data_.mock_callback_, | 1029 EXPECT_CALL(test_data_.mock_callback_, |
| 1029 ReleaseImpl(test_data_.mailbox_name1_, _, false, _)).Times(1); | 1030 ReleaseImpl(test_data_.mailbox_name1_, _, false, _)).Times(1); |
| 1030 impl_layer->SetTextureMailbox( | 1031 impl_layer->SetTextureMailbox( |
| 1031 test_data_.mailbox1_, | 1032 test_data_.mailbox1_, |
| 1032 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); | 1033 SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_)); |
| 1033 impl_layer->DidBecomeActive(); | 1034 impl_layer->DidBecomeActive(); |
| 1034 EXPECT_TRUE(impl_layer->WillDraw( | 1035 EXPECT_TRUE(impl_layer->WillDraw( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1062 | 1063 |
| 1063 // Checks that TextureLayer::Update does not cause an extra commit when setting | 1064 // Checks that TextureLayer::Update does not cause an extra commit when setting |
| 1064 // the texture mailbox. | 1065 // the texture mailbox. |
| 1065 class TextureLayerNoExtraCommitForMailboxTest | 1066 class TextureLayerNoExtraCommitForMailboxTest |
| 1066 : public LayerTreeTest, | 1067 : public LayerTreeTest, |
| 1067 public TextureLayerClient { | 1068 public TextureLayerClient { |
| 1068 public: | 1069 public: |
| 1069 // TextureLayerClient implementation. | 1070 // TextureLayerClient implementation. |
| 1070 bool PrepareTextureMailbox( | 1071 bool PrepareTextureMailbox( |
| 1071 TextureMailbox* texture_mailbox, | 1072 TextureMailbox* texture_mailbox, |
| 1072 scoped_ptr<SingleReleaseCallback>* release_callback, | 1073 std::unique_ptr<SingleReleaseCallback>* release_callback, |
| 1073 bool use_shared_memory) override { | 1074 bool use_shared_memory) override { |
| 1074 if (layer_tree_host()->source_frame_number() == 1) { | 1075 if (layer_tree_host()->source_frame_number() == 1) { |
| 1075 // Once this has been committed, the mailbox will be released. | 1076 // Once this has been committed, the mailbox will be released. |
| 1076 *texture_mailbox = TextureMailbox(); | 1077 *texture_mailbox = TextureMailbox(); |
| 1077 return true; | 1078 return true; |
| 1078 } | 1079 } |
| 1079 | 1080 |
| 1080 *texture_mailbox = TextureMailbox(MailboxFromChar('1'), | 1081 *texture_mailbox = TextureMailbox(MailboxFromChar('1'), |
| 1081 SyncTokenFromUInt(0x123), GL_TEXTURE_2D); | 1082 SyncTokenFromUInt(0x123), GL_TEXTURE_2D); |
| 1082 *release_callback = SingleReleaseCallback::Create( | 1083 *release_callback = SingleReleaseCallback::Create( |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1161 : mailbox_changed_(true), | 1162 : mailbox_changed_(true), |
| 1162 mailbox_returned_(0), | 1163 mailbox_returned_(0), |
| 1163 prepare_called_(0), | 1164 prepare_called_(0), |
| 1164 commit_count_(0) { | 1165 commit_count_(0) { |
| 1165 mailbox_ = MakeMailbox('1'); | 1166 mailbox_ = MakeMailbox('1'); |
| 1166 } | 1167 } |
| 1167 | 1168 |
| 1168 // TextureLayerClient implementation. | 1169 // TextureLayerClient implementation. |
| 1169 bool PrepareTextureMailbox( | 1170 bool PrepareTextureMailbox( |
| 1170 TextureMailbox* mailbox, | 1171 TextureMailbox* mailbox, |
| 1171 scoped_ptr<SingleReleaseCallback>* release_callback, | 1172 std::unique_ptr<SingleReleaseCallback>* release_callback, |
| 1172 bool use_shared_memory) override { | 1173 bool use_shared_memory) override { |
| 1173 ++prepare_called_; | 1174 ++prepare_called_; |
| 1174 if (!mailbox_changed_) | 1175 if (!mailbox_changed_) |
| 1175 return false; | 1176 return false; |
| 1176 *mailbox = mailbox_; | 1177 *mailbox = mailbox_; |
| 1177 *release_callback = SingleReleaseCallback::Create( | 1178 *release_callback = SingleReleaseCallback::Create( |
| 1178 base::Bind(&TextureLayerChangeInvisibleMailboxTest::MailboxReleased, | 1179 base::Bind(&TextureLayerChangeInvisibleMailboxTest::MailboxReleased, |
| 1179 base::Unretained(this))); | 1180 base::Unretained(this))); |
| 1180 return true; | 1181 return true; |
| 1181 } | 1182 } |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1298 | 1299 |
| 1299 // Test that TextureLayerImpl::ReleaseResources can be called which releases | 1300 // Test that TextureLayerImpl::ReleaseResources can be called which releases |
| 1300 // the mailbox back to TextureLayerClient. | 1301 // the mailbox back to TextureLayerClient. |
| 1301 class TextureLayerReleaseResourcesBase | 1302 class TextureLayerReleaseResourcesBase |
| 1302 : public LayerTreeTest, | 1303 : public LayerTreeTest, |
| 1303 public TextureLayerClient { | 1304 public TextureLayerClient { |
| 1304 public: | 1305 public: |
| 1305 // TextureLayerClient implementation. | 1306 // TextureLayerClient implementation. |
| 1306 bool PrepareTextureMailbox( | 1307 bool PrepareTextureMailbox( |
| 1307 TextureMailbox* mailbox, | 1308 TextureMailbox* mailbox, |
| 1308 scoped_ptr<SingleReleaseCallback>* release_callback, | 1309 std::unique_ptr<SingleReleaseCallback>* release_callback, |
| 1309 bool use_shared_memory) override { | 1310 bool use_shared_memory) override { |
| 1310 *mailbox = TextureMailbox(MailboxFromChar('1'), SyncTokenFromUInt(1), | 1311 *mailbox = TextureMailbox(MailboxFromChar('1'), SyncTokenFromUInt(1), |
| 1311 GL_TEXTURE_2D); | 1312 GL_TEXTURE_2D); |
| 1312 *release_callback = SingleReleaseCallback::Create( | 1313 *release_callback = SingleReleaseCallback::Create( |
| 1313 base::Bind(&TextureLayerReleaseResourcesBase::MailboxReleased, | 1314 base::Bind(&TextureLayerReleaseResourcesBase::MailboxReleased, |
| 1314 base::Unretained(this))); | 1315 base::Unretained(this))); |
| 1315 return true; | 1316 return true; |
| 1316 } | 1317 } |
| 1317 | 1318 |
| 1318 void MailboxReleased(const gpu::SyncToken& sync_token, bool lost_resource) { | 1319 void MailboxReleased(const gpu::SyncToken& sync_token, bool lost_resource) { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 public: | 1370 public: |
| 1370 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { | 1371 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { |
| 1371 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 1372 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 1372 EXPECT_FALSE(lost_resource); | 1373 EXPECT_FALSE(lost_resource); |
| 1373 ++callback_count_; | 1374 ++callback_count_; |
| 1374 EndTest(); | 1375 EndTest(); |
| 1375 } | 1376 } |
| 1376 | 1377 |
| 1377 void SetMailbox(char mailbox_char) { | 1378 void SetMailbox(char mailbox_char) { |
| 1378 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 1379 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 1379 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( | 1380 std::unique_ptr<SingleReleaseCallback> callback = |
| 1380 base::Bind( | 1381 SingleReleaseCallback::Create(base::Bind( |
| 1381 &TextureLayerWithMailboxMainThreadDeleted::ReleaseCallback, | 1382 &TextureLayerWithMailboxMainThreadDeleted::ReleaseCallback, |
| 1382 base::Unretained(this))); | 1383 base::Unretained(this))); |
| 1383 layer_->SetTextureMailbox( | 1384 layer_->SetTextureMailbox( |
| 1384 TextureMailbox(MailboxFromChar(mailbox_char), | 1385 TextureMailbox(MailboxFromChar(mailbox_char), |
| 1385 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), | 1386 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), |
| 1386 GL_TEXTURE_2D), | 1387 GL_TEXTURE_2D), |
| 1387 std::move(callback)); | 1388 std::move(callback)); |
| 1388 } | 1389 } |
| 1389 | 1390 |
| 1390 void SetupTree() override { | 1391 void SetupTree() override { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1440 public: | 1441 public: |
| 1441 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { | 1442 void ReleaseCallback(const gpu::SyncToken& sync_token, bool lost_resource) { |
| 1442 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 1443 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 1443 EXPECT_FALSE(lost_resource); | 1444 EXPECT_FALSE(lost_resource); |
| 1444 ++callback_count_; | 1445 ++callback_count_; |
| 1445 EndTest(); | 1446 EndTest(); |
| 1446 } | 1447 } |
| 1447 | 1448 |
| 1448 void SetMailbox(char mailbox_char) { | 1449 void SetMailbox(char mailbox_char) { |
| 1449 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); | 1450 EXPECT_EQ(true, main_thread_.CalledOnValidThread()); |
| 1450 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( | 1451 std::unique_ptr<SingleReleaseCallback> callback = |
| 1451 base::Bind( | 1452 SingleReleaseCallback::Create(base::Bind( |
| 1452 &TextureLayerWithMailboxImplThreadDeleted::ReleaseCallback, | 1453 &TextureLayerWithMailboxImplThreadDeleted::ReleaseCallback, |
| 1453 base::Unretained(this))); | 1454 base::Unretained(this))); |
| 1454 layer_->SetTextureMailbox( | 1455 layer_->SetTextureMailbox( |
| 1455 TextureMailbox(MailboxFromChar(mailbox_char), | 1456 TextureMailbox(MailboxFromChar(mailbox_char), |
| 1456 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), | 1457 SyncTokenFromUInt(static_cast<uint32_t>(mailbox_char)), |
| 1457 GL_TEXTURE_2D), | 1458 GL_TEXTURE_2D), |
| 1458 std::move(callback)); | 1459 std::move(callback)); |
| 1459 } | 1460 } |
| 1460 | 1461 |
| 1461 void SetupTree() override { | 1462 void SetupTree() override { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 int callback_count_; | 1506 int callback_count_; |
| 1506 scoped_refptr<Layer> root_; | 1507 scoped_refptr<Layer> root_; |
| 1507 scoped_refptr<TextureLayer> layer_; | 1508 scoped_refptr<TextureLayer> layer_; |
| 1508 }; | 1509 }; |
| 1509 | 1510 |
| 1510 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( | 1511 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
| 1511 TextureLayerWithMailboxImplThreadDeleted); | 1512 TextureLayerWithMailboxImplThreadDeleted); |
| 1512 | 1513 |
| 1513 } // namespace | 1514 } // namespace |
| 1514 } // namespace cc | 1515 } // namespace cc |
| OLD | NEW |