Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1175)

Unified Diff: ui/gfx/mojo/buffer_types_traits.cc

Issue 2298003002: gfx: Struct traits for GpuMemoryBufferHandle. (Closed)
Patch Set: . Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/mojo/buffer_types_traits.h ('k') | ui/gfx/mojo/struct_traits_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
new file mode 100644
index 0000000000000000000000000000000000000000..3ad6ecb968f2196f9ab9cc7391d3908131b56eb8
--- /dev/null
+++ b/ui/gfx/mojo/buffer_types_traits.cc
@@ -0,0 +1,100 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/mojo/buffer_types_traits.h"
+
+#include "mojo/public/cpp/system/platform_handle.h"
+
+namespace mojo {
+
+std::vector<mojo::ScopedHandle>
+StructTraits<gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle>::fds(const gfx::NativePixmapHandle&
+ pixmap_handle) {
+ std::vector<mojo::ScopedHandle> handles;
+#if defined(USE_OZONE)
+ for (const base::FileDescriptor& fd : pixmap_handle.fds) {
+ base::PlatformFile platform_file = fd.fd;
+ handles.push_back(mojo::WrapPlatformFile(platform_file));
+ }
+#endif // defined(USE_OZONE)
+ return handles;
+}
+
+bool StructTraits<
+ gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle>::Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out) {
+#if defined(USE_OZONE)
+ mojo::ArrayDataView<mojo::ScopedHandle> handles_data_view;
+ data.GetFdsDataView(&handles_data_view);
+ for (size_t i = 0; i < handles_data_view.size(); ++i) {
+ mojo::ScopedHandle handle = handles_data_view.Take(i);
+ out->fds.push_back(base::FileDescriptor(handle.release().value(), true));
+ }
+ return data.ReadPlanes(&out->planes);
+#else
+ return false;
+#endif
+}
+
+mojo::ScopedHandle StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
+ gfx::GpuMemoryBufferHandle>::
+ shared_memory_handle(const gfx::GpuMemoryBufferHandle& handle) {
+ base::PlatformFile platform_file = base::kInvalidPlatformFile;
+#if defined(OS_WIN)
+ platform_file = handle.handle.GetHandle();
+#elif defined(OS_MACOSX) || defined(OS_IOS)
+ NOTIMPLEMENTED();
+#else
+ DCHECK(handle.handle.auto_close || handle.handle.fd == -1);
+ platform_file = handle.handle.fd;
+#endif
+ return mojo::WrapPlatformFile(platform_file);
+}
+
+const gfx::NativePixmapHandle&
+StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
+ gfx::GpuMemoryBufferHandle>::
+ native_pixmap_handle(const gfx::GpuMemoryBufferHandle& handle) {
+#if defined(USE_OZONE)
+ return handle.native_pixmap_handle;
+#else
+ static gfx::NativePixmapHandle pixmap_handle;
+ return pixmap_handle;
+#endif
+}
+
+bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
+ gfx::GpuMemoryBufferHandle>::
+ Read(gfx::mojom::GpuMemoryBufferHandleDataView data,
+ gfx::GpuMemoryBufferHandle* out) {
+ if (!data.ReadType(&out->type) || !data.ReadId(&out->id))
+ return false;
+
+ base::PlatformFile platform_file;
+ MojoResult unwrap_result = mojo::UnwrapPlatformFile(
+ data.TakeSharedMemoryHandle(), &platform_file);
+ if (unwrap_result != MOJO_RESULT_OK)
+ return false;
+#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
+
+ out->offset = data.offset();
+ out->stride = data.stride();
+#if defined(USE_OZONE)
+ if (!data.ReadNativePixmapHandle(&out->native_pixmap_handle))
+ return false;
+#endif
+ return true;
+}
+
+} // namespace mojo
« no previous file with comments | « ui/gfx/mojo/buffer_types_traits.h ('k') | ui/gfx/mojo/struct_traits_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698