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