Index: gpu/command_buffer/service/gpu_control_service.cc |
diff --git a/gpu/command_buffer/service/gpu_control_service.cc b/gpu/command_buffer/service/gpu_control_service.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3b83b86ff377606d1e926f5c27e0622c8ce323e3 |
--- /dev/null |
+++ b/gpu/command_buffer/service/gpu_control_service.cc |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2013 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 "gpu/command_buffer/service/gpu_control_service.h" |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h" |
+#include "gpu/command_buffer/service/gpu_memory_buffer_manager.h" |
+ |
+namespace gpu { |
+ |
+GpuControlService::GpuControlService( |
+ GpuMemoryBufferManagerInterface* gpu_memory_buffer_manager, |
+ GpuMemoryBufferFactory* gpu_memory_buffer_factory) |
+ : gpu_memory_buffer_manager_(gpu_memory_buffer_manager), |
+ gpu_memory_buffer_factory_(gpu_memory_buffer_factory) { |
+} |
+ |
+GpuControlService::~GpuControlService() { |
+} |
+ |
+gfx::GpuMemoryBuffer* GpuControlService::CreateGpuMemoryBuffer( |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat, |
+ int32* id) { |
+ *id = -1; |
+ |
+ CHECK(gpu_memory_buffer_factory_) << "No GPU memory buffer factory provided"; |
+ scoped_ptr<gfx::GpuMemoryBuffer> buffer = make_scoped_ptr( |
piman
2013/08/13 00:38:24
nit: if you make this a linked_ptr from the start,
reveman
2013/08/13 01:48:26
Done.
|
+ gpu_memory_buffer_factory_->CreateGpuMemoryBuffer(width, |
+ height, |
+ internalformat)); |
+ if (!buffer) |
+ return NULL; |
+ |
+ static int32 next_id = 1; |
+ *id = next_id++; |
+ |
+ if (!RegisterGpuMemoryBuffer(*id, |
+ buffer->GetHandle(), |
+ width, |
+ height, |
+ internalformat)) { |
+ *id = -1; |
+ return NULL; |
+ } |
+ |
+ gpu_memory_buffers_[*id].reset(buffer.get()); |
+ return buffer.release(); |
+} |
+ |
+void GpuControlService::DestroyGpuMemoryBuffer(int32 id) { |
+ GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id); |
+ if (it != gpu_memory_buffers_.end()) |
+ gpu_memory_buffers_.erase(it); |
+ |
+ gpu_memory_buffer_manager_->DestroyGpuMemoryBuffer(id); |
+} |
+ |
+bool GpuControlService::RegisterGpuMemoryBuffer( |
+ int32 id, |
+ gfx::GpuMemoryBufferHandle buffer, |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat) { |
+ return gpu_memory_buffer_manager_->RegisterGpuMemoryBuffer(id, |
+ buffer, |
+ width, |
+ height, |
+ internalformat); |
+} |
+ |
+} // namespace gpu |