| Index: content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.cc
|
| diff --git a/content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.cc b/content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.cc
|
| index d3e0576124a9be60c8f6e67f2dddfbc0ca0f63d8..990d0e2dc9d3f15f6482d394d7aac5a334c1e88d 100644
|
| --- a/content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.cc
|
| +++ b/content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "content/common/gpu/gpu_memory_buffer_factory_ozone_native_pixmap.h"
|
|
|
| +#include "base/posix/eintr_wrapper.h"
|
| #include "ui/gl/gl_image_ozone_native_pixmap.h"
|
| #include "ui/ozone/public/client_native_pixmap_factory.h"
|
| #include "ui/ozone/public/ozone_platform.h"
|
| @@ -24,6 +25,18 @@ void GetSupportedConfigurations(
|
| }
|
| }
|
|
|
| +bool ShareToClientProcess(int fd, base::FileDescriptor* new_handle) {
|
| + int duped_handle = HANDLE_EINTR(dup(fd));
|
| + if (duped_handle < 0) {
|
| + DPLOG(ERROR) << "dup() failed.";
|
| + *new_handle = base::FileDescriptor();
|
| + return false;
|
| + }
|
| +
|
| + *new_handle = base::FileDescriptor(duped_handle, true);
|
| + return true;
|
| +}
|
| +
|
| } // namespace
|
|
|
| GpuMemoryBufferFactoryOzoneNativePixmap::
|
| @@ -79,6 +92,14 @@ GpuMemoryBufferFactoryOzoneNativePixmap::CreateGpuMemoryBuffer(
|
| gfx::GpuMemoryBufferHandle handle;
|
| handle.type = gfx::OZONE_NATIVE_PIXMAP;
|
| handle.id = id;
|
| + if (usage == gfx::BufferUsage::MAP) {
|
| + base::FileDescriptor dma_buf;
|
| + if (!ShareToClientProcess(pixmap->GetDmaBufFd(), &dma_buf)) {
|
| + DLOG(ERROR) << "Fail to duplicate a DMA-BUF file descriptor";
|
| + return gfx::GpuMemoryBufferHandle();
|
| + }
|
| + handle.handle = dma_buf;
|
| + }
|
| return handle;
|
| }
|
|
|
|
|