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

Side by Side Diff: content/browser/gpu/browser_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
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | gpu/ipc/client/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 ~CreateGpuMemoryBufferFromHandleRequest() {} 147 ~CreateGpuMemoryBufferFromHandleRequest() {}
148 gfx::GpuMemoryBufferHandle handle; 148 gfx::GpuMemoryBufferHandle handle;
149 }; 149 };
150 150
151 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( 151 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager(
152 int gpu_client_id, 152 int gpu_client_id,
153 uint64_t gpu_client_tracing_id) 153 uint64_t gpu_client_tracing_id)
154 : native_configurations_(GetNativeGpuMemoryBufferConfigurations()), 154 : native_configurations_(GetNativeGpuMemoryBufferConfigurations()),
155 gpu_client_id_(gpu_client_id), 155 gpu_client_id_(gpu_client_id),
156 gpu_client_tracing_id_(gpu_client_tracing_id), 156 gpu_client_tracing_id_(gpu_client_tracing_id),
157 gpu_memory_buffer_manager_(new gpu::GpuHostMemoryBufferManager()),
157 gpu_host_id_(0) { 158 gpu_host_id_(0) {
158 DCHECK(!g_gpu_memory_buffer_manager); 159 DCHECK(!g_gpu_memory_buffer_manager);
159 g_gpu_memory_buffer_manager = this; 160 g_gpu_memory_buffer_manager = this;
161 gpu_memory_buffer_manager_->SetIO(BrowserThread::GetTaskRunnerForThread(
162 BrowserThread::IO));
160 } 163 }
161 164
162 BrowserGpuMemoryBufferManager::~BrowserGpuMemoryBufferManager() { 165 BrowserGpuMemoryBufferManager::~BrowserGpuMemoryBufferManager() {
163 g_gpu_memory_buffer_manager = nullptr; 166 g_gpu_memory_buffer_manager = nullptr;
164 } 167 }
165 168
166 // static 169 // static
167 BrowserGpuMemoryBufferManager* BrowserGpuMemoryBufferManager::current() { 170 BrowserGpuMemoryBufferManager* BrowserGpuMemoryBufferManager::current() {
168 return g_gpu_memory_buffer_manager; 171 return g_gpu_memory_buffer_manager;
169 } 172 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 gfx::BufferUsage usage, 225 gfx::BufferUsage usage,
223 gpu::SurfaceHandle surface_handle) { 226 gpu::SurfaceHandle surface_handle) {
224 return AllocateGpuMemoryBufferForSurface(size, format, usage, surface_handle); 227 return AllocateGpuMemoryBufferForSurface(size, format, usage, surface_handle);
225 } 228 }
226 229
227 std::unique_ptr<gfx::GpuMemoryBuffer> 230 std::unique_ptr<gfx::GpuMemoryBuffer>
228 BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle( 231 BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
229 const gfx::GpuMemoryBufferHandle& handle, 232 const gfx::GpuMemoryBufferHandle& handle,
230 const gfx::Size& size, 233 const gfx::Size& size,
231 gfx::BufferFormat format) { 234 gfx::BufferFormat format) {
235 #if 0
232 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); 236 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
233 237
234 CreateGpuMemoryBufferFromHandleRequest request(handle, size, format, 238 CreateGpuMemoryBufferFromHandleRequest request(handle, size, format,
235 gpu_client_id_); 239 gpu_client_id_);
236 BrowserThread::PostTask( 240 BrowserThread::PostTask(
237 BrowserThread::IO, FROM_HERE, 241 BrowserThread::IO, FROM_HERE,
238 base::Bind(&BrowserGpuMemoryBufferManager:: 242 base::Bind(&BrowserGpuMemoryBufferManager::
239 HandleCreateGpuMemoryBufferFromHandleOnIO, 243 HandleCreateGpuMemoryBufferFromHandleOnIO,
240 base::Unretained(this), // Safe as we wait for result below. 244 base::Unretained(this), // Safe as we wait for result below.
241 base::Unretained(&request))); 245 base::Unretained(&request)));
242 246
243 // We're blocking the UI thread, which is generally undesirable. 247 // We're blocking the UI thread, which is generally undesirable.
244 TRACE_EVENT0( 248 TRACE_EVENT0(
245 "browser", 249 "browser",
246 "BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle"); 250 "BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle");
247 base::ThreadRestrictions::ScopedAllowWait allow_wait; 251 base::ThreadRestrictions::ScopedAllowWait allow_wait;
248 request.event.Wait(); 252 request.event.Wait();
249 return std::move(request.result); 253 return std::move(request.result);
254 #else
255 return gpu_memory_buffer_manager_->CreateGpuMemoryBufferFromHandle(handle,
256 size,
257 format);
258 #endif
250 } 259 }
251 260
252 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess( 261 void BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForChildProcess(
253 gfx::GpuMemoryBufferId id, 262 gfx::GpuMemoryBufferId id,
254 const gfx::Size& size, 263 const gfx::Size& size,
255 gfx::BufferFormat format, 264 gfx::BufferFormat format,
256 gfx::BufferUsage usage, 265 gfx::BufferUsage usage,
257 base::ProcessHandle child_process_handle, 266 base::ProcessHandle child_process_handle,
258 int child_client_id, 267 int child_client_id,
259 const AllocationCallback& callback) { 268 const AllocationCallback& callback) {
260 DCHECK_CURRENTLY_ON(BrowserThread::IO); 269 DCHECK_CURRENTLY_ON(BrowserThread::IO);
261 270
262 // Use service side allocation for native configurations. 271 // Use service side allocation for native configurations.
263 if (IsNativeGpuMemoryBufferConfiguration(format, usage)) { 272 if (IsNativeGpuMemoryBufferConfiguration(format, usage)) {
264 CreateGpuMemoryBufferOnIO( 273 CreateGpuMemoryBufferOnIO(
265 base::Bind(&HostCreateGpuMemoryBuffer, gpu::kNullSurfaceHandle), id, 274 base::Bind(&HostCreateGpuMemoryBuffer, gpu::kNullSurfaceHandle), id,
266 size, format, usage, child_client_id, false, callback); 275 size, format, usage, child_client_id, false, callback);
267 return; 276 return;
268 } 277 }
269 278
279 #if 0
270 // Early out if we cannot fallback to shared memory buffer. 280 // Early out if we cannot fallback to shared memory buffer.
271 if (!gpu::GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage) || 281 if (!gpu::GpuMemoryBufferImplSharedMemory::IsUsageSupported(usage) ||
272 !gpu::GpuMemoryBufferImplSharedMemory::IsSizeValidForFormat(size, 282 !gpu::GpuMemoryBufferImplSharedMemory::IsSizeValidForFormat(size,
273 format)) { 283 format)) {
274 callback.Run(gfx::GpuMemoryBufferHandle()); 284 callback.Run(gfx::GpuMemoryBufferHandle());
275 return; 285 return;
276 } 286 }
277 287
278 BufferMap& buffers = clients_[child_client_id]; 288 BufferMap& buffers = clients_[child_client_id];
279 289
280 // Allocate shared memory buffer as fallback. 290 // Allocate shared memory buffer as fallback.
281 auto insert_result = buffers.insert(std::make_pair( 291 auto insert_result = buffers.insert(std::make_pair(
282 id, BufferInfo(size, gfx::SHARED_MEMORY_BUFFER, format, usage, 0))); 292 id, BufferInfo(size, gfx::SHARED_MEMORY_BUFFER, format, usage, 0)));
283 if (!insert_result.second) { 293 if (!insert_result.second) {
284 DLOG(ERROR) << "Child process attempted to allocate a GpuMemoryBuffer with " 294 DLOG(ERROR) << "Child process attempted to allocate a GpuMemoryBuffer with "
285 "an existing ID."; 295 "an existing ID.";
286 callback.Run(gfx::GpuMemoryBufferHandle()); 296 callback.Run(gfx::GpuMemoryBufferHandle());
287 return; 297 return;
288 } 298 }
289 299
290 callback.Run(gpu::GpuMemoryBufferImplSharedMemory::AllocateForChildProcess( 300 callback.Run(gpu::GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
291 id, size, format, child_process_handle)); 301 id, size, format, child_process_handle));
302 #else
303 gpu_memory_buffer_manager_->AllocateGpuMemoryBufferForClient(id, size, format,
304 usage,
305 child_client_id,
306 callback);
307 #endif
292 } 308 }
293 309
294 gfx::GpuMemoryBuffer* 310 gfx::GpuMemoryBuffer*
295 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer( 311 BrowserGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
296 ClientBuffer buffer) { 312 ClientBuffer buffer) {
297 return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer); 313 return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer);
298 } 314 }
299 315
300 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken( 316 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken(
301 gfx::GpuMemoryBuffer* buffer, 317 gfx::GpuMemoryBuffer* buffer,
302 const gpu::SyncToken& sync_token) { 318 const gpu::SyncToken& sync_token) {
303 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( 319 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
304 sync_token); 320 sync_token);
305 } 321 }
306 322
307 bool BrowserGpuMemoryBufferManager::OnMemoryDump( 323 bool BrowserGpuMemoryBufferManager::OnMemoryDump(
308 const base::trace_event::MemoryDumpArgs& args, 324 const base::trace_event::MemoryDumpArgs& args,
309 base::trace_event::ProcessMemoryDump* pmd) { 325 base::trace_event::ProcessMemoryDump* pmd) {
310 DCHECK_CURRENTLY_ON(BrowserThread::IO); 326 DCHECK_CURRENTLY_ON(BrowserThread::IO);
311 327 #if 0
312 for (const auto& client : clients_) { 328 for (const auto& client : clients_) {
313 int client_id = client.first; 329 int client_id = client.first;
314 330
315 for (const auto& buffer : client.second) { 331 for (const auto& buffer : client.second) {
316 if (buffer.second.type == gfx::EMPTY_BUFFER) 332 if (buffer.second.type == gfx::EMPTY_BUFFER)
317 continue; 333 continue;
318 334
319 gfx::GpuMemoryBufferId buffer_id = buffer.first; 335 gfx::GpuMemoryBufferId buffer_id = buffer.first;
320 base::trace_event::MemoryAllocatorDump* dump = 336 base::trace_event::MemoryAllocatorDump* dump =
321 pmd->CreateAllocatorDump(base::StringPrintf( 337 pmd->CreateAllocatorDump(base::StringPrintf(
(...skipping 14 matching lines...) Expand all
336 uint64_t client_tracing_process_id = 352 uint64_t client_tracing_process_id =
337 ClientIdToTracingProcessId(client_id); 353 ClientIdToTracingProcessId(client_id);
338 354
339 base::trace_event::MemoryAllocatorDumpGuid shared_buffer_guid = 355 base::trace_event::MemoryAllocatorDumpGuid shared_buffer_guid =
340 gfx::GetGpuMemoryBufferGUIDForTracing(client_tracing_process_id, 356 gfx::GetGpuMemoryBufferGUIDForTracing(client_tracing_process_id,
341 buffer_id); 357 buffer_id);
342 pmd->CreateSharedGlobalAllocatorDump(shared_buffer_guid); 358 pmd->CreateSharedGlobalAllocatorDump(shared_buffer_guid);
343 pmd->AddOwnershipEdge(dump->guid(), shared_buffer_guid); 359 pmd->AddOwnershipEdge(dump->guid(), shared_buffer_guid);
344 } 360 }
345 } 361 }
346 362 #endif
347 return true; 363 return true;
348 } 364 }
349 365
350 void BrowserGpuMemoryBufferManager::ChildProcessDeletedGpuMemoryBuffer( 366 void BrowserGpuMemoryBufferManager::ChildProcessDeletedGpuMemoryBuffer(
351 gfx::GpuMemoryBufferId id, 367 gfx::GpuMemoryBufferId id,
352 base::ProcessHandle child_process_handle, 368 base::ProcessHandle child_process_handle,
353 int child_client_id, 369 int child_client_id,
354 const gpu::SyncToken& sync_token) { 370 const gpu::SyncToken& sync_token) {
355 DCHECK_CURRENTLY_ON(BrowserThread::IO); 371 DCHECK_CURRENTLY_ON(BrowserThread::IO);
356 372
357 DestroyGpuMemoryBufferOnIO(id, child_client_id, sync_token); 373 DestroyGpuMemoryBufferOnIO(id, child_client_id, sync_token);
358 } 374 }
359 375
360 void BrowserGpuMemoryBufferManager::ProcessRemoved( 376 void BrowserGpuMemoryBufferManager::ProcessRemoved(
361 base::ProcessHandle process_handle, 377 base::ProcessHandle process_handle,
362 int client_id) { 378 int client_id) {
363 DCHECK_CURRENTLY_ON(BrowserThread::IO); 379 DCHECK_CURRENTLY_ON(BrowserThread::IO);
364 380
381 #if 0 // XXX
365 ClientMap::iterator client_it = clients_.find(client_id); 382 ClientMap::iterator client_it = clients_.find(client_id);
366 if (client_it == clients_.end()) 383 if (client_it == clients_.end())
367 return; 384 return;
368 385
369 for (const auto& buffer : client_it->second) { 386 for (const auto& buffer : client_it->second) {
370 // This might happen if buffer is currenlty in the process of being 387 // This might happen if buffer is currenlty in the process of being
371 // allocated. The buffer will in that case be cleaned up when allocation 388 // allocated. The buffer will in that case be cleaned up when allocation
372 // completes. 389 // completes.
373 if (buffer.second.type == gfx::EMPTY_BUFFER) 390 if (buffer.second.type == gfx::EMPTY_BUFFER)
374 continue; 391 continue;
375 392
376 GpuProcessHost* host = GpuProcessHost::FromID(buffer.second.gpu_host_id); 393 GpuProcessHost* host = GpuProcessHost::FromID(buffer.second.gpu_host_id);
377 if (host) 394 if (host)
378 host->DestroyGpuMemoryBuffer(buffer.first, client_id, gpu::SyncToken()); 395 host->DestroyGpuMemoryBuffer(buffer.first, client_id, gpu::SyncToken());
379 } 396 }
380 397
381 clients_.erase(client_it); 398 clients_.erase(client_it);
399 #endif
382 } 400 }
383 401
384 bool BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBufferConfiguration( 402 bool BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBufferConfiguration(
385 gfx::BufferFormat format, 403 gfx::BufferFormat format,
386 gfx::BufferUsage usage) const { 404 gfx::BufferUsage usage) const {
387 return native_configurations_.find(std::make_pair(format, usage)) != 405 return native_configurations_.find(std::make_pair(format, usage)) !=
388 native_configurations_.end(); 406 native_configurations_.end();
389 } 407 }
390 408
391 std::unique_ptr<gfx::GpuMemoryBuffer> 409 std::unique_ptr<gfx::GpuMemoryBuffer>
392 BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface( 410 BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface(
393 const gfx::Size& size, 411 const gfx::Size& size,
394 gfx::BufferFormat format, 412 gfx::BufferFormat format,
395 gfx::BufferUsage usage, 413 gfx::BufferUsage usage,
396 gpu::SurfaceHandle surface_handle) { 414 gpu::SurfaceHandle surface_handle) {
415 return gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(size, format,
416 usage,
417 surface_handle);
418 #if 0
397 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); 419 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO));
398 420
399 CreateGpuMemoryBufferRequest request(size, format, usage, gpu_client_id_, 421 CreateGpuMemoryBufferRequest request(size, format, usage, gpu_client_id_,
400 surface_handle); 422 surface_handle);
401 BrowserThread::PostTask( 423 BrowserThread::PostTask(
402 BrowserThread::IO, FROM_HERE, 424 BrowserThread::IO, FROM_HERE,
403 base::Bind( 425 base::Bind(
404 &BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferOnIO, 426 &BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferOnIO,
405 base::Unretained(this), // Safe as we wait for result below. 427 base::Unretained(this), // Safe as we wait for result below.
406 base::Unretained(&request))); 428 base::Unretained(&request)));
407 429
408 // We're blocking the UI thread, which is generally undesirable. 430 // We're blocking the UI thread, which is generally undesirable.
409 TRACE_EVENT0( 431 TRACE_EVENT0(
410 "browser", 432 "browser",
411 "BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface"); 433 "BrowserGpuMemoryBufferManager::AllocateGpuMemoryBufferForSurface");
412 base::ThreadRestrictions::ScopedAllowWait allow_wait; 434 base::ThreadRestrictions::ScopedAllowWait allow_wait;
413 request.event.Wait(); 435 request.event.Wait();
414 return std::move(request.result); 436 return std::move(request.result);
437 #endif
415 } 438 }
416 439
417 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferOnIO( 440 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferOnIO(
418 CreateGpuMemoryBufferRequest* request) { 441 CreateGpuMemoryBufferRequest* request) {
442 #if 0
419 DCHECK_CURRENTLY_ON(BrowserThread::IO); 443 DCHECK_CURRENTLY_ON(BrowserThread::IO);
420 444
421 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId(); 445 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId();
422 446
423 // Use service side allocation for native configurations. 447 // Use service side allocation for native configurations.
424 if (IsNativeGpuMemoryBufferConfiguration(request->format, request->usage)) { 448 if (IsNativeGpuMemoryBufferConfiguration(request->format, request->usage)) {
425 // Note: Unretained is safe as this is only used for synchronous allocation 449 // Note: Unretained is safe as this is only used for synchronous allocation
426 // from a non-IO thread. 450 // from a non-IO thread.
427 CreateGpuMemoryBufferOnIO( 451 CreateGpuMemoryBufferOnIO(
428 base::Bind(&HostCreateGpuMemoryBuffer, request->surface_handle), new_id, 452 base::Bind(&HostCreateGpuMemoryBuffer, request->surface_handle), new_id,
(...skipping 19 matching lines...) Expand all
448 // Note: Unretained is safe as IO thread is stopped before manager is 472 // Note: Unretained is safe as IO thread is stopped before manager is
449 // destroyed. 473 // destroyed.
450 request->result = gpu::GpuMemoryBufferImplSharedMemory::Create( 474 request->result = gpu::GpuMemoryBufferImplSharedMemory::Create(
451 new_id, request->size, request->format, 475 new_id, request->size, request->format,
452 base::Bind( 476 base::Bind(
453 &GpuMemoryBufferDeleted, 477 &GpuMemoryBufferDeleted,
454 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), 478 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
455 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, 479 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO,
456 base::Unretained(this), new_id, request->client_id))); 480 base::Unretained(this), new_id, request->client_id)));
457 request->event.Signal(); 481 request->event.Signal();
482 #endif
458 } 483 }
459 484
460 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromHandleOnIO( 485 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromHandleOnIO(
461 CreateGpuMemoryBufferFromHandleRequest* request) { 486 CreateGpuMemoryBufferFromHandleRequest* request) {
487 #if 0
462 DCHECK_CURRENTLY_ON(BrowserThread::IO); 488 DCHECK_CURRENTLY_ON(BrowserThread::IO);
463 489
464 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId(); 490 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId();
465 491
466 BufferMap& buffers = clients_[request->client_id]; 492 BufferMap& buffers = clients_[request->client_id];
467 auto insert_result = buffers.insert(std::make_pair( 493 auto insert_result = buffers.insert(std::make_pair(
468 new_id, BufferInfo(request->size, request->handle.type, 494 new_id, BufferInfo(request->size, request->handle.type,
469 request->format, request->usage, 0))); 495 request->format, request->usage, 0)));
470 DCHECK(insert_result.second); 496 DCHECK(insert_result.second);
471 497
472 gfx::GpuMemoryBufferHandle handle = request->handle; 498 gfx::GpuMemoryBufferHandle handle = request->handle;
473 handle.id = new_id; 499 handle.id = new_id;
474 500
475 // Note: Unretained is safe as IO thread is stopped before manager is 501 // Note: Unretained is safe as IO thread is stopped before manager is
476 // destroyed. 502 // destroyed.
477 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle( 503 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle(
478 handle, request->size, request->format, request->usage, 504 handle, request->size, request->format, request->usage,
479 base::Bind( 505 base::Bind(
480 &GpuMemoryBufferDeleted, 506 &GpuMemoryBufferDeleted,
481 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), 507 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
482 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, 508 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO,
483 base::Unretained(this), new_id, request->client_id))); 509 base::Unretained(this), new_id, request->client_id)));
484 request->event.Signal(); 510 request->event.Signal();
511 #endif
485 } 512 }
486 513
487 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO( 514 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO(
488 CreateGpuMemoryBufferRequest* request, 515 CreateGpuMemoryBufferRequest* request,
489 const gfx::GpuMemoryBufferHandle& handle) { 516 const gfx::GpuMemoryBufferHandle& handle) {
490 DCHECK_CURRENTLY_ON(BrowserThread::IO); 517 DCHECK_CURRENTLY_ON(BrowserThread::IO);
491 518
492 // Early out if factory failed to create the buffer. 519 // Early out if factory failed to create the buffer.
493 if (handle.is_null()) { 520 if (handle.is_null()) {
494 request->event.Signal(); 521 request->event.Signal();
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 buffer_it->second.gpu_host_id = gpu_host_id; 655 buffer_it->second.gpu_host_id = gpu_host_id;
629 656
630 callback.Run(handle); 657 callback.Run(handle);
631 } 658 }
632 659
633 void BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO( 660 void BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO(
634 gfx::GpuMemoryBufferId id, 661 gfx::GpuMemoryBufferId id,
635 int client_id, 662 int client_id,
636 const gpu::SyncToken& sync_token) { 663 const gpu::SyncToken& sync_token) {
637 DCHECK_CURRENTLY_ON(BrowserThread::IO); 664 DCHECK_CURRENTLY_ON(BrowserThread::IO);
665 if (clients_.find(client_id) == clients_.end())
666 return;
667
638 DCHECK(clients_.find(client_id) != clients_.end()); 668 DCHECK(clients_.find(client_id) != clients_.end());
639 669
640 BufferMap& buffers = clients_[client_id]; 670 BufferMap& buffers = clients_[client_id];
641 671
642 BufferMap::iterator buffer_it = buffers.find(id); 672 BufferMap::iterator buffer_it = buffers.find(id);
643 if (buffer_it == buffers.end()) { 673 if (buffer_it == buffers.end()) {
644 LOG(ERROR) << "Invalid GpuMemoryBuffer ID for client."; 674 LOG(ERROR) << "Invalid GpuMemoryBuffer ID for client.";
645 return; 675 return;
646 } 676 }
647 677
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 format(format), 715 format(format),
686 usage(usage), 716 usage(usage),
687 gpu_host_id(gpu_host_id) {} 717 gpu_host_id(gpu_host_id) {}
688 718
689 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = 719 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) =
690 default; 720 default;
691 721
692 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} 722 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {}
693 723
694 } // namespace content 724 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | gpu/ipc/client/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698