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" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace content { 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GpuMemoryBufferImpl::Create(const gfx::Size& size, 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned usage, 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int client_id, 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const CreationCallback& callback) { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::Create( 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, callback); 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void GpuMemoryBufferImpl::AllocateForChildProcess( 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage, 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ProcessHandle child_process, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int child_client_id, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const AllocationCallback& callback) { 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size, internalformat, usage)) { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) size, internalformat, child_process, callback); 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) callback.Run(gfx::GpuMemoryBufferHandle()); 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void GpuMemoryBufferImpl::DeletedByChildProcess( 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gfx::GpuMemoryBufferType type, 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferId& id, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::ProcessHandle child_process) { 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const gfx::Size& size, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DestructionCallback& callback) { 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) switch (handle.type) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::SHARED_MEMORY_BUFFER: 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) default: 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return scoped_ptr<GpuMemoryBufferImpl>(); 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace content 68