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) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h" 84ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.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) { 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::Create( 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, callback); 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GpuMemoryBufferImpl::AllocateForChildProcess( 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage, 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ProcessHandle child_process, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int child_client_id, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const AllocationCallback& callback) { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size, internalformat, child_process, callback); 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(gfx::GpuMemoryBufferHandle()); 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void GpuMemoryBufferImpl::DeletedByChildProcess( 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::GpuMemoryBufferType type, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferId& id, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ProcessHandle child_process) { 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DestructionCallback& callback) { 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (handle.type) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::SHARED_MEMORY_BUFFER: 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::SURFACE_TEXTURE_BUFFER: 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplSurfaceTexture::CreateFromHandle( 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<GpuMemoryBufferImpl>(); 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace content 72