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

Side by Side Diff: content/browser/gpu/browser_gpu_memory_buffer_manager.cc

Issue 685983005: gpu: Associate all GpuMemoryBuffers with unique IDs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: one more ozone build fix Created 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/gpu/browser_gpu_memory_buffer_manager.h" 5 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
6 6
7 #include "base/atomic_sequence_num.h"
7 #include "base/bind.h" 8 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
9 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
10 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
11 #include "base/threading/thread_restrictions.h" 12 #include "base/threading/thread_restrictions.h"
12 #include "content/common/gpu/client/gpu_memory_buffer_impl.h" 13 #include "content/common/gpu/client/gpu_memory_buffer_impl.h"
13 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
14 15
15 namespace content { 16 namespace content {
16 namespace { 17 namespace {
17 18
18 void GpuMemoryBufferAllocatedForChildProcess( 19 void GpuMemoryBufferAllocatedForChildProcess(
19 const BrowserGpuMemoryBufferManager::AllocationCallback& callback, 20 const BrowserGpuMemoryBufferManager::AllocationCallback& callback,
20 const gfx::GpuMemoryBufferHandle& handle) { 21 const gfx::GpuMemoryBufferHandle& handle) {
21 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 22 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
22 23
23 callback.Run(handle); 24 callback.Run(handle);
24 } 25 }
25 26
26 BrowserGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr; 27 BrowserGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr;
27 28
29 // Global atomic to generate gpu memory buffer unique IDs.
30 base::StaticAtomicSequenceNumber g_next_gpu_memory_buffer_id;
31
28 } // namespace 32 } // namespace
29 33
30 struct BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferRequest { 34 struct BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferRequest {
31 AllocateGpuMemoryBufferRequest(const gfx::Size& size, 35 AllocateGpuMemoryBufferRequest(const gfx::Size& size,
32 gfx::GpuMemoryBuffer::Format format, 36 gfx::GpuMemoryBuffer::Format format,
33 gfx::GpuMemoryBuffer::Usage usage, 37 gfx::GpuMemoryBuffer::Usage usage,
34 int client_id) 38 int client_id)
35 : event(true, false), 39 : event(true, false),
36 size(size), 40 size(size),
37 format(format), 41 format(format),
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess( 90 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess(
87 const gfx::Size& size, 91 const gfx::Size& size,
88 gfx::GpuMemoryBuffer::Format format, 92 gfx::GpuMemoryBuffer::Format format,
89 gfx::GpuMemoryBuffer::Usage usage, 93 gfx::GpuMemoryBuffer::Usage usage,
90 base::ProcessHandle child_process_handle, 94 base::ProcessHandle child_process_handle,
91 int child_client_id, 95 int child_client_id,
92 const AllocationCallback& callback) { 96 const AllocationCallback& callback) {
93 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
94 98
95 GpuMemoryBufferImpl::AllocateForChildProcess( 99 GpuMemoryBufferImpl::AllocateForChildProcess(
100 g_next_gpu_memory_buffer_id.GetNext(),
96 size, 101 size,
97 format, 102 format,
98 usage, 103 usage,
99 child_process_handle, 104 child_process_handle,
100 child_client_id, 105 child_client_id,
101 base::Bind(&GpuMemoryBufferAllocatedForChildProcess, callback)); 106 base::Bind(&GpuMemoryBufferAllocatedForChildProcess, callback));
102 } 107 }
103 108
104 gfx::GpuMemoryBuffer* 109 gfx::GpuMemoryBuffer*
105 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( 110 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
106 ClientBuffer buffer) { 111 ClientBuffer buffer) {
107 return GpuMemoryBufferImpl::FromClientBuffer(buffer); 112 return GpuMemoryBufferImpl::FromClientBuffer(buffer);
108 } 113 }
109 114
110 void BrowserGpuMemoryBufferManager::ChildProcessDeletedGpuMemoryBuffer( 115 void BrowserGpuMemoryBufferManager::ChildProcessDeletedGpuMemoryBuffer(
111 gfx::GpuMemoryBufferType type, 116 gfx::GpuMemoryBufferType type,
112 const gfx::GpuMemoryBufferId& id, 117 gfx::GpuMemoryBufferId id,
113 base::ProcessHandle child_process_handle, 118 base::ProcessHandle child_process_handle,
114 int child_client_id, 119 int child_client_id,
115 uint32 sync_point) { 120 uint32 sync_point) {
116 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 121 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
117 122
118 GpuMemoryBufferImpl::DeletedByChildProcess( 123 GpuMemoryBufferImpl::DeletedByChildProcess(
119 type, id, child_process_handle, child_client_id, sync_point); 124 type, id, child_process_handle, child_client_id, sync_point);
120 } 125 }
121 126
122 void BrowserGpuMemoryBufferManager::ProcessRemoved( 127 void BrowserGpuMemoryBufferManager::ProcessRemoved(
123 base::ProcessHandle process_handle) { 128 base::ProcessHandle process_handle) {
124 // TODO(reveman): Handle child process removal correctly. 129 // TODO(reveman): Handle child process removal correctly.
125 } 130 }
126 131
127 // static 132 // static
128 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferOnIO( 133 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferOnIO(
129 AllocateGpuMemoryBufferRequest* request) { 134 AllocateGpuMemoryBufferRequest* request) {
130 GpuMemoryBufferImpl::Create( 135 GpuMemoryBufferImpl::Create(
136 g_next_gpu_memory_buffer_id.GetNext(),
131 request->size, 137 request->size,
132 request->format, 138 request->format,
133 request->usage, 139 request->usage,
134 request->client_id, 140 request->client_id,
135 base::Bind(&BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO, 141 base::Bind(&BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO,
136 base::Unretained(request))); 142 base::Unretained(request)));
137 } 143 }
138 144
139 // static 145 // static
140 void BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO( 146 void BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO(
141 AllocateGpuMemoryBufferRequest* request, 147 AllocateGpuMemoryBufferRequest* request,
142 scoped_ptr<GpuMemoryBufferImpl> buffer) { 148 scoped_ptr<GpuMemoryBufferImpl> buffer) {
143 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
144 150
145 request->result = buffer.Pass(); 151 request->result = buffer.Pass();
146 request->event.Signal(); 152 request->event.Signal();
147 } 153 }
148 154
149 void BrowserGpuMemoryBufferManager::SetDestructionSyncPoint( 155 void BrowserGpuMemoryBufferManager::SetDestructionSyncPoint(
150 gfx::GpuMemoryBuffer* buffer, 156 gfx::GpuMemoryBuffer* buffer,
151 uint32 sync_point) { 157 uint32 sync_point) {
152 static_cast<GpuMemoryBufferImpl*>(buffer) 158 static_cast<GpuMemoryBufferImpl*>(buffer)
153 ->set_destruction_sync_point(sync_point); 159 ->set_destruction_sync_point(sync_point);
154 } 160 }
155 161
156 } // namespace content 162 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | content/browser/gpu/gpu_memory_buffer_factory_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698