Index: ash/surfaces/surface_controller.cc |
diff --git a/ash/surfaces/surface_controller.cc b/ash/surfaces/surface_controller.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..697a5bc0636a3cc4aa33ef9f2c55a577a5a7cf25 |
--- /dev/null |
+++ b/ash/surfaces/surface_controller.cc |
@@ -0,0 +1,65 @@ |
+// Copyright 2015 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 "ash/surfaces/surface_controller.h" |
+ |
+#include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
+#include "ui/aura/env.h" |
+#include "ui/compositor/compositor.h" |
+ |
+namespace ash { |
+ |
+SurfaceController::SurfaceController() |
+ : next_buffer_(1), test_surface_buffer_(0) {} |
+ |
+SurfaceController::~SurfaceController() {} |
+ |
+void SurfaceController::AddObserver(Observer* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void SurfaceController::RemoveObserver(Observer* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
+void SurfaceController::CreateGraphicsBufferFromGpuMemoryBufferHandle( |
+ const gfx::GpuMemoryBufferHandle& handle, |
+ const gfx::Size& size, |
+ gfx::BufferFormat format, |
+ const GraphicsBufferCreatedCallback& callback) { |
+ int32 new_buffer = next_buffer_++; |
+ |
+ // TODO(reveman): Expose GpuMemoryBufferManager's asynchronous API. |
+ scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer = |
+ aura::Env::GetInstance() |
+ ->context_factory() |
+ ->GetGpuMemoryBufferManager() |
+ ->CreateGpuMemoryBufferFromHandle(handle, size, format); |
+ if (!gpu_memory_buffer) { |
+ callback.Run(0); |
+ return; |
+ } |
+ |
+ DCHECK(gpu_memory_buffers_.find(new_buffer) == gpu_memory_buffers_.end()); |
+ gpu_memory_buffers_.set(new_buffer, gpu_memory_buffer.Pass()); |
+ |
+ callback.Run(new_buffer); |
+} |
+ |
+void SurfaceController::DestroyGraphicsBuffer(int32 buffer) { |
+ DCHECK(gpu_memory_buffers_.find(buffer) != gpu_memory_buffers_.end()); |
+ gpu_memory_buffers_.erase(buffer); |
+} |
+ |
+void SurfaceController::SetTestSurfaceContents(int32 buffer) { |
+ test_surface_buffer_ = buffer; |
+ FOR_EACH_OBSERVER(Observer, observers_, |
+ OnTestSurfaceGpuMemoryBufferChanged()); |
+} |
+ |
+gfx::GpuMemoryBuffer* SurfaceController::GetTestSurfaceGpuMemoryBuffer() const { |
+ return gpu_memory_buffers_.get(test_surface_buffer_); |
+} |
+ |
+} // namespace ash |