OLD | NEW |
| (Empty) |
1 // Copyright 2016 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 "services/ui/ws/mus_gpu_memory_buffer_manager.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "gpu/ipc/client/gpu_memory_buffer_impl.h" | |
9 #include "gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.h" | |
10 #include "gpu/ipc/common/gpu_memory_buffer_support.h" | |
11 #include "services/ui/common/generic_shared_memory_id_generator.h" | |
12 #include "services/ui/gpu/interfaces/gpu_service_internal.mojom.h" | |
13 | |
14 namespace ui { | |
15 | |
16 namespace ws { | |
17 | |
18 MusGpuMemoryBufferManager::MusGpuMemoryBufferManager( | |
19 mojom::GpuServiceInternal* gpu_service, | |
20 int client_id) | |
21 : gpu_service_(gpu_service), client_id_(client_id), weak_factory_(this) {} | |
22 | |
23 MusGpuMemoryBufferManager::~MusGpuMemoryBufferManager() {} | |
24 | |
25 std::unique_ptr<gfx::GpuMemoryBuffer> | |
26 MusGpuMemoryBufferManager::AllocateGpuMemoryBuffer( | |
27 const gfx::Size& size, | |
28 gfx::BufferFormat format, | |
29 gfx::BufferUsage usage, | |
30 gpu::SurfaceHandle surface_handle) { | |
31 gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId(); | |
32 const bool is_native = | |
33 gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage); | |
34 if (is_native) { | |
35 gfx::GpuMemoryBufferHandle handle; | |
36 gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, client_id_, | |
37 surface_handle, &handle); | |
38 if (handle.is_null()) | |
39 return nullptr; | |
40 return gpu::GpuMemoryBufferImpl::CreateFromHandle( | |
41 handle, size, format, usage, | |
42 base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer, | |
43 weak_factory_.GetWeakPtr(), id, client_id_, is_native)); | |
44 } | |
45 | |
46 DCHECK(gpu::GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage)) | |
47 << static_cast<int>(usage); | |
48 return gpu::GpuMemoryBufferImplSharedMemory::Create( | |
49 id, size, format, | |
50 base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer, | |
51 weak_factory_.GetWeakPtr(), id, client_id_, is_native)); | |
52 } | |
53 | |
54 std::unique_ptr<gfx::GpuMemoryBuffer> | |
55 MusGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle( | |
56 const gfx::GpuMemoryBufferHandle& handle, | |
57 const gfx::Size& size, | |
58 gfx::BufferFormat format) { | |
59 NOTIMPLEMENTED(); | |
60 return nullptr; | |
61 } | |
62 | |
63 void MusGpuMemoryBufferManager::SetDestructionSyncToken( | |
64 gfx::GpuMemoryBuffer* buffer, | |
65 const gpu::SyncToken& sync_token) { | |
66 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( | |
67 sync_token); | |
68 } | |
69 | |
70 void MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer( | |
71 gfx::GpuMemoryBufferId id, | |
72 int client_id, | |
73 bool is_native, | |
74 const gpu::SyncToken& sync_token) { | |
75 if (is_native) { | |
76 gpu_service_->DestroyGpuMemoryBuffer(id, client_id, sync_token); | |
77 } | |
78 } | |
79 | |
80 } // namespace ws | |
81 } // namespace ui | |
OLD | NEW |