Chromium Code Reviews| Index: components/viz/service/display_compositor/in_process_gpu_memory_buffer_manager.cc |
| diff --git a/components/viz/service/display_compositor/in_process_gpu_memory_buffer_manager.cc b/components/viz/service/display_compositor/in_process_gpu_memory_buffer_manager.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cfea553e5728a01a6805d89e3f19891667249407 |
| --- /dev/null |
| +++ b/components/viz/service/display_compositor/in_process_gpu_memory_buffer_manager.cc |
| @@ -0,0 +1,51 @@ |
| +// Copyright 2017 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 "components/viz/service/display_compositor/in_process_gpu_memory_buffer_manager.h" |
| + |
| +#include "gpu/ipc/client/gpu_memory_buffer_impl.h" |
| +#include "gpu/ipc/service/gpu_channel_manager.h" |
| +#include "gpu/ipc/service/gpu_memory_buffer_factory.h" |
|
danakj
2017/06/20 14:59:50
tbh i don't see this type anywhere in this file, i
sadrul
2017/06/21 05:57:46
This is needed (in line ~35:37).
|
| + |
| +namespace viz { |
| + |
| +InProcessGpuMemoryBufferManager::InProcessGpuMemoryBufferManager( |
| + gpu::GpuChannelManager* channel_manager) |
| + : client_id_(1), channel_manager_(channel_manager), weak_factory_(this) { |
| + weak_ptr_ = weak_factory_.GetWeakPtr(); |
| +} |
| + |
| +InProcessGpuMemoryBufferManager::~InProcessGpuMemoryBufferManager() {} |
| + |
| +void InProcessGpuMemoryBufferManager::DestroyGpuMemoryBuffer( |
| + gfx::GpuMemoryBufferId id, |
| + int client_id, |
| + const gpu::SyncToken& sync_token) { |
| + channel_manager_->DestroyGpuMemoryBuffer(id, client_id, sync_token); |
| +} |
| + |
| +std::unique_ptr<gfx::GpuMemoryBuffer> |
| +InProcessGpuMemoryBufferManager::CreateGpuMemoryBuffer( |
| + const gfx::Size& size, |
| + gfx::BufferFormat format, |
| + gfx::BufferUsage usage, |
| + gpu::SurfaceHandle surface_handle) { |
| + gfx::GpuMemoryBufferId id(next_gpu_memory_id_++); |
| + gfx::GpuMemoryBufferHandle buffer_handle = |
| + channel_manager_->gpu_memory_buffer_factory()->CreateGpuMemoryBuffer( |
| + id, size, format, usage, client_id_, surface_handle); |
| + return gpu::GpuMemoryBufferImpl::CreateFromHandle( |
| + buffer_handle, size, format, usage, |
| + base::Bind(&InProcessGpuMemoryBufferManager::DestroyGpuMemoryBuffer, |
| + weak_ptr_, id, client_id_)); |
| +} |
| + |
| +void InProcessGpuMemoryBufferManager::SetDestructionSyncToken( |
| + gfx::GpuMemoryBuffer* buffer, |
| + const gpu::SyncToken& sync_token) { |
| + static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( |
| + sync_token); |
| +} |
| + |
| +} // namespace viz |