|  | // Copyright 2018 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "content/public/browser/gpu_client.h" | 
|  |  | 
|  | #include "content/browser/child_process_host_impl.h" | 
|  | #include "content/browser/gpu/browser_gpu_client_delegate.h" | 
|  | #include "content/public/browser/browser_task_traits.h" | 
|  | #include "content/public/browser/browser_thread.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | std::unique_ptr<viz::GpuClient, base::OnTaskRunnerDeleter> CreateGpuClient( | 
|  | mojo::PendingReceiver<viz::mojom::Gpu> receiver) { | 
|  | // TODO(crbug.com/379869738): Refactor to use client_id without | 
|  | // GetUnsafeValue(). | 
|  | const ChildProcessId client_id = | 
|  | ChildProcessHostImpl::GenerateChildProcessUniqueId(); | 
|  | const uint64_t client_tracing_id = | 
|  | ChildProcessHostImpl::ChildProcessIdToTracingProcessId(client_id); | 
|  | auto task_runner = GetUIThreadTaskRunner({}); | 
|  | std::unique_ptr<viz::GpuClient, base::OnTaskRunnerDeleter> gpu_client( | 
|  | new viz::GpuClient(std::make_unique<BrowserGpuClientDelegate>(), | 
|  | client_id.GetUnsafeValue(), client_tracing_id, | 
|  | task_runner), | 
|  | base::OnTaskRunnerDeleter(task_runner)); | 
|  | task_runner->PostTask( | 
|  | FROM_HERE, base::BindOnce(&viz::GpuClient::Add, gpu_client->GetWeakPtr(), | 
|  | std::move(receiver))); | 
|  | return gpu_client; | 
|  | } | 
|  |  | 
|  | }  // namespace content |