OLD | NEW |
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 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 new_id, BufferInfo(request->size, gfx::SHARED_MEMORY_BUFFER, | 455 new_id, BufferInfo(request->size, gfx::SHARED_MEMORY_BUFFER, |
456 request->format, request->usage, 0))); | 456 request->format, request->usage, 0))); |
457 DCHECK(insert_result.second); | 457 DCHECK(insert_result.second); |
458 | 458 |
459 // Note: Unretained is safe as IO thread is stopped before manager is | 459 // Note: Unretained is safe as IO thread is stopped before manager is |
460 // destroyed. | 460 // destroyed. |
461 request->result = gpu::GpuMemoryBufferImplSharedMemory::Create( | 461 request->result = gpu::GpuMemoryBufferImplSharedMemory::Create( |
462 new_id, request->size, request->format, | 462 new_id, request->size, request->format, |
463 base::Bind( | 463 base::Bind( |
464 &GpuMemoryBufferDeleted, | 464 &GpuMemoryBufferDeleted, |
465 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), | 465 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), |
466 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, | 466 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, |
467 base::Unretained(this), new_id, request->client_id))); | 467 base::Unretained(this), new_id, request->client_id))); |
468 request->event.Signal(); | 468 request->event.Signal(); |
469 } | 469 } |
470 | 470 |
471 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromHandleOnIO( | 471 void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromHandleOnIO( |
472 CreateGpuMemoryBufferFromHandleRequest* request) { | 472 CreateGpuMemoryBufferFromHandleRequest* request) { |
473 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 473 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
474 | 474 |
475 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId(); | 475 gfx::GpuMemoryBufferId new_id = content::GetNextGenericSharedMemoryId(); |
476 | 476 |
477 BufferMap& buffers = clients_[request->client_id]; | 477 BufferMap& buffers = clients_[request->client_id]; |
478 auto insert_result = buffers.insert(std::make_pair( | 478 auto insert_result = buffers.insert(std::make_pair( |
479 new_id, BufferInfo(request->size, request->handle.type, | 479 new_id, BufferInfo(request->size, request->handle.type, |
480 request->format, request->usage, 0))); | 480 request->format, request->usage, 0))); |
481 DCHECK(insert_result.second); | 481 DCHECK(insert_result.second); |
482 | 482 |
483 gfx::GpuMemoryBufferHandle handle = request->handle; | 483 gfx::GpuMemoryBufferHandle handle = request->handle; |
484 handle.id = new_id; | 484 handle.id = new_id; |
485 | 485 |
486 // Note: Unretained is safe as IO thread is stopped before manager is | 486 // Note: Unretained is safe as IO thread is stopped before manager is |
487 // destroyed. | 487 // destroyed. |
488 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle( | 488 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle( |
489 handle, request->size, request->format, request->usage, | 489 handle, request->size, request->format, request->usage, |
490 base::Bind( | 490 base::Bind( |
491 &GpuMemoryBufferDeleted, | 491 &GpuMemoryBufferDeleted, |
492 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), | 492 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), |
493 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, | 493 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, |
494 base::Unretained(this), new_id, request->client_id))); | 494 base::Unretained(this), new_id, request->client_id))); |
495 request->event.Signal(); | 495 request->event.Signal(); |
496 } | 496 } |
497 | 497 |
498 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO( | 498 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO( |
499 CreateGpuMemoryBufferRequest* request, | 499 CreateGpuMemoryBufferRequest* request, |
500 const gfx::GpuMemoryBufferHandle& handle) { | 500 const gfx::GpuMemoryBufferHandle& handle) { |
501 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 501 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
502 | 502 |
503 // Early out if factory failed to create the buffer. | 503 // Early out if factory failed to create the buffer. |
504 if (handle.is_null()) { | 504 if (handle.is_null()) { |
505 request->event.Signal(); | 505 request->event.Signal(); |
506 return; | 506 return; |
507 } | 507 } |
508 | 508 |
509 // Note: Unretained is safe as IO thread is stopped before manager is | 509 // Note: Unretained is safe as IO thread is stopped before manager is |
510 // destroyed. | 510 // destroyed. |
511 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle( | 511 request->result = gpu::GpuMemoryBufferImpl::CreateFromHandle( |
512 handle, request->size, request->format, request->usage, | 512 handle, request->size, request->format, request->usage, |
513 base::Bind( | 513 base::Bind( |
514 &GpuMemoryBufferDeleted, | 514 &GpuMemoryBufferDeleted, |
515 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO), | 515 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), |
516 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, | 516 base::Bind(&BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO, |
517 base::Unretained(this), handle.id, request->client_id))); | 517 base::Unretained(this), handle.id, request->client_id))); |
518 request->event.Signal(); | 518 request->event.Signal(); |
519 } | 519 } |
520 | 520 |
521 void BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferOnIO( | 521 void BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferOnIO( |
522 const CreateDelegate& create_delegate, | 522 const CreateDelegate& create_delegate, |
523 gfx::GpuMemoryBufferId id, | 523 gfx::GpuMemoryBufferId id, |
524 const gfx::Size& size, | 524 const gfx::Size& size, |
525 gfx::BufferFormat format, | 525 gfx::BufferFormat format, |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 format(format), | 697 format(format), |
698 usage(usage), | 698 usage(usage), |
699 gpu_host_id(gpu_host_id) {} | 699 gpu_host_id(gpu_host_id) {} |
700 | 700 |
701 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = | 701 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = |
702 default; | 702 default; |
703 | 703 |
704 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} | 704 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} |
705 | 705 |
706 } // namespace content | 706 } // namespace content |
OLD | NEW |