| Index: content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| diff --git a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| index c1e3d4e3ade3e16a853357a21a193fa5b4823ea9..2ce57f591c8091430d521f7760fcba13ac6f6a71 100644
|
| --- a/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| +++ b/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
|
| @@ -42,19 +42,6 @@ void HostCreateGpuMemoryBuffer(
|
| callback);
|
| }
|
|
|
| -void HostCreateGpuMemoryBufferFromHandle(
|
| - const gfx::GpuMemoryBufferHandle& handle,
|
| - GpuProcessHost* host,
|
| - gfx::GpuMemoryBufferId id,
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - gfx::BufferUsage usage,
|
| - int client_id,
|
| - const BrowserGpuMemoryBufferManager::CreateCallback& callback) {
|
| - host->CreateGpuMemoryBufferFromHandle(handle, id, size, format, client_id,
|
| - callback);
|
| -}
|
| -
|
| void GpuMemoryBufferDeleted(
|
| scoped_refptr<base::SingleThreadTaskRunner> destruction_task_runner,
|
| const GpuMemoryBufferImpl::DestructionCallback& destruction_callback,
|
| @@ -500,15 +487,28 @@ void BrowserGpuMemoryBufferManager::HandleCreateGpuMemoryBufferFromHandleOnIO(
|
| request->event.Signal();
|
| return;
|
| }
|
| - // Note: Unretained is safe as this is only used for synchronous allocation
|
| - // from a non-IO thread.
|
| - CreateGpuMemoryBufferOnIO(
|
| - base::Bind(&HostCreateGpuMemoryBufferFromHandle, request->handle),
|
| - new_id, request->size, request->format, request->usage,
|
| - request->client_id, false,
|
| +
|
| + BufferMap& buffers = clients_[request->client_id];
|
| +
|
| + auto insert_result = buffers.insert(std::make_pair(
|
| + new_id, BufferInfo(request->size, request->handle.type, request->format,
|
| + request->usage, 0)));
|
| + DCHECK(insert_result.second);
|
| +
|
| + gfx::GpuMemoryBufferHandle handle = request->handle;
|
| + handle.id = new_id;
|
| +
|
| + // Note: Unretained is safe as IO thread is stopped before manager is
|
| + // destroyed.
|
| + request->result = GpuMemoryBufferImpl::CreateFromHandle(
|
| + handle, request->size, request->format, request->usage,
|
| base::Bind(
|
| - &BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferCreatedOnIO,
|
| - base::Unretained(this), base::Unretained(request)));
|
| + &GpuMemoryBufferDeleted,
|
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO),
|
| + base::Bind(
|
| + &BrowserGpuMemoryBufferManager::DestroyGpuMemoryBufferOnIO,
|
| + base::Unretained(this), handle.id, request->client_id)));
|
| + request->event.Signal();
|
| return;
|
| }
|
|
|
|
|