| 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 |