103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl.h" 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_buffer.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace content { 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (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 (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported( 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci internalformat, usage)) { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplOzoneNativeBuffer::Create( 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, client_id, callback); 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size, internalformat, usage)) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::Create( 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, callback); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(scoped_ptr<GpuMemoryBufferImpl>()); 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// static 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void GpuMemoryBufferImpl::AllocateForChildProcess( 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Size& size, 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) unsigned internalformat, 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) unsigned usage, 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::ProcessHandle child_process, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int child_client_id, 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const AllocationCallback& callback) { 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (GpuMemoryBufferImplOzoneNativeBuffer::IsConfigurationSupported( 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) internalformat, usage)) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplOzoneNativeBuffer::AllocateForChildProcess( 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size, internalformat, usage, child_client_id, callback); 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported( 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size, internalformat, usage)) { 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size, internalformat, child_process, callback); 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) callback.Run(gfx::GpuMemoryBufferHandle()); 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// static 6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void GpuMemoryBufferImpl::DeletedByChildProcess( 6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::GpuMemoryBufferType type, 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::GpuMemoryBufferId& id, 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::ProcessHandle child_process) { 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// static 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle( 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::GpuMemoryBufferHandle& handle, 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Size& size, 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unsigned internalformat, 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DestructionCallback& callback) { 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) switch (handle.type) { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::SHARED_MEMORY_BUFFER: 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplSharedMemory::CreateFromHandle( 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case gfx::OZONE_NATIVE_BUFFER: 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return GpuMemoryBufferImplOzoneNativeBuffer::CreateFromHandle( 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handle, size, internalformat, callback); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) default: 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return scoped_ptr<GpuMemoryBufferImpl>(); 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace content 85