1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl.h" 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl_io_surface.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace content { 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GpuMemoryBufferImpl::Create(const gfx::Size& size, 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned usage, 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int client_id, 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const CreationCallback& callback) { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat, 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci usage)) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplIOSurface::Create( 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, client_id, callback); 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::Create( 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, callback); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GpuMemoryBufferImpl::AllocateForChildProcess( 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage, 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ProcessHandle child_process, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int child_client_id, 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const AllocationCallback& callback) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci usage)) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplIOSurface::AllocateForChildProcess( 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, child_client_id, callback); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size, internalformat, child_process, callback); 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(gfx::GpuMemoryBufferHandle()); 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void GpuMemoryBufferImpl::DeletedByChildProcess( 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::GpuMemoryBufferType type, 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferId& id, 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ProcessHandle child_process) { 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DestructionCallback& callback) { 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (handle.type) { 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::SHARED_MEMORY_BUFFER: 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::IO_SURFACE_BUFFER: 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplIOSurface::CreateFromHandle( 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<GpuMemoryBufferImpl>(); 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace content 86