Chromium Code Reviews| Index: ppapi/proxy/ppb_graphics_3d_proxy.cc |
| diff --git a/ppapi/proxy/ppb_graphics_3d_proxy.cc b/ppapi/proxy/ppb_graphics_3d_proxy.cc |
| index 4bb7b8dc4a21c53c9297e667e76807186e8546d8..b3dc645f8fead7c4430533996d24fea71fddcdf8 100644 |
| --- a/ppapi/proxy/ppb_graphics_3d_proxy.cc |
| +++ b/ppapi/proxy/ppb_graphics_3d_proxy.cc |
| @@ -28,10 +28,10 @@ namespace { |
| const int32 kCommandBufferSize = 1024 * 1024; |
| const int32 kTransferBufferSize = 1024 * 1024; |
| -base::SharedMemoryHandle TransportSHMHandle(Dispatcher* dispatcher, |
| - base::SharedMemory* shm) { |
| - base::PlatformFile source = |
| - IPC::PlatformFileForTransitToPlatformFile(shm->handle()); |
| +base::SharedMemoryHandle TransportSHMHandle( |
| + Dispatcher* dispatcher, |
| + const base::SharedMemoryHandle& handle) { |
| + base::PlatformFile source = IPC::PlatformFileForTransitToPlatformFile(handle); |
| // Don't close the handle, it doesn't belong to us. |
| return dispatcher->ShareHandleWithRemote(source, false); |
| } |
| @@ -52,13 +52,14 @@ Graphics3D::~Graphics3D() { |
| DestroyGLES2Impl(); |
| } |
| -bool Graphics3D::Init(gpu::gles2::GLES2Implementation* share_gles2) { |
| +bool Graphics3D::Init(gpu::gles2::GLES2Implementation* share_gles2, |
| + const SerializedHandle& shared_state) { |
| PluginDispatcher* dispatcher = PluginDispatcher::GetForResource(this); |
| if (!dispatcher) |
| return false; |
| command_buffer_.reset( |
| - new PpapiCommandBufferProxy(host_resource(), dispatcher)); |
| + new PpapiCommandBufferProxy(host_resource(), dispatcher, shared_state)); |
| return CreateGLES2Impl(kCommandBufferSize, kTransferBufferSize, |
| share_gles2); |
| @@ -167,13 +168,17 @@ PP_Resource PPB_Graphics3D_Proxy::CreateProxyResource( |
| attribs.push_back(PP_GRAPHICS3DATTRIB_NONE); |
| HostResource result; |
| - dispatcher->Send(new PpapiHostMsg_PPBGraphics3D_Create( |
| - API_ID_PPB_GRAPHICS_3D, instance, share_host, attribs, &result)); |
| + ppapi::proxy::SerializedHandle shared_state; |
| + //( |
| + // ppapi::proxy::SerializedHandle::SHARED_MEMORY); |
|
piman
2014/09/08 21:02:04
nit: bogus comment?
Peng
2014/09/08 21:12:22
Done.
|
| + dispatcher->Send(new PpapiHostMsg_PPBGraphics3D_Create(API_ID_PPB_GRAPHICS_3D, |
| + instance, share_host, attribs, &result, &shared_state)); |
| + |
| if (result.is_null()) |
| return 0; |
| scoped_refptr<Graphics3D> graphics_3d(new Graphics3D(result)); |
| - if (!graphics_3d->Init(share_gles2)) |
| + if (!graphics_3d->Init(share_gles2, shared_state)) |
| return 0; |
| return graphics_3d->GetReference(); |
| } |
| @@ -218,7 +223,9 @@ bool PPB_Graphics3D_Proxy::OnMessageReceived(const IPC::Message& msg) { |
| void PPB_Graphics3D_Proxy::OnMsgCreate(PP_Instance instance, |
| HostResource share_context, |
| const std::vector<int32_t>& attribs, |
| - HostResource* result) { |
| + HostResource* result, |
| + SerializedHandle* shared_state) { |
| + shared_state->set_null_shmem(); |
| if (attribs.empty() || |
| attribs.back() != PP_GRAPHICS3DATTRIB_NONE || |
| !(attribs.size() & 1)) |
| @@ -226,12 +233,19 @@ void PPB_Graphics3D_Proxy::OnMsgCreate(PP_Instance instance, |
| thunk::EnterResourceCreation enter(instance); |
| - if (enter.succeeded()) { |
| - result->SetHostResource( |
| + if (!enter.succeeded()) |
| + return; |
| + |
| + base::SharedMemoryHandle handle = IPC::InvalidPlatformFileForTransit(); |
| + result->SetHostResource( |
| instance, |
| enter.functions()->CreateGraphics3DRaw(instance, |
| share_context.host_resource(), |
| - &attribs.front())); |
| + &attribs.front(), |
| + &handle)); |
| + if (!result->is_null()) { |
| + shared_state->set_shmem(TransportSHMHandle(dispatcher(), handle), |
| + sizeof(gpu::CommandBuffer::State)); |
| } |
| } |
| @@ -284,7 +298,7 @@ void PPB_Graphics3D_Proxy::OnMsgCreateTransferBuffer( |
| const HostResource& context, |
| uint32 size, |
| int32* id, |
| - ppapi::proxy::SerializedHandle* transfer_buffer) { |
| + SerializedHandle* transfer_buffer) { |
| transfer_buffer->set_null_shmem(); |
| EnterHostFromHostResource<PPB_Graphics3D_API> enter(context); |
| if (enter.succeeded()) { |
| @@ -296,7 +310,7 @@ void PPB_Graphics3D_Proxy::OnMsgCreateTransferBuffer( |
| static_cast<gpu::SharedMemoryBufferBacking*>(buffer->backing()); |
| DCHECK(backing && backing->shared_memory()); |
| transfer_buffer->set_shmem( |
| - TransportSHMHandle(dispatcher(), backing->shared_memory()), |
| + TransportSHMHandle(dispatcher(), backing->shared_memory()->handle()), |
| buffer->size()); |
| } else { |
| *id = -1; |