blob: 9b7e9e6719225e6146927bc50a5b88dadb2cdd3a [file] [log] [blame]
// 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