1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "gpu/command_buffer/service/gpu_control_service.h"
7 #include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
8 #include "gpu/command_buffer/service/gpu_memory_buffer_manager.h"
9 #include "gpu/command_buffer/service/mailbox_manager.h"
10 #include "gpu/command_buffer/service/query_manager.h"
14 GpuControlService::GpuControlService(
15 GpuMemoryBufferManagerInterface* gpu_memory_buffer_manager,
16 GpuMemoryBufferFactory* gpu_memory_buffer_factory,
17 gles2::MailboxManager* mailbox_manager,
18 gles2::QueryManager* query_manager)
19 : gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
20 gpu_memory_buffer_factory_(gpu_memory_buffer_factory),
21 mailbox_manager_(mailbox_manager),
22 query_manager_(query_manager) {
25 GpuControlService::~GpuControlService() {
28 bool GpuControlService::SupportsGpuMemoryBuffer() {
29 return gpu_memory_buffer_manager_ && gpu_memory_buffer_factory_;
32 gfx::GpuMemoryBuffer* GpuControlService::CreateGpuMemoryBuffer(
35 unsigned internalformat,
39 CHECK(gpu_memory_buffer_factory_) << "No GPU memory buffer factory provided";
40 linked_ptr<gfx::GpuMemoryBuffer> buffer = make_linked_ptr(
41 gpu_memory_buffer_factory_->CreateGpuMemoryBuffer(width,
47 static int32 next_id = 1;
50 if (!RegisterGpuMemoryBuffer(*id,
59 gpu_memory_buffers_[*id] = buffer;
63 void GpuControlService::DestroyGpuMemoryBuffer(int32 id) {
64 GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
65 if (it != gpu_memory_buffers_.end())
66 gpu_memory_buffers_.erase(it);
68 gpu_memory_buffer_manager_->DestroyGpuMemoryBuffer(id);
71 uint32 GpuControlService::InsertSyncPoint() {
76 void GpuControlService::SignalSyncPoint(uint32 sync_point,
77 const base::Closure& callback) {
81 void GpuControlService::SignalQuery(uint32 query_id,
82 const base::Closure& callback) {
83 DCHECK(query_manager_);
84 gles2::QueryManager::Query* query = query_manager_->GetQuery(query_id);
88 query->AddCallback(callback);
91 void GpuControlService::SendManagedMemoryStats(
92 const ManagedMemoryStats& stats) {
96 bool GpuControlService::RegisterGpuMemoryBuffer(
98 gfx::GpuMemoryBufferHandle buffer,
101 unsigned internalformat) {
102 return gpu_memory_buffer_manager_->RegisterGpuMemoryBuffer(id,
109 bool GpuControlService::GenerateMailboxNames(
110 unsigned num, std::vector<gpu::Mailbox>* names) {
111 DCHECK(names->empty());
113 for (unsigned i = 0; i < num; ++i) {
114 gles2::MailboxName name;
115 mailbox_manager_->GenerateMailboxName(&name);
116 (*names)[i].SetName(name.key);