OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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. |
| 4 |
| 5 #include "ash/surfaces/surface_controller.h" |
| 6 |
| 7 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" |
| 8 #include "ui/aura/env.h" |
| 9 #include "ui/compositor/compositor.h" |
| 10 |
| 11 namespace ash { |
| 12 |
| 13 SurfaceController::SurfaceController() |
| 14 : next_buffer_(1), test_surface_buffer_(0) {} |
| 15 |
| 16 SurfaceController::~SurfaceController() {} |
| 17 |
| 18 void SurfaceController::AddObserver(Observer* observer) { |
| 19 observers_.AddObserver(observer); |
| 20 } |
| 21 |
| 22 void SurfaceController::RemoveObserver(Observer* observer) { |
| 23 observers_.RemoveObserver(observer); |
| 24 } |
| 25 |
| 26 void SurfaceController::CreateGraphicsBufferFromGpuMemoryBufferHandle( |
| 27 const gfx::GpuMemoryBufferHandle& handle, |
| 28 const gfx::Size& size, |
| 29 gfx::BufferFormat format, |
| 30 const GraphicsBufferCreatedCallback& callback) { |
| 31 int32 new_buffer = next_buffer_++; |
| 32 |
| 33 // TODO(reveman): Expose GpuMemoryBufferManager's asynchronous API. |
| 34 scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer = |
| 35 aura::Env::GetInstance() |
| 36 ->context_factory() |
| 37 ->GetGpuMemoryBufferManager() |
| 38 ->CreateGpuMemoryBufferFromHandle(handle, size, format); |
| 39 if (!gpu_memory_buffer) { |
| 40 callback.Run(0); |
| 41 return; |
| 42 } |
| 43 |
| 44 DCHECK(gpu_memory_buffers_.find(new_buffer) == gpu_memory_buffers_.end()); |
| 45 gpu_memory_buffers_.set(new_buffer, gpu_memory_buffer.Pass()); |
| 46 |
| 47 callback.Run(new_buffer); |
| 48 } |
| 49 |
| 50 void SurfaceController::DestroyGraphicsBuffer(int32 buffer) { |
| 51 DCHECK(gpu_memory_buffers_.find(buffer) != gpu_memory_buffers_.end()); |
| 52 gpu_memory_buffers_.erase(buffer); |
| 53 } |
| 54 |
| 55 void SurfaceController::SetTestSurfaceContents(int32 buffer) { |
| 56 test_surface_buffer_ = buffer; |
| 57 FOR_EACH_OBSERVER(Observer, observers_, |
| 58 OnTestSurfaceGpuMemoryBufferChanged()); |
| 59 } |
| 60 |
| 61 gfx::GpuMemoryBuffer* SurfaceController::GetTestSurfaceGpuMemoryBuffer() const { |
| 62 return gpu_memory_buffers_.get(test_surface_buffer_); |
| 63 } |
| 64 |
| 65 } // namespace ash |
OLD | NEW |