Index: components/exo/buffer_unittest.cc |
diff --git a/components/exo/buffer_unittest.cc b/components/exo/buffer_unittest.cc |
index 987c29056538f8a580c6c9eedddd5c5583d68a9d..1521af7fedc2be82b379ecda10af5f7b281b620f 100644 |
--- a/components/exo/buffer_unittest.cc |
+++ b/components/exo/buffer_unittest.cc |
@@ -27,29 +27,53 @@ void Release(int* release_call_count) { |
(*release_call_count)++; |
} |
+class MockCompositorFrameSinkHolder : public CompositorFrameSinkHolder { |
+ public: |
+ MockCompositorFrameSinkHolder(Surface* surface) |
+ : CompositorFrameSinkHolder(surface, nullptr, nullptr) {} |
+ |
+ private: |
+ ~MockCompositorFrameSinkHolder() override { |
+ CompositorFrameSinkHolder::~CompositorFrameSinkHolder(); |
+ } |
+}; |
+ |
TEST_F(BufferTest, ReleaseCallback) { |
gfx::Size buffer_size(256, 256); |
std::unique_ptr<Buffer> buffer( |
new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); |
+ std::unique_ptr<Surface> surface(new Surface()); |
+ scoped_refptr<MockCompositorFrameSinkHolder> compositor_frame_sink_holder = |
+ new MockCompositorFrameSinkHolder(surface.get()); |
// Set the release callback. |
int release_call_count = 0; |
buffer->set_release_callback( |
base::Bind(&Release, base::Unretained(&release_call_count))); |
+ printf("Release callback set.\n"); |
buffer->OnAttach(); |
- // Produce a texture mailbox for the contents of the buffer. |
- cc::TextureMailbox texture_mailbox; |
- std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback = |
- buffer->ProduceTextureMailbox(&texture_mailbox, false, true); |
- ASSERT_TRUE(buffer_release_callback); |
+ cc::TransferableResource resource; |
+ // Produce a transferable resource for the contents of the buffer. |
+ bool r = buffer->ProduceTransferableResource( |
+ compositor_frame_sink_holder.get(), 0, false, true, &resource); |
+ ASSERT_TRUE(r); |
+ printf("Transferable resource produced.\n"); |
// Release buffer. |
- buffer_release_callback->Run(gpu::SyncToken(), false); |
+ cc::ReturnedResource returned_resource; |
+ returned_resource.id = resource.id; |
+ returned_resource.sync_token = resource.mailbox_holder.sync_token; |
+ returned_resource.lost = false; |
+ cc::ReturnedResourceArray resources = {returned_resource}; |
+ printf("ReturnedResource initialized.\n"); |
+ compositor_frame_sink_holder->ReclaimResources(resources); |
+ printf("Resource reclaimed.\n"); |
ASSERT_EQ(release_call_count, 0); |
buffer->OnDetach(); |
+ printf("Buffer detached.\n"); |
// Release() should have been called exactly once. |
ASSERT_EQ(release_call_count, 1); |
@@ -59,13 +83,16 @@ TEST_F(BufferTest, IsLost) { |
gfx::Size buffer_size(256, 256); |
std::unique_ptr<Buffer> buffer( |
new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(buffer_size))); |
+ std::unique_ptr<Surface> surface(new Surface()); |
+ scoped_refptr<MockCompositorFrameSinkHolder> compositor_frame_sink_holder = |
+ new MockCompositorFrameSinkHolder(surface.get()); |
buffer->OnAttach(); |
- // Acquire a texture mailbox for the contents of the buffer. |
- cc::TextureMailbox texture_mailbox; |
- std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback = |
- buffer->ProduceTextureMailbox(&texture_mailbox, false, true); |
- ASSERT_TRUE(buffer_release_callback); |
+ // Acquire a texture transferable resource for the contents of the buffer. |
+ cc::TransferableResource resource; |
+ bool r = buffer->ProduceTransferableResource( |
+ compositor_frame_sink_holder.get(), 0, false, true, &resource); |
+ ASSERT_TRUE(r); |
scoped_refptr<cc::ContextProvider> context_provider = |
aura::Env::GetInstance() |
@@ -79,15 +106,27 @@ TEST_F(BufferTest, IsLost) { |
// Release buffer. |
bool is_lost = true; |
- buffer_release_callback->Run(gpu::SyncToken(), is_lost); |
- |
- // Producing a new texture mailbox for the contents of the buffer. |
- std::unique_ptr<cc::SingleReleaseCallback> buffer_release_callback2 = |
- buffer->ProduceTextureMailbox(&texture_mailbox, false, false); |
- ASSERT_TRUE(buffer_release_callback2); |
+ cc::ReturnedResource returned_resource; |
+ returned_resource.id = 0; |
+ returned_resource.sync_token = gpu::SyncToken(); |
+ returned_resource.lost = is_lost; |
+ cc::ReturnedResourceArray resources = {returned_resource}; |
+ compositor_frame_sink_holder->ReclaimResources(resources); |
+ |
+ // Producing a new texture transferable resource for the contents of the |
+ // buffer. |
+ cc::TransferableResource new_resource; |
+ bool r2 = buffer->ProduceTransferableResource( |
+ compositor_frame_sink_holder.get(), 1, false, false, &new_resource); |
+ ASSERT_TRUE(r2); |
buffer->OnDetach(); |
- buffer_release_callback2->Run(gpu::SyncToken(), false); |
+ cc::ReturnedResource returned_resource2; |
+ returned_resource.id = 1; |
+ returned_resource.sync_token = gpu::SyncToken(); |
+ returned_resource.lost = false; |
+ cc::ReturnedResourceArray resources2 = {returned_resource2}; |
+ compositor_frame_sink_holder->ReclaimResources(resources2); |
} |
} // namespace |