Chromium Code Reviews| Index: content/browser/renderer_host/render_message_filter.cc |
| diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
| index 11f80eeab63347999c3ab2deddfe6bc4096a74a3..800daf0610da757fc49c7074a59568f39a424683 100644 |
| --- a/content/browser/renderer_host/render_message_filter.cc |
| +++ b/content/browser/renderer_host/render_message_filter.cc |
| @@ -443,8 +443,9 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message, |
| OnAllocateSharedMemory) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateSharedBitmap, |
| OnAllocateSharedBitmap) |
| - IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer, |
| - OnAllocateGpuMemoryBuffer) |
| + IPC_MESSAGE_HANDLER_DELAY_REPLY( |
| + ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer, |
|
danakj
2014/05/20 19:37:47
Should this message be renamed to not say "Sync"?
alexst (slow to review)
2014/05/20 19:51:35
It's still a sync message from the caller's point
|
| + OnAllocateGpuMemoryBuffer) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_AllocatedSharedBitmap, |
| OnAllocatedSharedBitmap) |
| IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedSharedBitmap, |
| @@ -1233,21 +1234,20 @@ void RenderMessageFilter::OnWebAudioMediaCodec( |
| } |
| #endif |
| -void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
| - uint32 width, |
| - uint32 height, |
| - uint32 internalformat, |
| - uint32 usage, |
| - gfx::GpuMemoryBufferHandle* handle) { |
| +void RenderMessageFilter::OnAllocateGpuMemoryBuffer(uint32 width, |
| + uint32 height, |
| + uint32 internalformat, |
| + uint32 usage, |
| + IPC::Message* reply) { |
| if (!GpuMemoryBufferImpl::IsFormatValid(internalformat) || |
| !GpuMemoryBufferImpl::IsUsageValid(usage)) { |
| - handle->type = gfx::EMPTY_BUFFER; |
| + GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle()); |
| return; |
| } |
| base::CheckedNumeric<int> size = width; |
| size *= height; |
| if (!size.IsValid()) { |
| - handle->type = gfx::EMPTY_BUFFER; |
| + GpuMemoryBufferAllocated(reply, gfx::GpuMemoryBufferHandle()); |
| return; |
| } |
| @@ -1287,13 +1287,15 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
| base::ScopedCFTypeRef<CFTypeRef> io_surface( |
| io_surface_support->IOSurfaceCreate(properties)); |
| if (io_surface) { |
| - handle->type = gfx::IO_SURFACE_BUFFER; |
| - handle->io_surface_id = io_surface_support->IOSurfaceGetID(io_surface); |
| + gfx::GpuMemoryBufferHandle handle; |
| + handle.type = gfx::IO_SURFACE_BUFFER; |
| + handle.io_surface_id = io_surface_support->IOSurfaceGetID(io_surface); |
| // TODO(reveman): This makes the assumption that the renderer will |
| // grab a reference to the surface before sending another message. |
| // crbug.com/325045 |
| last_io_surface_ = io_surface; |
| + GpuMemoryBufferAllocated(reply, handle); |
| return; |
| } |
| } |
| @@ -1313,16 +1315,30 @@ void RenderMessageFilter::OnAllocateGpuMemoryBuffer( |
| int surface_texture_id = |
| CompositorImpl::CreateSurfaceTexture(render_process_id_); |
| if (surface_texture_id != -1) { |
| - handle->type = gfx::SURFACE_TEXTURE_BUFFER; |
| - handle->surface_texture_id = |
| + gfx::GpuMemoryBufferHandle handle; |
| + handle.type = gfx::SURFACE_TEXTURE_BUFFER; |
| + handle.surface_texture_id = |
| gfx::SurfaceTextureId(surface_texture_id, render_process_id_); |
| + GpuMemoryBufferAllocated(reply, handle); |
| return; |
| } |
| } |
| #endif |
| GpuMemoryBufferImpl::AllocateForChildProcess( |
| - gfx::Size(width, height), internalformat, usage, PeerHandle(), handle); |
| + gfx::Size(width, height), |
| + internalformat, |
| + usage, |
| + PeerHandle(), |
| + base::Bind(&RenderMessageFilter::GpuMemoryBufferAllocated, this, reply)); |
| +} |
| + |
| +void RenderMessageFilter::GpuMemoryBufferAllocated( |
| + IPC::Message* reply, |
| + const gfx::GpuMemoryBufferHandle& handle) { |
| + ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply, |
| + handle); |
| + Send(reply); |
| } |
| } // namespace content |