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

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

Issue 2383753002: gpu: Add GpuFence framework.
Patch Set: rebase Created 4 years, 1 month 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 07c31ff9a951eb93f66c7133586559ffc5fe65a4..88be6e52458adb8f87cf0ca8971ba9d263ec170e 100644
--- a/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -664,6 +664,42 @@ void CommandBufferProxyImpl::SignalQuery(uint32_t query,
signal_tasks_.insert(std::make_pair(signal_id, callback));
}
+int32_t CommandBufferProxyImpl::CreateFence(ClientFence fence) {
+ CheckLock();
+ if (last_state_.error != gpu::error::kNoError)
+ return -1;
+
+ int32_t new_id = channel_->ReserveFenceId();
+
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager =
+ channel_->gpu_memory_buffer_manager();
+ gfx::GpuFence* gpu_fence =
+ gpu_memory_buffer_manager->GpuFenceFromClientFence(fence);
+ DCHECK(gpu_fence);
+
+ // This handle is owned by the GPU process and must be passed to it or it
+ // will leak. In otherwords, do not early out on error between here and the
+ // sending of the CreateFence IPC below.
+ gfx::GpuFenceHandle handle =
+ channel_->ShareGpuFenceToGpuProcess(gpu_fence->GetHandle());
+
+ GpuCommandBufferMsg_CreateFence_Params params;
+ params.id = new_id;
+ params.gpu_fence = handle;
+
+ Send(new GpuCommandBufferMsg_CreateFence(route_id_, params));
+
+ return new_id;
+}
+
+void CommandBufferProxyImpl::DestroyFence(int32_t id) {
+ CheckLock();
+ if (last_state_.error != gpu::error::kNoError)
+ return;
+
+ Send(new GpuCommandBufferMsg_DestroyFence(route_id_, id));
+}
+
void CommandBufferProxyImpl::TakeFrontBuffer(const gpu::Mailbox& mailbox) {
CheckLock();
if (last_state_.error != gpu::error::kNoError)

Powered by Google App Engine
This is Rietveld 408576698