| Index: cc/layers/texture_layer_unittest.cc
|
| diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
|
| index bce1eefc5457b27546ffca51e52fc1137d88fe0e..cf5837c6abf885664ee231f32f8f8cdf2e4baf92 100644
|
| --- a/cc/layers/texture_layer_unittest.cc
|
| +++ b/cc/layers/texture_layer_unittest.cc
|
| @@ -250,9 +250,12 @@ class FakeTextureLayerClient : public TextureLayerClient {
|
| return context_.get();
|
| }
|
|
|
| - virtual bool PrepareTextureMailbox(TextureMailbox* mailbox,
|
| - bool use_shared_memory) OVERRIDE {
|
| + virtual bool PrepareTextureMailbox(
|
| + TextureMailbox* mailbox,
|
| + scoped_ptr<ScopedReleaseCallback>* release_callback,
|
| + bool use_shared_memory) OVERRIDE {
|
| *mailbox = TextureMailbox();
|
| + *release_callback = scoped_ptr<ScopedReleaseCallback>();
|
| return true;
|
| }
|
|
|
| @@ -335,25 +338,25 @@ struct CommonMailboxObjects {
|
| mailbox_name2_);
|
| gpu::Mailbox m1;
|
| m1.SetName(reinterpret_cast<const int8*>(mailbox_name1_.data()));
|
| - mailbox1_ = TextureMailbox(m1, release_mailbox1_, sync_point1_);
|
| + mailbox1_ = TextureMailbox(m1, sync_point1_);
|
| gpu::Mailbox m2;
|
| m2.SetName(reinterpret_cast<const int8*>(mailbox_name2_.data()));
|
| - mailbox2_ = TextureMailbox(m2, release_mailbox2_, sync_point2_);
|
| + mailbox2_ = TextureMailbox(m2, sync_point2_);
|
|
|
| gfx::Size size(128, 128);
|
| EXPECT_TRUE(shared_memory_->CreateAndMapAnonymous(4 * size.GetArea()));
|
| release_mailbox3_ = base::Bind(&MockMailboxCallback::Release2,
|
| base::Unretained(&mock_callback_),
|
| shared_memory_.get());
|
| - mailbox3_ = TextureMailbox(shared_memory_.get(), size, release_mailbox3_);
|
| + mailbox3_ = TextureMailbox(shared_memory_.get(), size);
|
| }
|
|
|
| std::string mailbox_name1_;
|
| std::string mailbox_name2_;
|
| MockMailboxCallback mock_callback_;
|
| - TextureMailbox::ReleaseCallback release_mailbox1_;
|
| - TextureMailbox::ReleaseCallback release_mailbox2_;
|
| - TextureMailbox::ReleaseCallback release_mailbox3_;
|
| + ReleaseCallback release_mailbox1_;
|
| + ReleaseCallback release_mailbox2_;
|
| + ReleaseCallback release_mailbox3_;
|
| TextureMailbox mailbox1_;
|
| TextureMailbox mailbox2_;
|
| TextureMailbox mailbox3_;
|
| @@ -395,7 +398,9 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
|
|
|
| EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
|
| EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
|
| - test_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + test_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
|
|
| EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
|
| @@ -405,7 +410,9 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
|
| test_data_.sync_point1_,
|
| false))
|
| .Times(1);
|
| - test_layer->SetTextureMailbox(test_data_.mailbox2_);
|
| + test_layer->SetTextureMailbox(
|
| + test_data_.mailbox2_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox2_));
|
| Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| @@ -416,13 +423,16 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
|
| test_data_.sync_point2_,
|
| false))
|
| .Times(1);
|
| - test_layer->SetTextureMailbox(TextureMailbox());
|
| + test_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| EXPECT_CALL(*layer_tree_host_, AcquireLayerTextures()).Times(0);
|
| EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
|
| - test_layer->SetTextureMailbox(test_data_.mailbox3_);
|
| + test_layer->SetTextureMailbox(
|
| + test_data_.mailbox3_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox3_));
|
| Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| @@ -432,13 +442,16 @@ TEST_F(TextureLayerWithMailboxTest, ReplaceMailboxOnMainThreadBeforeCommit) {
|
| Release2(test_data_.shared_memory_.get(),
|
| 0, false))
|
| .Times(1);
|
| - test_layer->SetTextureMailbox(TextureMailbox());
|
| + test_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| Mock::VerifyAndClearExpectations(layer_tree_host_.get());
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| // Test destructor.
|
| EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AtLeast(1));
|
| - test_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + test_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| }
|
|
|
| class TextureLayerMailboxHolderTest : public TextureLayerTest {
|
| @@ -460,14 +473,15 @@ class TextureLayerMailboxHolderTest : public TextureLayerTest {
|
|
|
| void CreateMainRef() {
|
| main_ref_ = TestMailboxHolder::Create(
|
| - test_data_.mailbox1_).Pass();
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_)).Pass();
|
| }
|
|
|
| void ReleaseMainRef() {
|
| main_ref_.reset();
|
| }
|
|
|
| - void CreateImplRef(TextureMailbox::ReleaseCallback* impl_ref) {
|
| + void CreateImplRef(scoped_ptr<ScopedReleaseCallback>* impl_ref) {
|
| *impl_ref = main_ref_->holder()->GetCallbackForImplThread();
|
| }
|
|
|
| @@ -500,7 +514,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) {
|
|
|
| // The texture layer is attached to compositor1, and passes a reference to its
|
| // impl tree.
|
| - TextureMailbox::ReleaseCallback compositor1;
|
| + scoped_ptr<ScopedReleaseCallback> compositor1;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -509,7 +523,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) {
|
|
|
| // Then the texture layer is removed and attached to compositor2, and passes a
|
| // reference to its impl tree.
|
| - TextureMailbox::ReleaseCallback compositor2;
|
| + scoped_ptr<ScopedReleaseCallback> compositor2;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -521,8 +535,8 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) {
|
|
|
| // The compositors both destroy their impl trees before the main thread layer
|
| // is destroyed.
|
| - compositor1.Run(100, false);
|
| - compositor2.Run(200, false);
|
| + compositor1->Run(100, false);
|
| + compositor2->Run(200, false);
|
|
|
| Wait(main_thread_);
|
|
|
| @@ -555,7 +569,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) {
|
|
|
| // The texture layer is attached to compositor1, and passes a reference to its
|
| // impl tree.
|
| - TextureMailbox::ReleaseCallback compositor1;
|
| + scoped_ptr<ScopedReleaseCallback> compositor1;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -564,7 +578,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) {
|
|
|
| // Then the texture layer is removed and attached to compositor2, and passes a
|
| // reference to its impl tree.
|
| - TextureMailbox::ReleaseCallback compositor2;
|
| + scoped_ptr<ScopedReleaseCallback> compositor2;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -575,7 +589,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) {
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| // One compositor destroys their impl tree.
|
| - compositor1.Run(100, false);
|
| + compositor1->Run(100, false);
|
|
|
| // Then the main thread reference is destroyed.
|
| main_thread_.message_loop()->PostTask(
|
| @@ -593,7 +607,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) {
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| Release(test_data_.mailbox_name1_, 200, true)).Times(1);
|
|
|
| - compositor2.Run(200, true);
|
| + compositor2->Run(200, true);
|
| Wait(main_thread_);
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
| }
|
| @@ -611,7 +625,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) {
|
|
|
| // The texture layer is attached to compositor1, and passes a reference to its
|
| // impl tree.
|
| - TextureMailbox::ReleaseCallback compositor1;
|
| + scoped_ptr<ScopedReleaseCallback> compositor1;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -620,7 +634,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) {
|
|
|
| // Then the texture layer is removed and attached to compositor2, and passes a
|
| // reference to its impl tree.
|
| - TextureMailbox::ReleaseCallback compositor2;
|
| + scoped_ptr<ScopedReleaseCallback> compositor2;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -637,7 +651,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) {
|
| base::Unretained(this)));
|
|
|
| // One compositor destroys their impl tree.
|
| - compositor2.Run(200, false);
|
| + compositor2->Run(200, false);
|
|
|
| Wait(main_thread_);
|
|
|
| @@ -649,7 +663,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) {
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| Release(test_data_.mailbox_name1_, 100, true)).Times(1);
|
|
|
| - compositor1.Run(100, true);
|
| + compositor1->Run(100, true);
|
| Wait(main_thread_);
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
| }
|
| @@ -667,7 +681,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) {
|
|
|
| // The texture layer is attached to compositor1, and passes a reference to its
|
| // impl tree.
|
| - TextureMailbox::ReleaseCallback compositor1;
|
| + scoped_ptr<ScopedReleaseCallback> compositor1;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -676,7 +690,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) {
|
|
|
| // Then the texture layer is removed and attached to compositor2, and passes a
|
| // reference to its impl tree.
|
| - TextureMailbox::ReleaseCallback compositor2;
|
| + scoped_ptr<ScopedReleaseCallback> compositor2;
|
| main_thread_.message_loop()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef,
|
| @@ -714,7 +728,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) {
|
| // Before the main thread capturing starts, one compositor destroys their
|
| // impl reference. Since capturing did not start, this gets post-tasked to
|
| // the main thread.
|
| - compositor1.Run(100, false);
|
| + compositor1->Run(100, false);
|
|
|
| // Start capturing on the main thread.
|
| begin_capture.Signal();
|
| @@ -725,7 +739,7 @@ TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) {
|
| // released before compositor1, whose reference will be released later when
|
| // the post-task is serviced. But since it was destroyed _on the impl thread_
|
| // last, its sync point values should be used.
|
| - compositor2.Run(200, true);
|
| + compositor2->Run(200, true);
|
|
|
| stop_capture.Signal();
|
| Wait(main_thread_);
|
| @@ -748,12 +762,12 @@ class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest {
|
|
|
| void SetMailbox(char mailbox_char) {
|
| EXPECT_EQ(true, main_thread_.CalledOnValidThread());
|
| - TextureMailbox mailbox(
|
| - std::string(64, mailbox_char),
|
| + TextureMailbox mailbox(std::string(64, mailbox_char));
|
| + scoped_ptr<ScopedReleaseCallback> callback = ScopedReleaseCallback::Create(
|
| base::Bind(
|
| &TextureLayerImplWithMailboxThreadedCallback::ReleaseCallback,
|
| base::Unretained(this)));
|
| - layer_->SetTextureMailbox(mailbox);
|
| + layer_->SetTextureMailbox(mailbox, callback.Pass());
|
| }
|
|
|
| virtual void BeginTest() OVERRIDE {
|
| @@ -803,7 +817,8 @@ class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest {
|
| EXPECT_EQ(3, callback_count_);
|
| // Case #4: release mailbox that was committed but never drawn. The
|
| // old mailbox should be released during the next commit.
|
| - layer_->SetTextureMailbox(TextureMailbox());
|
| + layer_->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| break;
|
| case 4:
|
| if (layer_tree_host()->settings().impl_side_painting) {
|
| @@ -842,7 +857,8 @@ class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest {
|
| case 8:
|
| EXPECT_EQ(4, callback_count_);
|
| // Resetting the mailbox will call the callback now.
|
| - layer_->SetTextureMailbox(TextureMailbox());
|
| + layer_->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| EXPECT_EQ(5, callback_count_);
|
| EndTest();
|
| break;
|
| @@ -903,8 +919,10 @@ class TextureLayerNoMailboxIsActivatedDuringCommit : public LayerTreeTest,
|
| virtual WebKit::WebGraphicsContext3D* Context3d() OVERRIDE {
|
| return OffscreenContextProviderForMainThread()->Context3d();
|
| }
|
| - virtual bool PrepareTextureMailbox(TextureMailbox* mailbox,
|
| - bool use_shared_memory) OVERRIDE {
|
| + virtual bool PrepareTextureMailbox(
|
| + TextureMailbox* mailbox,
|
| + scoped_ptr<ScopedReleaseCallback>* release_callback,
|
| + bool use_shared_memory) OVERRIDE {
|
| return false;
|
| }
|
|
|
| @@ -998,11 +1016,11 @@ class TextureLayerMailboxIsActivatedDuringCommit : public LayerTreeTest {
|
| static void ReleaseCallback(unsigned sync_point, bool lost_resource) {}
|
|
|
| void SetMailbox(char mailbox_char) {
|
| - TextureMailbox mailbox(
|
| - std::string(64, mailbox_char),
|
| + TextureMailbox mailbox(std::string(64, mailbox_char));
|
| + scoped_ptr<ScopedReleaseCallback> callback = ScopedReleaseCallback::Create(
|
| base::Bind(
|
| &TextureLayerMailboxIsActivatedDuringCommit::ReleaseCallback));
|
| - layer_->SetTextureMailbox(mailbox);
|
| + layer_->SetTextureMailbox(mailbox, callback.Pass());
|
| }
|
|
|
| virtual void BeginTest() OVERRIDE {
|
| @@ -1143,14 +1161,17 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
|
| {
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
|
| }
|
|
|
| {
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(TextureMailbox());
|
| + impl_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
|
| }
|
|
|
| @@ -1158,7 +1179,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
|
| // Software resource.
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox3_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox3_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox3_));
|
| EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
|
| }
|
|
|
| @@ -1184,14 +1207,17 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
|
| {
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
|
| }
|
|
|
| {
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(TextureMailbox());
|
| + impl_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
|
| }
|
|
|
| @@ -1199,7 +1225,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
|
| // Software resource.
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox3_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox3_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox3_));
|
| EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
|
| }
|
|
|
| @@ -1225,7 +1253,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
|
| {
|
| scoped_ptr<TextureLayerImpl> impl_layer =
|
| TextureLayerImpl::Create(host_impl_.active_tree(), 1, true);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE));
|
| }
|
|
|
| @@ -1251,7 +1281,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
|
| pending_layer->CreateLayerImpl(host_impl_.active_tree()));
|
| ASSERT_TRUE(active_layer);
|
|
|
| - pending_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + pending_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
|
|
| // Test multiple commits without an activation.
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| @@ -1259,7 +1291,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
|
| test_data_.sync_point1_,
|
| false))
|
| .Times(1);
|
| - pending_layer->SetTextureMailbox(test_data_.mailbox2_);
|
| + pending_layer->SetTextureMailbox(
|
| + test_data_.mailbox2_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox2_));
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| // Test callback after activation.
|
| @@ -1267,7 +1301,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
|
| active_layer->DidBecomeActive();
|
|
|
| EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0);
|
| - pending_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + pending_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
|
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| @@ -1281,7 +1317,8 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| Release(test_data_.mailbox_name1_, _, false))
|
| .Times(1);
|
| - pending_layer->SetTextureMailbox(TextureMailbox());
|
| + pending_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| pending_layer->PushPropertiesTo(active_layer.get());
|
| active_layer->DidBecomeActive();
|
| Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
|
| @@ -1292,7 +1329,9 @@ TEST_F(TextureLayerImplWithMailboxTest, TestImplLayerCallbacks) {
|
| test_data_.sync_point1_,
|
| false))
|
| .Times(1);
|
| - pending_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + pending_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| }
|
|
|
| TEST_F(TextureLayerImplWithMailboxTest,
|
| @@ -1304,18 +1343,23 @@ TEST_F(TextureLayerImplWithMailboxTest,
|
| EXPECT_CALL(test_data_.mock_callback_,
|
| Release(test_data_.mailbox_name1_, _, false))
|
| .Times(1);
|
| - impl_layer->SetTextureMailbox(test_data_.mailbox1_);
|
| + impl_layer->SetTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| impl_layer->DidBecomeActive();
|
| EXPECT_TRUE(impl_layer->WillDraw(
|
| DRAW_MODE_HARDWARE, host_impl_.active_tree()->resource_provider()));
|
| impl_layer->DidDraw(host_impl_.active_tree()->resource_provider());
|
| - impl_layer->SetTextureMailbox(TextureMailbox());
|
| + impl_layer->SetTextureMailbox(TextureMailbox(),
|
| + scoped_ptr<ScopedReleaseCallback>());
|
| }
|
|
|
| TEST_F(TextureLayerImplWithMailboxTest, TestCallbackOnInUseResource) {
|
| ResourceProvider* provider = host_impl_.active_tree()->resource_provider();
|
| ResourceProvider::ResourceId id =
|
| - provider->CreateResourceFromTextureMailbox(test_data_.mailbox1_);
|
| + provider->CreateResourceFromTextureMailbox(
|
| + test_data_.mailbox1_,
|
| + ScopedReleaseCallback::Create(test_data_.release_mailbox1_));
|
| provider->AllocateForTesting(id);
|
|
|
| // Transfer some resources to the parent.
|
| @@ -1366,7 +1410,9 @@ class TextureLayerClientTest
|
| }
|
|
|
| virtual bool PrepareTextureMailbox(
|
| - cc::TextureMailbox* mailbox, bool use_shared_memory) OVERRIDE {
|
| + TextureMailbox* mailbox,
|
| + scoped_ptr<ScopedReleaseCallback>* release_callback,
|
| + bool use_shared_memory) OVERRIDE {
|
| return false;
|
| }
|
|
|
| @@ -1482,7 +1528,9 @@ class TextureLayerLostContextTest
|
| }
|
|
|
| virtual bool PrepareTextureMailbox(
|
| - cc::TextureMailbox* mailbox, bool use_shared_memory) OVERRIDE {
|
| + TextureMailbox* mailbox,
|
| + scoped_ptr<ScopedReleaseCallback>* release_callback,
|
| + bool use_shared_memory) OVERRIDE {
|
| return false;
|
| }
|
|
|
| @@ -1543,12 +1591,12 @@ class TextureLayerWithMailboxMainThreadDeleted : public LayerTreeTest {
|
|
|
| void SetMailbox(char mailbox_char) {
|
| EXPECT_EQ(true, main_thread_.CalledOnValidThread());
|
| - TextureMailbox mailbox(
|
| - std::string(64, mailbox_char),
|
| + TextureMailbox mailbox(std::string(64, mailbox_char));
|
| + scoped_ptr<ScopedReleaseCallback> callback = ScopedReleaseCallback::Create(
|
| base::Bind(
|
| &TextureLayerWithMailboxMainThreadDeleted::ReleaseCallback,
|
| base::Unretained(this)));
|
| - layer_->SetTextureMailbox(mailbox);
|
| + layer_->SetTextureMailbox(mailbox, callback.Pass());
|
| }
|
|
|
| virtual void SetupTree() OVERRIDE {
|
| @@ -1615,12 +1663,12 @@ class TextureLayerWithMailboxImplThreadDeleted : public LayerTreeTest {
|
|
|
| void SetMailbox(char mailbox_char) {
|
| EXPECT_EQ(true, main_thread_.CalledOnValidThread());
|
| - TextureMailbox mailbox(
|
| - std::string(64, mailbox_char),
|
| + TextureMailbox mailbox(std::string(64, mailbox_char));
|
| + scoped_ptr<ScopedReleaseCallback> callback = ScopedReleaseCallback::Create(
|
| base::Bind(
|
| &TextureLayerWithMailboxImplThreadDeleted::ReleaseCallback,
|
| base::Unretained(this)));
|
| - layer_->SetTextureMailbox(mailbox);
|
| + layer_->SetTextureMailbox(mailbox, callback.Pass());
|
| }
|
|
|
| virtual void SetupTree() OVERRIDE {
|
|
|