summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/ppapi_command_buffer_proxy.cc
diff options
context:
space:
mode:
authordmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-27 20:28:18 +0000
committerdmichael@chromium.org <dmichael@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-27 20:28:18 +0000
commit246fc49935cd37deba43624861f236acc016aa48 (patch)
tree8dbc89fc8304cfa0409dc83ccb8b94b01d3def8f /ppapi/proxy/ppapi_command_buffer_proxy.cc
parent906960ba1d7a27bb458fca480a20aa33c61ebdb6 (diff)
downloadchromium_src-246fc49935cd37deba43624861f236acc016aa48.zip
chromium_src-246fc49935cd37deba43624861f236acc016aa48.tar.gz
chromium_src-246fc49935cd37deba43624861f236acc016aa48.tar.bz2
PPAPI/NaCl: Make NaClIPCAdapter transfer handles more generally
This does a couple of things: - It defines a new wrapper for passing any kind of handle through the PPAPI proxy (SerializedHandle). - It updates nacl_ipc_adapter to have a more general way to pick apart messages based on their static types (which include the types of all the params). - It adds support for PPB_Graphics2D and PPB_Graphics3D to the NaCl IPC proxy (e.g., NaCl SDK examples pi_generator and tumbler work in the new proxy with this patch). The downside is it requires pulling parts of ppapi/shared_impl and ppapi/proxy in to the NaCl Win64 build. BUG=116317 TEST= Review URL: https://chromiumcodereview.appspot.com/10828023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153531 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy/ppapi_command_buffer_proxy.cc')
-rw-r--r--ppapi/proxy/ppapi_command_buffer_proxy.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/ppapi/proxy/ppapi_command_buffer_proxy.cc b/ppapi/proxy/ppapi_command_buffer_proxy.cc
index 91cd268..282a876 100644
--- a/ppapi/proxy/ppapi_command_buffer_proxy.cc
+++ b/ppapi/proxy/ppapi_command_buffer_proxy.cc
@@ -225,27 +225,29 @@ gpu::Buffer PpapiCommandBufferProxy::GetTransferBuffer(int32 id) {
// Assuming we are in the renderer process, the service is responsible for
// duplicating the handle. This might not be true for NaCl.
- base::SharedMemoryHandle handle;
- uint32 size;
+ ppapi::proxy::SerializedHandle handle(
+ ppapi::proxy::SerializedHandle::SHARED_MEMORY);
if (!Send(new PpapiHostMsg_PPBGraphics3D_GetTransferBuffer(
- ppapi::API_ID_PPB_GRAPHICS_3D, resource_, id, &handle, &size))) {
+ ppapi::API_ID_PPB_GRAPHICS_3D, resource_, id, &handle))) {
return gpu::Buffer();
}
+ if (!handle.is_shmem())
+ return gpu::Buffer();
// Cache the transfer buffer shared memory object client side.
scoped_ptr<base::SharedMemory> shared_memory(
- new base::SharedMemory(handle, false));
+ new base::SharedMemory(handle.shmem(), false));
// Map the shared memory on demand.
if (!shared_memory->memory()) {
- if (!shared_memory->Map(size)) {
+ if (!shared_memory->Map(handle.size())) {
return gpu::Buffer();
}
}
gpu::Buffer buffer;
buffer.ptr = shared_memory->memory();
- buffer.size = size;
+ buffer.size = handle.size();
buffer.shared_memory = shared_memory.release();
transfer_buffers_[id] = buffer;