| Index: ui/gfx/mojo/buffer_types_traits.cc
|
| diff --git a/ui/gfx/mojo/buffer_types_traits.cc b/ui/gfx/mojo/buffer_types_traits.cc
|
| index b5b8bbde324010396eff6f39f19c3f7c3092fa5c..540326fc7250479c639cbacfa9ea7b2ca8630134 100644
|
| --- a/ui/gfx/mojo/buffer_types_traits.cc
|
| +++ b/ui/gfx/mojo/buffer_types_traits.cc
|
| @@ -65,15 +65,24 @@ mojo::ScopedHandle StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
|
| shared_memory_handle(const gfx::GpuMemoryBufferHandle& handle) {
|
| if (handle.type != gfx::SHARED_MEMORY_BUFFER)
|
| return mojo::ScopedHandle();
|
| +#if defined(OS_MACOSX)
|
| + base::SharedMemoryHandle shm_handle = handle.handle;
|
| + size_t num_bytes = 0;
|
| + if (!shm_handle.GetSize(&num_bytes))
|
| + return mojo::ScopedHandle();
|
| + mojo::ScopedSharedBufferHandle scoped_handle =
|
| + mojo::WrapSharedMemoryHandle(shm_handle, num_bytes, false);
|
| + mojo::Handle mojo_handle = scoped_handle.release();
|
| + return mojo::MakeScopedHandle(mojo_handle);
|
| +#else // defined(OS_MACOSX)
|
| base::PlatformFile platform_file = base::kInvalidPlatformFile;
|
| #if defined(OS_WIN)
|
| platform_file = handle.handle.GetHandle();
|
| -#elif defined(OS_MACOSX) || defined(OS_IOS)
|
| - NOTIMPLEMENTED();
|
| #else
|
| platform_file = handle.handle.fd;
|
| #endif
|
| return mojo::WrapPlatformFile(platform_file);
|
| +#endif // defined(OS_MACOSX)
|
| }
|
|
|
| const gfx::NativePixmapHandle&
|
| @@ -110,6 +119,15 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
|
| if (out->type == gfx::SHARED_MEMORY_BUFFER) {
|
| mojo::ScopedHandle handle = data.TakeSharedMemoryHandle();
|
| if (handle.is_valid()) {
|
| +#if defined(OS_MACOSX)
|
| + mojo::Handle mojo_handle = handle.release();
|
| + mojo::ScopedSharedBufferHandle buffer_handle =
|
| + mojo::MakeScopedHandle(mojo::SharedBufferHandle(mojo_handle.value()));
|
| + MojoResult unwrap_result = mojo::UnwrapSharedMemoryHandle(
|
| + std::move(buffer_handle), &out->handle, nullptr, nullptr);
|
| + if (unwrap_result != MOJO_RESULT_OK)
|
| + return false;
|
| +#else // defined(OS_MACOSX)
|
| base::PlatformFile platform_file;
|
| MojoResult unwrap_result =
|
| mojo::UnwrapPlatformFile(std::move(handle), &platform_file);
|
| @@ -118,12 +136,10 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
|
| #if defined(OS_WIN)
|
| out->handle =
|
| base::SharedMemoryHandle(platform_file, base::GetCurrentProcId());
|
| -#elif defined(OS_MACOSX) || defined(OS_IOS)
|
| - // TODO: Add support for mach_port on mac.
|
| - out->handle = base::SharedMemoryHandle();
|
| #else
|
| out->handle = base::SharedMemoryHandle(platform_file, true);
|
| #endif
|
| +#endif // defined(OS_MACOSX)
|
| }
|
|
|
| out->offset = data.offset();
|
|
|