Chromium Code Reviews| Index: content/common/gpu/client/gpu_memory_buffer_impl_android.cc |
| diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_android.cc b/content/common/gpu/client/gpu_memory_buffer_impl_android.cc |
| index 9c0fdb368c67b02d9bb7ac985828663d7b6ccf16..cc82b06c41d3bd4f8f0d166b316caccd171a0422 100644 |
| --- a/content/common/gpu/client/gpu_memory_buffer_impl_android.cc |
| +++ b/content/common/gpu/client/gpu_memory_buffer_impl_android.cc |
| @@ -4,36 +4,65 @@ |
| #include "content/common/gpu/client/gpu_memory_buffer_impl.h" |
| +#include "base/logging.h" |
| #include "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h" |
| #include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h" |
| namespace content { |
| // static |
| -void GpuMemoryBufferImpl::Create(gfx::GpuMemoryBufferId id, |
| +void GpuMemoryBufferImpl::GetSupportedTypes( |
| + std::vector<gfx::GpuMemoryBufferType>* types) { |
| + const gfx::GpuMemoryBufferType supported_types[] = { |
| + gfx::SURFACE_TEXTURE_BUFFER, |
| + gfx::SHARED_MEMORY_BUFFER |
| + }; |
| + types->assign(supported_types, supported_types + arraysize(supported_types)); |
| +} |
| + |
| +// static |
| +bool GpuMemoryBufferImpl::IsConfigurationSupported( |
| + gfx::GpuMemoryBufferType type, |
| + Format format, |
| + Usage usage) { |
| + switch (type) { |
| + case gfx::SHARED_MEMORY_BUFFER: |
| + return GpuMemoryBufferImplSharedMemory::IsFormatSupported(format) && |
| + GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage); |
| + case gfx::SURFACE_TEXTURE_BUFFER: |
| + return GpuMemoryBufferImplSurfaceTexture::IsFormatSupported(format) && |
| + GpuMemoryBufferImplSurfaceTexture::IsUsageSupported(usage); |
|
piman
2014/11/11 22:38:30
So, there's a lot of duplication between all the p
reveman
2014/11/12 05:09:20
I agree that we need a factory here. I don't think
|
| + default: |
| + NOTREACHED(); |
| + return false; |
| + } |
| +} |
| + |
| +// static |
| +void GpuMemoryBufferImpl::Create(gfx::GpuMemoryBufferType type, |
| + gfx::GpuMemoryBufferId id, |
| const gfx::Size& size, |
| Format format, |
| Usage usage, |
| int client_id, |
| const CreationCallback& callback) { |
| - if (GpuMemoryBufferImplSurfaceTexture::IsConfigurationSupported(format, |
| - usage)) { |
| - GpuMemoryBufferImplSurfaceTexture::Create( |
| - id, size, format, client_id, callback); |
| - return; |
| - } |
| - |
| - if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( |
| - size, format, usage)) { |
| - GpuMemoryBufferImplSharedMemory::Create(id, size, format, callback); |
| - return; |
| + switch (type) { |
| + case gfx::SHARED_MEMORY_BUFFER: |
| + GpuMemoryBufferImplSharedMemory::Create(id, size, format, callback); |
| + break; |
| + case gfx::SURFACE_TEXTURE_BUFFER: |
| + GpuMemoryBufferImplSurfaceTexture::Create( |
| + id, size, format, client_id, callback); |
| + break; |
| + default: |
| + NOTREACHED(); |
| + break; |
| } |
| - |
| - callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); |
| } |
| // static |
| void GpuMemoryBufferImpl::AllocateForChildProcess( |
| + gfx::GpuMemoryBufferType type, |
| gfx::GpuMemoryBufferId id, |
| const gfx::Size& size, |
| Format format, |
| @@ -41,21 +70,19 @@ void GpuMemoryBufferImpl::AllocateForChildProcess( |
| base::ProcessHandle child_process, |
| int child_client_id, |
| const AllocationCallback& callback) { |
| - if (GpuMemoryBufferImplSurfaceTexture::IsConfigurationSupported(format, |
| - usage)) { |
| - GpuMemoryBufferImplSurfaceTexture::AllocateForChildProcess( |
| - id, size, format, child_client_id, callback); |
| - return; |
| - } |
| - |
| - if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( |
| - size, format, usage)) { |
| - GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( |
| - id, size, format, child_process, callback); |
| - return; |
| + switch (type) { |
| + case gfx::SHARED_MEMORY_BUFFER: |
| + GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( |
| + id, size, format, child_process, callback); |
| + break; |
| + case gfx::SURFACE_TEXTURE_BUFFER: |
| + GpuMemoryBufferImplSurfaceTexture::AllocateForChildProcess( |
| + id, size, format, child_client_id, callback); |
| + break; |
| + default: |
| + NOTREACHED(); |
| + break; |
| } |
| - |
| - callback.Run(gfx::GpuMemoryBufferHandle()); |
| } |
| // static |
| @@ -92,6 +119,7 @@ scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( |
| return GpuMemoryBufferImplSurfaceTexture::CreateFromHandle( |
| handle, size, format, callback); |
| default: |
| + NOTREACHED(); |
| return scoped_ptr<GpuMemoryBufferImpl>(); |
| } |
| } |