| 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
|
|
|