| 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
|
|
|