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

Unified Diff: gpu/ipc/service/gpu_command_buffer_stub.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/service/gpu_command_buffer_stub.cc
diff --git a/gpu/ipc/service/gpu_command_buffer_stub.cc b/gpu/ipc/service/gpu_command_buffer_stub.cc
index 5b29e2ca28ca161e22bece542ffb544293f6908e..999a6cf81738f59e1af8d01ee9d3daa153fb682c 100644
--- a/gpu/ipc/service/gpu_command_buffer_stub.cc
+++ b/gpu/ipc/service/gpu_command_buffer_stub.cc
@@ -20,6 +20,7 @@
#include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
#include "gpu/command_buffer/common/mailbox.h"
#include "gpu/command_buffer/common/sync_token.h"
+#include "gpu/command_buffer/service/fence_manager.h"
#include "gpu/command_buffer/service/gl_context_virtual.h"
#include "gpu/command_buffer/service/gl_state_restorer_impl.h"
#include "gpu/command_buffer/service/image_manager.h"
@@ -41,6 +42,7 @@
#include "gpu/ipc/service/image_transport_surface.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_context.h"
+#include "ui/gl/gl_fence.h"
#include "ui/gl/gl_image.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_switches.h"
@@ -256,6 +258,8 @@ bool GpuCommandBufferStub::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_DestroyImage, OnDestroyImage);
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateStreamTexture,
OnCreateStreamTexture)
+ IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateFence, OnCreateFence);
+ IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_DestroyFence, OnDestroyFence);
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -1079,6 +1083,47 @@ void GpuCommandBufferStub::OnDestroyImage(int32_t id) {
image_manager->RemoveImage(id);
}
+void GpuCommandBufferStub::OnCreateFence(
+ const GpuCommandBufferMsg_CreateFence_Params& params) {
+ TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateFence");
+ const int32_t id = params.id;
+ const gfx::GpuFenceHandle& handle = params.gpu_fence;
+
+ if (!decoder_)
+ return;
+
+ gles2::FenceManager* fence_manager = decoder_->GetFenceManager();
+ DCHECK(fence_manager);
+ if (fence_manager->LookupFence(id)) {
+ LOG(ERROR) << "Fence already exists with same ID.";
+ return;
+ }
+
+ std::unique_ptr<gl::GLFence> fence =
+ channel()->CreateFenceForGpuFence(handle);
+ if (!fence) {
+ DLOG(ERROR) << "Failed to create GLFence from GpuFence handle.";
+ return;
+ }
+
+ fence_manager->AddFence(std::move(fence), id);
+}
+
+void GpuCommandBufferStub::OnDestroyFence(int32_t id) {
+ TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnDestroyFence");
+
+ if (!decoder_)
+ return;
+
+ gles2::FenceManager* fence_manager = decoder_->GetFenceManager();
+ DCHECK(fence_manager);
+ if (!fence_manager->LookupFence(id)) {
+ LOG(ERROR) << "Fence with ID doesn't exist.";
+ return;
+ }
+ fence_manager->RemoveFence(id);
+}
+
void GpuCommandBufferStub::SendConsoleMessage(int32_t id,
const std::string& message) {
GPUCommandBufferConsoleMessage console_message;

Powered by Google App Engine
This is Rietveld 408576698