gpu_memory_buffer_impl_android.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/common/gpu/client/gpu_memory_buffer_impl.h" 6 7#include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h" 8#include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h" 9 10namespace content { 11 12// static 13scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::Create( 14 const gfx::Size& size, 15 unsigned internalformat, 16 unsigned usage) { 17 if (GpuMemoryBufferImplShm::IsConfigurationSupported( 18 size, internalformat, usage)) { 19 scoped_ptr<GpuMemoryBufferImplShm> buffer( 20 new GpuMemoryBufferImplShm(size, internalformat)); 21 if (!buffer->Initialize()) 22 return scoped_ptr<GpuMemoryBufferImpl>(); 23 24 return buffer.PassAs<GpuMemoryBufferImpl>(); 25 } 26 27 return scoped_ptr<GpuMemoryBufferImpl>(); 28} 29 30// static 31void GpuMemoryBufferImpl::AllocateForChildProcess( 32 const gfx::Size& size, 33 unsigned internalformat, 34 unsigned usage, 35 base::ProcessHandle child_process, 36 const AllocationCallback& callback) { 37 if (GpuMemoryBufferImplShm::IsConfigurationSupported( 38 size, internalformat, usage)) { 39 GpuMemoryBufferImplShm::AllocateSharedMemoryForChildProcess( 40 size, internalformat, child_process, callback); 41 return; 42 } 43 44 callback.Run(gfx::GpuMemoryBufferHandle()); 45} 46 47// static 48scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 49 gfx::GpuMemoryBufferHandle handle, 50 const gfx::Size& size, 51 unsigned internalformat) { 52 switch (handle.type) { 53 case gfx::SHARED_MEMORY_BUFFER: { 54 scoped_ptr<GpuMemoryBufferImplShm> buffer( 55 new GpuMemoryBufferImplShm(size, internalformat)); 56 if (!buffer->InitializeFromHandle(handle)) 57 return scoped_ptr<GpuMemoryBufferImpl>(); 58 59 return buffer.PassAs<GpuMemoryBufferImpl>(); 60 } 61 case gfx::SURFACE_TEXTURE_BUFFER: { 62 scoped_ptr<GpuMemoryBufferImplSurfaceTexture> buffer( 63 new GpuMemoryBufferImplSurfaceTexture(size, internalformat)); 64 if (!buffer->InitializeFromHandle(handle)) 65 return scoped_ptr<GpuMemoryBufferImpl>(); 66 67 return buffer.PassAs<GpuMemoryBufferImpl>(); 68 } 69 default: 70 return scoped_ptr<GpuMemoryBufferImpl>(); 71 } 72} 73 74} // namespace content 75