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: 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,
119 int child_client_id) {
114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 120 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
115 121
116 GpuMemoryBufferImpl::DeletedByChildProcess(type, id, child_process_handle); 122 GpuMemoryBufferImpl::DeletedByChildProcess(
123 type, id, child_process_handle, child_client_id);
117 } 124 }
118 125
119 void BrowserGpuMemoryBufferManager::ProcessRemoved( 126 void BrowserGpuMemoryBufferManager::ProcessRemoved(
120 base::ProcessHandle process_handle) { 127 base::ProcessHandle process_handle) {
121 // TODO(reveman): Handle child process removal correctly. 128 // TODO(reveman): Handle child process removal correctly.
122 } 129 }
123 130
124 // static 131 // static
125 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferOnIO( 132 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferOnIO(
126 AllocateGpuMemoryBufferRequest* request) { 133 AllocateGpuMemoryBufferRequest* request) {
127 GpuMemoryBufferImpl::Create( 134 GpuMemoryBufferImpl::Create(
135 g_next_gpu_memory_buffer_id.GetNext(),
128 request->size, 136 request->size,
129 request->format, 137 request->format,
130 request->usage, 138 request->usage,
131 request->client_id, 139 request->client_id,
132 base::Bind(&BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO, 140 base::Bind(&BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO,
133 base::Unretained(request))); 141 base::Unretained(request)));
134 } 142 }
135 143
136 // static 144 // static
137 void BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO( 145 void BrowserGpuMemoryBufferManager::GpuMemoryBufferCreatedOnIO(
138 AllocateGpuMemoryBufferRequest* request, 146 AllocateGpuMemoryBufferRequest* request,
139 scoped_ptr<GpuMemoryBufferImpl> buffer) { 147 scoped_ptr<GpuMemoryBufferImpl> buffer) {
140 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
141 149
142 request->result = buffer.Pass(); 150 request->result = buffer.Pass();
143 request->event.Signal(); 151 request->event.Signal();
144 } 152 }
145 153
146 } // namespace content 154 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698