| Index: services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
 | 
| diff --git a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
 | 
| index 1c4d027e3feceb6aa259742e29fe005a75fdfdb1..e61ae8d5f608afd3eeba264c6abc35d0c9bbdf66 100644
 | 
| --- a/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
 | 
| +++ b/services/ui/public/cpp/mojo_gpu_memory_buffer_manager.cc
 | 
| @@ -31,8 +31,9 @@ void OnGpuMemoryBufferAllocated(gfx::GpuMemoryBufferHandle* ret_handle,
 | 
|  MojoGpuMemoryBufferManager::MojoGpuMemoryBufferManager(
 | 
|      service_manager::Connector* connector)
 | 
|      : thread_("GpuMemoryThread"),
 | 
| -      connector_(connector->Clone()),
 | 
| -      weak_ptr_factory_(this) {
 | 
| +      gpu_memory_buffer_manager_(
 | 
| +          make_scoped_refptr(new gpu::ClientGpuMemoryBufferManager(this))),
 | 
| +      connector_(connector->Clone()) {
 | 
|    CHECK(thread_.Start());
 | 
|    // The thread is owned by this object. Which means the test will not run if
 | 
|    // the object has been destroyed. So Unretained() is safe.
 | 
| @@ -46,6 +47,7 @@ MojoGpuMemoryBufferManager::~MojoGpuMemoryBufferManager() {
 | 
|        FROM_HERE, base::Bind(&MojoGpuMemoryBufferManager::TearDownThread,
 | 
|                              base::Unretained(this)));
 | 
|    thread_.Stop();
 | 
| +  gpu_memory_buffer_manager_->reset_delegate();
 | 
|  }
 | 
|  
 | 
|  void MojoGpuMemoryBufferManager::InitThread() {
 | 
| @@ -71,28 +73,10 @@ void MojoGpuMemoryBufferManager::AllocateGpuMemoryBufferOnThread(
 | 
|        base::Bind(&OnGpuMemoryBufferAllocated, handle, wait));
 | 
|  }
 | 
|  
 | 
| -void MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer(
 | 
| -    gfx::GpuMemoryBufferId id,
 | 
| -    const gpu::SyncToken& sync_token) {
 | 
| -  if (!thread_.task_runner()->BelongsToCurrentThread()) {
 | 
| -    thread_.task_runner()->PostTask(
 | 
| -        FROM_HERE,
 | 
| -        base::Bind(&MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
 | 
| -                   base::Unretained(this), id, sync_token));
 | 
| -    return;
 | 
| -  }
 | 
| -  gpu_service_->DestroyGpuMemoryBuffer(id, sync_token);
 | 
| -}
 | 
| -
 | 
| -std::unique_ptr<gfx::GpuMemoryBuffer>
 | 
| -MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
 | 
| +gfx::GpuMemoryBufferHandle MojoGpuMemoryBufferManager::GetSharedMemoryHandle(
 | 
|      const gfx::Size& size,
 | 
|      gfx::BufferFormat format,
 | 
| -    gfx::BufferUsage usage,
 | 
| -    gpu::SurfaceHandle surface_handle) {
 | 
| -  // Note: this can be called from multiple threads at the same time. Some of
 | 
| -  // those threads may not have a TaskRunner set.
 | 
| -  DCHECK_EQ(gpu::kNullSurfaceHandle, surface_handle);
 | 
| +    gfx::BufferUsage usage) {
 | 
|    CHECK(!thread_.task_runner()->BelongsToCurrentThread());
 | 
|    gfx::GpuMemoryBufferHandle gmb_handle;
 | 
|    base::WaitableEvent wait(base::WaitableEvent::ResetPolicy::AUTOMATIC,
 | 
| @@ -103,40 +87,20 @@ MojoGpuMemoryBufferManager::AllocateGpuMemoryBuffer(
 | 
|                   base::Unretained(this), size, format, usage, &gmb_handle,
 | 
|                   &wait));
 | 
|    wait.Wait();
 | 
| -  if (gmb_handle.is_null())
 | 
| -    return nullptr;
 | 
| -  std::unique_ptr<gpu::GpuMemoryBufferImpl> buffer(
 | 
| -      gpu::GpuMemoryBufferImpl::CreateFromHandle(
 | 
| -          gmb_handle, size, format, usage,
 | 
| -          base::Bind(&MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
 | 
| -                     weak_ptr_factory_.GetWeakPtr(), gmb_handle.id)));
 | 
| -  if (!buffer) {
 | 
| -    DeletedGpuMemoryBuffer(gmb_handle.id, gpu::SyncToken());
 | 
| -    return nullptr;
 | 
| -  }
 | 
| -  return std::move(buffer);
 | 
| +  return gmb_handle;
 | 
|  }
 | 
|  
 | 
| -std::unique_ptr<gfx::GpuMemoryBuffer>
 | 
| -MojoGpuMemoryBufferManager::CreateGpuMemoryBufferFromHandle(
 | 
| -    const gfx::GpuMemoryBufferHandle& handle,
 | 
| -    const gfx::Size& size,
 | 
| -    gfx::BufferFormat format) {
 | 
| -  NOTIMPLEMENTED();
 | 
| -  return nullptr;
 | 
| -}
 | 
| -
 | 
| -gfx::GpuMemoryBuffer*
 | 
| -MojoGpuMemoryBufferManager::GpuMemoryBufferFromClientBuffer(
 | 
| -    ClientBuffer buffer) {
 | 
| -  return gpu::GpuMemoryBufferImpl::FromClientBuffer(buffer);
 | 
| -}
 | 
| -
 | 
| -void MojoGpuMemoryBufferManager::SetDestructionSyncToken(
 | 
| -    gfx::GpuMemoryBuffer* buffer,
 | 
| +void MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer(
 | 
| +    gfx::GpuMemoryBufferId id,
 | 
|      const gpu::SyncToken& sync_token) {
 | 
| -  static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token(
 | 
| -      sync_token);
 | 
| +  if (!thread_.task_runner()->BelongsToCurrentThread()) {
 | 
| +    thread_.task_runner()->PostTask(
 | 
| +        FROM_HERE,
 | 
| +        base::Bind(&MojoGpuMemoryBufferManager::DeletedGpuMemoryBuffer,
 | 
| +                   base::Unretained(this), id, sync_token));
 | 
| +    return;
 | 
| +  }
 | 
| +  gpu_service_->DestroyGpuMemoryBuffer(id, sync_token);
 | 
|  }
 | 
|  
 | 
|  }  // namespace ui
 | 
| 
 |