Chromium Code Reviews| Index: content/browser/gpu/browser_gpu_channel_host_factory.cc |
| diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
| index 0c43205d3d80b81a60230fba718914d1348b886f..92c00b57b90c8c7f637ec59a3d5e96ec85402e9c 100644 |
| --- a/content/browser/gpu/browser_gpu_channel_host_factory.cc |
| +++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
| @@ -208,7 +208,8 @@ void BrowserGpuChannelHostFactory::Terminate() { |
| BrowserGpuChannelHostFactory::BrowserGpuChannelHostFactory() |
| : gpu_client_id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), |
| shutdown_event_(new base::WaitableEvent(true, false)), |
| - gpu_host_id_(0) { |
| + gpu_host_id_(0), |
| + next_create_gpu_memory_buffer_request_id_(0) { |
| } |
| BrowserGpuChannelHostFactory::~BrowserGpuChannelHostFactory() { |
| @@ -469,4 +470,91 @@ void BrowserGpuChannelHostFactory::SetHandlerForControlMessages( |
| filter)); |
| } |
| +void BrowserGpuChannelHostFactory::CreateGpuMemoryBuffer( |
| + const gfx::GpuMemoryBufferHandle& handle, |
| + const gfx::Size& size, |
| + unsigned internalformat, |
| + unsigned usage, |
| + const CreateGpuMemoryBufferCallback& callback) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + int32 request_id = next_create_gpu_memory_buffer_request_id_++; |
|
reveman
2014/06/11 14:52:09
uint32
|
| + create_gpu_memory_buffer_requests_[request_id] = callback; |
| + GetIOLoopProxy()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&BrowserGpuChannelHostFactory::CreateGpuMemoryBufferOnIO, |
| + base::Unretained(this), |
| + handle, |
| + size, |
| + internalformat, |
| + usage, |
| + request_id)); |
| +} |
| + |
| +void BrowserGpuChannelHostFactory::DestroyGpuMemoryBuffer( |
| + const gfx::GpuMemoryBufferHandle& handle, |
| + int32 sync_point) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + GetIOLoopProxy()->PostTask( |
| + FROM_HERE, |
| + base::Bind(&BrowserGpuChannelHostFactory::DestroyGpuMemoryBufferOnIO, |
| + base::Unretained(this), |
| + handle, |
| + sync_point)); |
| +} |
| + |
| +void BrowserGpuChannelHostFactory::CreateGpuMemoryBufferOnIO( |
| + const gfx::GpuMemoryBufferHandle& handle, |
| + const gfx::Size& size, |
| + unsigned internalformat, |
| + unsigned usage, |
| + int32 request_id) { |
|
reveman
2014/06/11 14:52:09
uint32
|
| + GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); |
| + if (!host) { |
| + GpuMemoryBufferCreatedOnIO(request_id, gfx::GpuMemoryBufferHandle()); |
| + return; |
| + } |
| + |
| + host->CreateGpuMemoryBuffer( |
| + handle, |
| + size, |
| + internalformat, |
| + usage, |
| + base::Bind(&BrowserGpuChannelHostFactory::GpuMemoryBufferCreatedOnIO, |
| + base::Unretained(this), |
| + request_id)); |
| +} |
| + |
| +void BrowserGpuChannelHostFactory::GpuMemoryBufferCreatedOnIO( |
| + int32 request_id, |
|
reveman
2014/06/11 14:52:09
uint32
|
| + const gfx::GpuMemoryBufferHandle& handle) { |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, |
| + FROM_HERE, |
| + base::Bind(&BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated, |
| + base::Unretained(this), |
| + request_id, |
| + handle)); |
| +} |
| + |
| +void BrowserGpuChannelHostFactory::OnGpuMemoryBufferCreated( |
| + int32 request_id, |
|
reveman
2014/06/11 14:52:09
uint32
alexst (slow to review)
2014/06/11 15:36:46
D'oh!@ thank you.
|
| + const gfx::GpuMemoryBufferHandle& handle) { |
| + CreateGpuMemoryBufferCallbackMap::iterator iter = |
| + create_gpu_memory_buffer_requests_.find(request_id); |
| + DCHECK(iter != create_gpu_memory_buffer_requests_.end()); |
| + iter->second.Run(handle); |
| + create_gpu_memory_buffer_requests_.erase(iter); |
| +} |
| + |
| +void BrowserGpuChannelHostFactory::DestroyGpuMemoryBufferOnIO( |
| + const gfx::GpuMemoryBufferHandle& handle, |
| + int32 sync_point) { |
| + GpuProcessHost* host = GpuProcessHost::FromID(gpu_host_id_); |
| + if (!host) { |
| + return; |
| + } |
|
reveman
2014/06/11 14:52:09
nit: no need for "{" "}" (inconsistent with Delete
|
| + |
| + host->DestroyGpuMemoryBuffer(handle, sync_point); |
| +} |
| + |
| } // namespace content |