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

Side by Side Diff: services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc

Issue 2448983003: gpu: Refactor memory buffer handling code out of content.
Patch Set: . Created 4 years, 1 month 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h" 5 #include "services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/synchronization/waitable_event.h"
9 #include "gpu/ipc/client/gpu_memory_buffer_impl.h"
10 #include "mojo/public/cpp/bindings/sync_call_restrictions.h"
11 #include "services/service_manager/public/cpp/connector.h"
12 #include "services/ui/common/generic_shared_memory_id_generator.h"
8 #include "services/ui/public/cpp/mojo_gpu_memory_buffer.h" 13 #include "services/ui/public/cpp/mojo_gpu_memory_buffer.h"
9 14
10 namespace ui { 15 namespace ui {
11 16
12 MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager() {} 17 namespace {
18
19 #if 1 // !defined(OS_WIN)
20 void DeletedGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
21 const gpu::SyncToken& sync_token) {
22 NOTIMPLEMENTED();
23 }
24 #endif // !defined(OS_WIN)
25
26 } // namespace
27
28 MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager(
29 mojom::GpuService* gpu_service)
30 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
31 gpu_service_(gpu_service) {}
13 32
14 MojoGpuMemoryBufferManager::~MojoGpuMemoryBufferManager() {} 33 MojoGpuMemoryBufferManager::~MojoGpuMemoryBufferManager() {}
15 34
16 std::unique_ptr<gfx::GpuMemoryBuffer> 35 std::unique_ptr<gfx::GpuMemoryBuffer>
17 MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer( 36 MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
18 const gfx::Size& size, 37 const gfx::Size& size,
19 gfx::BufferFormat format, 38 gfx::BufferFormat format,
20 gfx::BufferUsage usage, 39 gfx::BufferUsage usage,
21 gpu::SurfaceHandle surface_handle) { 40 gpu::SurfaceHandle surface_handle) {
41 #if defined(OS_WIN)
42 // TODO(sad): Because the host needs a valid base::ProcessHandle to this
43 // client.
22 return MojoGpuMemoryBufferImpl::Create(size, format, usage); 44 return MojoGpuMemoryBufferImpl::Create(size, format, usage);
45 #else
46 #if 1
47 DCHECK(!main_task_runner_->BelongsToCurrentThread());
48 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
49 base::WaitableEvent::InitialState::NOT_SIGNALED);
50 gfx::GpuMemoryBufferHandle handle;
51 gfx::GpuMemoryBufferId id = GetNextGenericSharedMemoryId();
52 main_task_runner_->PostTask(
53 FROM_HERE,
54 base::Bind(&MojoGpuMemoryBufferManager::AllocateGpuMemoryBufferOnMain,
55 base::Unretained(this), id, size, format, usage, &handle,
56 &event));
57 event.Wait();
58 std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer =
59 handle.is_null() ? nullptr
60 : gpu::GpuMemoryBufferImpl::CreateFromHandle(
61 handle, size, format, usage,
62 base::Bind(&DeletedGpuMemoryBuffer, handle.id));
63 if (buffer)
64 return buffer;
65 // XXX: This needs to happen in the main thread.
66 // gpu_service_->DestroyGpuMemoryBuffer(id, gpu::SyncToken());
67 #endif
68 return MojoGpuMemoryBufferImpl::Create(size, format, usage);
69 #endif
70 }
71
72 void MojoGpuMemoryBufferManager::AllocateGpuMemoryBufferOnMain(
73 gfx::GpuMemoryBufferId id,
74 const gfx::Size& size,
75 gfx::BufferFormat format,
76 gfx::BufferUsage usage,
77 gfx::GpuMemoryBufferHandle* handle,
78 base::WaitableEvent* event) {
79 EnsureGpuServiceConnection();
80 mojo::SyncCallRestrictions::ScopedAllowSyncCall allow_sync_call;
81 gpu_service_->CreateGpuMemoryBuffer(id, size, format, usage, handle);
82 event->Signal();
23 } 83 }
24 84
25 std::unique_ptr<gfx::GpuMemoryBuffer> 85 std::unique_ptr<gfx::GpuMemoryBuffer>
26 MojoGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle( 86 MojoGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
27 const gfx::GpuMemoryBufferHandle& handle, 87 const gfx::GpuMemoryBufferHandle& handle,
28 const gfx::Size& size, 88 const gfx::Size& size,
29 gfx::BufferFormat format) { 89 gfx::BufferFormat format) {
30 const gfx::BufferUsage usage = gfx::BufferUsage::GPU_READ; 90 const gfx::BufferUsage usage = gfx::BufferUsage::GPU_READ;
31 return MojoGpuMemoryBufferImpl::CreateFromHandle(handle, size, format, usage); 91 return MojoGpuMemoryBufferImpl::CreateFromHandle(handle, size, format, usage);
32 } 92 }
33 93
34 gfx::GpuMemoryBuffer* 94 gfx::GpuMemoryBuffer*
35 MojoGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( 95 MojoGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
36 ClientBuffer buffer) { 96 ClientBuffer buffer) {
37 return MojoGpuMemoryBufferImpl::FromClientBuffer(buffer); 97 return MojoGpuMemoryBufferImpl::FromClientBuffer(buffer);
38 } 98 }
39 99
40 void MojoGpuMemoryBufferManager::SetDestructionSyncToken( 100 void MojoGpuMemoryBufferManager::SetDestructionSyncToken(
41 gfx::GpuMemoryBuffer* buffer, 101 gfx::GpuMemoryBuffer* buffer,
42 const gpu::SyncToken& sync_token) { 102 const gpu::SyncToken& sync_token) {
43 NOTIMPLEMENTED(); 103 NOTIMPLEMENTED();
44 } 104 }
45 105
106 void MojoGpuMemoryBufferManager::EnsureGpuServiceConnection() {
107 #if 0
108 CHECK(base::ThreadTaskRunnerHandle::Get());
109 if (gpu_service_ && !gpu_service_.encountered_error())
110 return;
111 connector_->ConnectToInterface("service:ui", &gpu_service_);
112 #endif
113 }
114
46 } // namespace ui 115 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/public/cpp/mojo_gpu_memory_buffer_manager.h ('k') | services/ui/public/interfaces/gpu_service.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698