Index: content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.cc |
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.cc b/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.cc |
index 9a427a9194fe94e95f51b885621e046a3ff0415c..63e516ac70f8e5ff11ba958384b796dcdcf205d2 100644 |
--- a/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.cc |
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.cc |
@@ -4,16 +4,55 @@ |
#include "content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.h" |
-#include "ui/ozone/public/surface_factory_ozone.h" |
- |
namespace content { |
+namespace { |
+ |
+ui::SurfaceFactoryOzone::BufferFormat GetOzoneFormatFor( |
+ gfx::GpuMemoryBuffer::Format format) { |
+ switch (format) { |
+ case gfx::GpuMemoryBuffer::BGRA_8888: |
+ return ui::SurfaceFactoryOzone::BGRA_8888; |
+ case gfx::GpuMemoryBuffer::RGBX_8888: |
+ return ui::SurfaceFactoryOzone::RGBX_8888; |
+ case gfx::GpuMemoryBuffer::ATC: |
+ case gfx::GpuMemoryBuffer::ATCIA: |
+ case gfx::GpuMemoryBuffer::DXT1: |
+ case gfx::GpuMemoryBuffer::DXT5: |
+ case gfx::GpuMemoryBuffer::ETC1: |
+ case gfx::GpuMemoryBuffer::R_8: |
+ case gfx::GpuMemoryBuffer::RGBA_4444: |
+ case gfx::GpuMemoryBuffer::RGBA_8888: |
+ case gfx::GpuMemoryBuffer::YUV_420: |
+ NOTREACHED(); |
+ } |
+ NOTREACHED(); |
+ return ui::SurfaceFactoryOzone::BGRA_8888; |
+} |
+ |
+ui::SurfaceFactoryOzone::BufferUsage GetOzoneUsageFor( |
+ gfx::GpuMemoryBuffer::Usage usage) { |
+ switch (usage) { |
+ case gfx::GpuMemoryBuffer::MAP: |
+ return ui::SurfaceFactoryOzone::MAP; |
+ case gfx::GpuMemoryBuffer::PERSISTENT_MAP: |
+ return ui::SurfaceFactoryOzone::PERSISTENT_MAP; |
+ case gfx::GpuMemoryBuffer::SCANOUT: |
+ return ui::SurfaceFactoryOzone::SCANOUT; |
+ } |
+ NOTREACHED(); |
+ return ui::SurfaceFactoryOzone::SCANOUT; |
+} |
+ |
+} // namespace |
+ |
GpuMemoryBufferImplOzoneNativeBuffer::GpuMemoryBufferImplOzoneNativeBuffer( |
gfx::GpuMemoryBufferId id, |
const gfx::Size& size, |
Format format, |
+ Usage usage, |
const DestructionCallback& callback) |
- : GpuMemoryBufferImpl(id, size, format, callback) { |
+ : GpuMemoryBufferImpl(id, size, format, callback), usage_(usage) { |
} |
GpuMemoryBufferImplOzoneNativeBuffer::~GpuMemoryBufferImplOzoneNativeBuffer() { |
@@ -22,27 +61,51 @@ GpuMemoryBufferImplOzoneNativeBuffer::~GpuMemoryBufferImplOzoneNativeBuffer() { |
// static |
scoped_ptr<GpuMemoryBufferImpl> |
GpuMemoryBufferImplOzoneNativeBuffer::CreateFromHandle( |
+ ui::NativePixmapManager* manager, |
const gfx::GpuMemoryBufferHandle& handle, |
const gfx::Size& size, |
Format format, |
Usage usage, |
const DestructionCallback& callback) { |
- return make_scoped_ptr<GpuMemoryBufferImpl>( |
- new GpuMemoryBufferImplOzoneNativeBuffer( |
- handle.id, size, format, callback)); |
+ scoped_ptr<GpuMemoryBufferImplOzoneNativeBuffer> buffer = |
+ make_scoped_ptr(new GpuMemoryBufferImplOzoneNativeBuffer( |
+ handle.id, size, format, usage, callback)); |
+ |
+ if (!buffer->Initialize(manager, handle)) |
+ return nullptr; |
+ return buffer.Pass(); |
+} |
+ |
+bool GpuMemoryBufferImplOzoneNativeBuffer::Initialize( |
+ ui::NativePixmapManager* manager, |
+ const gfx::GpuMemoryBufferHandle& handle) { |
+ DCHECK(manager); |
+ pixmap_ = manager->CreateFromFileDescriptor(handle.handle, size_, |
+ GetOzoneFormatFor(format_), |
+ GetOzoneUsageFor(usage_)); |
+ return !!pixmap_; |
} |
bool GpuMemoryBufferImplOzoneNativeBuffer::Map(void** data) { |
- NOTREACHED(); |
- return false; |
+ DCHECK(!mapped_); |
+ DCHECK_EQ(usage_, MAP); |
+ mapped_ = true; |
+ void* buffer = pixmap_->Map(); |
+ if (!buffer) |
+ return false; |
+ *data = buffer; |
+ return true; |
} |
void GpuMemoryBufferImplOzoneNativeBuffer::Unmap() { |
- NOTREACHED(); |
+ DCHECK(mapped_); |
+ DCHECK_EQ(usage_, MAP); |
+ pixmap_->Unmap(); |
+ mapped_ = false; |
} |
void GpuMemoryBufferImplOzoneNativeBuffer::GetStride(int* stride) const { |
- NOTREACHED(); |
+ *stride = pixmap_->GetDmaBufPitch(); |
} |
gfx::GpuMemoryBufferHandle GpuMemoryBufferImplOzoneNativeBuffer::GetHandle() |