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