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_shared_memory.h" 8 #include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h" 9 10 namespace content { 11 12 // static 13 void GpuMemoryBufferImpl::Create(const gfx::Size& size, 14 unsigned internalformat, 15 unsigned usage, 16 int client_id, 17 const CreationCallback& callback) { 18 if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 19 size, internalformat, usage)) { 20 GpuMemoryBufferImplSharedMemory::Create( 21 size, internalformat, usage, callback); 22 return; 23 } 24 25 callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); 26 } 27 28 // static 29 void GpuMemoryBufferImpl::AllocateForChildProcess( 30 const gfx::Size& size, 31 unsigned internalformat, 32 unsigned usage, 33 base::ProcessHandle child_process, 34 int child_client_id, 35 const AllocationCallback& callback) { 36 if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 37 size, internalformat, usage)) { 38 GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 39 size, internalformat, child_process, callback); 40 return; 41 } 42 43 callback.Run(gfx::GpuMemoryBufferHandle()); 44 } 45 46 // static 47 void GpuMemoryBufferImpl::DeletedByChildProcess( 48 gfx::GpuMemoryBufferType type, 49 const gfx::GpuMemoryBufferId& id, 50 base::ProcessHandle child_process) { 51 } 52 53 // static 54 scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 55 const gfx::GpuMemoryBufferHandle& handle, 56 const gfx::Size& size, 57 unsigned internalformat, 58 const DestructionCallback& callback) { 59 switch (handle.type) { 60 case gfx::SHARED_MEMORY_BUFFER: 61 return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 62 handle, size, internalformat, callback); 63 case gfx::SURFACE_TEXTURE_BUFFER: 64 return GpuMemoryBufferImplSurfaceTexture::CreateFromHandle( 65 handle, size, internalformat, callback); 66 default: 67 return scoped_ptr<GpuMemoryBufferImpl>(); 68 } 69 } 70 71 } // namespace content 72