1// Copyright 2014 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_ozone_native_buffer.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 (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported( 19 internalformat, usage)) { 20 GpuMemoryBufferImplOzoneNativeBuffer::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 (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported( 44 internalformat, usage)) { 45 GpuMemoryBufferImplOzoneNativeBuffer::AllocateForChildProcess( 46 size, internalformat, usage, child_client_id, callback); 47 return; 48 } 49 if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 50 size, internalformat, usage)) { 51 GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 52 size, internalformat, child_process, callback); 53 return; 54 } 55 56 callback.Run(gfx::GpuMemoryBufferHandle()); 57} 58 59// static 60void GpuMemoryBufferImpl::DeletedByChildProcess( 61 gfx::GpuMemoryBufferType type, 62 const gfx::GpuMemoryBufferId& id, 63 base::ProcessHandle child_process) { 64} 65 66// static 67scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 68 const gfx::GpuMemoryBufferHandle& handle, 69 const gfx::Size& size, 70 unsigned internalformat, 71 const DestructionCallback& callback) { 72 switch (handle.type) { 73 case gfx::SHARED_MEMORY_BUFFER: 74 return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 75 handle, size, internalformat, callback); 76 case gfx::OZONE_NATIVE_BUFFER: 77 return GpuMemoryBufferImplOzoneNativeBuffer::CreateFromHandle( 78 handle, size, internalformat, callback); 79 default: 80 return scoped_ptr<GpuMemoryBufferImpl>(); 81 } 82} 83 84} // namespace content 85