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

Unified Diff: gpu/ipc/client/command_buffer_proxy_impl.cc

Issue 1912833002: Pepper takes ownership of a mailbox before passing it to the texture layer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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: gpu/ipc/client/command_buffer_proxy_impl.cc
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.cc b/gpu/ipc/client/command_buffer_proxy_impl.cc
index 7587212837fdca100c8ab632038e33b45ebce2b4..cefeefd2b24eb0cf40dab05ea6854bd0e47f4e3f 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -617,15 +617,39 @@ void CommandBufferProxyImpl::SignalQuery(uint32_t query,
signal_tasks_.insert(std::make_pair(signal_id, callback));
}
-bool CommandBufferProxyImpl::ProduceFrontBuffer(const gpu::Mailbox& mailbox) {
- CheckLock();
+bool CommandBufferProxyImpl::TakeFrontBuffer(const gpu::Mailbox& mailbox,
+ gpu::SyncToken* sync_token) {
+ scoped_ptr<base::AutoLock> lock;
+ if (lock_)
+ lock.reset(new base::AutoLock(*lock_));
if (last_state_.error != gpu::error::kNoError)
return false;
- Send(new GpuCommandBufferMsg_ProduceFrontBuffer(route_id_, mailbox));
+ Send(new GpuCommandBufferMsg_TakeFrontBuffer(route_id_, mailbox));
+
+ uint64_t fence = GenerateFenceSyncRelease();
+ *sync_token = gpu::SyncToken(GetNamespaceID(), GetExtraCommandBufferData(),
+ GetCommandBufferID(), fence);
+
+ // Force a synchronous IPC to validate sync token.
+ EnsureWorkVisible();
+ sync_token->SetVerifyFlush();
return true;
}
+void CommandBufferProxyImpl::ReturnFrontBuffer(const gpu::Mailbox& mailbox,
+ const gpu::SyncToken& sync_token,
+ bool is_lost) {
+ scoped_ptr<base::AutoLock> lock;
+ if (lock_)
+ lock.reset(new base::AutoLock(*lock_));
+ if (last_state_.error != gpu::error::kNoError)
+ return;
+
+ Send(new GpuCommandBufferMsg_ReturnFrontBuffer(route_id_, mailbox, sync_token,
+ is_lost));
+}
+
gpu::error::Error CommandBufferProxyImpl::GetLastError() {
return last_state_.error;
}

Powered by Google App Engine
This is Rietveld 408576698