Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: components/mus/gpu/mus_gpu_memory_buffer_manager.cc

Issue 2049083002: Implement MusGpuMemoryBufferManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 "components/mus/gpu/mus_gpu_memory_buffer_manager.h"
6
7 #include "base/logging.h"
8 #include "components/mus/common/generic_shared_memory_id_generator.h"
9 #include "components/mus/gpu/gpu_service_mus.h"
10 #include "gpu/ipc/client/gpu_memory_buffer_impl.h"
11 #include "gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.h"
12 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
13 #include "gpu/ipc/service/gpu_memory_buffer_factory.h"
14
15 namespace mus {
16
17 namespace {
18
19 MusGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr;
20
21 bool IsNativeGpuMemoryBufferFactoryConfigurationSupported(
22 gfx::BufferFormat format,
23 gfx::BufferUsage usage) {
24 switch (gpu::GetNativeGpuMemoryBufferType()) {
25 case gfx::SHARED_MEMORY_BUFFER:
26 return false;
27 case gfx::IO_SURFACE_BUFFER:
28 case gfx::SURFACE_TEXTURE_BUFFER:
29 case gfx::OZONE_NATIVE_PIXMAP:
30 return gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage);
31 default:
32 NOTREACHED();
33 return false;
34 }
35 }
36 }
37
38 MusGpuMemoryBufferManager* MusGpuMemoryBufferManager::current() {
39 return g_gpu_memory_buffer_manager;
40 }
41
42 MusGpuMemoryBufferManager::MusGpuMemoryBufferManager(GpuServiceMus* gpu_service,
43 int client_id)
44 : gpu_service_(gpu_service), client_id_(client_id), weak_factory_(this) {
45 DCHECK(!g_gpu_memory_buffer_manager);
46 g_gpu_memory_buffer_manager = this;
47 }
48
49 MusGpuMemoryBufferManager::~MusGpuMemoryBufferManager() {
50 g_gpu_memory_buffer_manager = nullptr;
51 }
52
53 std::unique_ptr<gfx::GpuMemoryBuffer>
54 MusGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
55 const gfx::Size& size,
56 gfx::BufferFormat format,
57 gfx::BufferUsage usage,
58 gpu::SurfaceHandle surface_handle) {
59 gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId();
60 const bool is_native =
61 IsNativeGpuMemoryBufferFactoryConfigurationSupported(format, usage);
62 if (is_native) {
63 gpu::GpuMemoryBufferFactory* factory =
64 gpu_service_->gpu_memory_buffer_factory();
65 gfx::GpuMemoryBufferHandle handle = factory->CreateGpuMemoryBuffer(
66 id, size, format, usage, client_id_, surface_handle);
67 if (handle.is_null())
68 return nullptr;
69 return gpu::GpuMemoryBufferImpl::CreateFromHandle(
70 handle, size, format, usage,
71 base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer,
72 weak_factory_.GetWeakPtr(), id, client_id_, is_native));
73 }
74
75 DCHECK(gpu::GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage))
76 << static_cast<int>(usage);
77 return gpu::GpuMemoryBufferImplSharedMemory::Create(
78 id, size, format,
79 base::Bind(&MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer,
80 weak_factory_.GetWeakPtr(), id, client_id_, is_native));
81 }
82
83 std::unique_ptr<gfx::GpuMemoryBuffer>
84 MusGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
85 const gfx::GpuMemoryBufferHandle& handle,
86 const gfx::Size& size,
87 gfx::BufferFormat format) {
88 NOTIMPLEMENTED();
89 return nullptr;
90 }
91
92 std::unique_ptr<gfx::GpuMemoryBuffer>
93 MusGpuMemoryBufferManager::CreateGpuMemoryBufferFromClientId(
94 int client_id,
95 const gfx::GpuMemoryBufferId& gpu_memory_buffer_id) {
96 NOTIMPLEMENTED();
97 return nullptr;
98 }
99
100 gfx::GpuMemoryBuffer*
101 MusGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
102 ClientBuffer buffer) {
103 return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer);
104 }
105
106 void MusGpuMemoryBufferManager::SetDestructionSyncToken(
107 gfx::GpuMemoryBuffer* buffer,
108 const gpu::SyncToken& sync_token) {
109 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
110 sync_token);
111 }
112
113 void MusGpuMemoryBufferManager::DestroyGpuMemoryBuffer(
114 gfx::GpuMemoryBufferId id,
115 int client_id,
116 bool is_native,
117 const gpu::SyncToken& sync_token) {
118 if (is_native) {
119 gpu::GpuChannelManager* manager =
120 GpuServiceMus::GetInstance()->gpu_channel_manager();
piman 2016/06/09 20:47:55 nit: here too :)
Peng 2016/06/09 21:01:37 Done.
121 manager->DestroyGpuMemoryBuffer(id, client_id, sync_token);
122 }
123 }
124
125 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/gpu/mus_gpu_memory_buffer_manager.h ('k') | components/mus/surfaces/direct_output_surface_ozone.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698