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

Unified Diff: components/exo/buffer_unittest.cc

Issue 2584953002: exo::CompositorFrameSinkHolder's release callbacks hold ref (Closed)
Patch Set: NOT FOR COMMIT: SEGV_MAPERR in Callback::Run() Created 3 years, 12 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698