// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/child/child_gpu_memory_buffer_manager.h" #include "content/common/child_process_messages.h" #include "content/common/generic_shared_memory_id_generator.h" #include "content/common/gpu/client/gpu_memory_buffer_impl.h" namespace content { namespace { void DeletedGpuMemoryBuffer(ThreadSafeSender* sender, gfx::GpuMemoryBufferId id, uint32 sync_point) { TRACE_EVENT0("renderer", "ChildGpuMemoryBufferManager::DeletedGpuMemoryBuffer"); sender->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(id, sync_point)); } } // namespace ChildGpuMemoryBufferManager::ChildGpuMemoryBufferManager( ThreadSafeSender* sender) : sender_(sender) { } ChildGpuMemoryBufferManager::~ChildGpuMemoryBufferManager() { } scoped_ptr ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer(const gfx::Size& size, gfx::BufferFormat format, gfx::BufferUsage usage) { TRACE_EVENT2("renderer", "ChildGpuMemoryBufferManager::AllocateGpuMemoryBuffer", "width", size.width(), "height", size.height()); gfx::GpuMemoryBufferHandle handle; IPC::Message* message = new ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer( content::GetNextGenericSharedMemoryId(), size.width(), size.height(), format, usage, &handle); bool success = sender_->Send(message); if (!success || handle.is_null()) return nullptr; scoped_ptr buffer(GpuMemoryBufferImpl::CreateFromHandle( handle, size, format, usage, base::Bind(&DeletedGpuMemoryBuffer, sender_, handle.id))); if (!buffer) { sender_->Send(new ChildProcessHostMsg_DeletedGpuMemoryBuffer(handle.id, 0)); return nullptr; } return buffer.Pass(); } gfx::GpuMemoryBuffer* ChildGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( ClientBuffer buffer) { return GpuMemoryBufferImpl::FromClientBuffer(buffer); } void ChildGpuMemoryBufferManager::SetDestructionSyncPoint( gfx::GpuMemoryBuffer* buffer, uint32 sync_point) { static_cast(buffer) ->set_destruction_sync_point(sync_point); } } // namespace content