Index: chrome/gpu/gpu_command_buffer_stub.cc |
=================================================================== |
--- chrome/gpu/gpu_command_buffer_stub.cc (revision 75655) |
+++ chrome/gpu/gpu_command_buffer_stub.cc (working copy) |
@@ -170,6 +170,8 @@ |
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush); |
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateTransferBuffer, |
OnCreateTransferBuffer); |
+ IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_RegisterTransferBuffer, |
+ OnRegisterTransferBuffer); |
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_DestroyTransferBuffer, |
OnDestroyTransferBuffer); |
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_GetTransferBuffer, |
@@ -235,7 +237,7 @@ |
// Assume service is responsible for duplicating the handle from the |
// calling process. |
- buffer.shared_memory->ShareToProcess(channel_->renderer_handle(), |
+ buffer.shared_memory->ShareToProcess(channel_->renderer_process(), |
ring_buffer); |
#if defined(OS_MACOSX) |
if (handle_) { |
@@ -289,6 +291,20 @@ |
*id = command_buffer_->CreateTransferBuffer(size); |
} |
+void GpuCommandBufferStub::OnRegisterTransferBuffer( |
+ base::SharedMemoryHandle transfer_buffer, |
+ size_t size, |
+ int32* id) { |
+#if defined(OS_WIN) |
+ base::SharedMemory shared_memory(transfer_buffer, |
+ false, |
+ channel_->renderer_process()); |
+#else |
+ base::SharedMemory shared_memory(transfer_buffer, false); |
+#endif |
+ *id = command_buffer_->RegisterTransferBuffer(&shared_memory, size); |
+} |
+ |
void GpuCommandBufferStub::OnDestroyTransferBuffer(int32 id) { |
command_buffer_->DestroyTransferBuffer(id); |
} |
@@ -300,13 +316,17 @@ |
*transfer_buffer = base::SharedMemoryHandle(); |
*size = 0; |
+ // Fail if the renderer process has not provided its process handle. |
+ if (!channel_->renderer_process()) |
+ return; |
+ |
Buffer buffer = command_buffer_->GetTransferBuffer(id); |
if (buffer.shared_memory) { |
// Assume service is responsible for duplicating the handle to the calling |
// process. |
- buffer.shared_memory->ShareToProcess(channel_->renderer_handle(), |
+ buffer.shared_memory->ShareToProcess(channel_->renderer_process(), |
transfer_buffer); |
- *size = buffer.shared_memory->created_size(); |
+ *size = buffer.size; |
} |
} |