blob: 1de5ee7b22ff53c71b727337c536710099b94c1f [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/ws/ash_gpu_interface_provider.h"
#include "base/bind.h"
#include "components/discardable_memory/service/discardable_shared_memory_manager.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/ws/gpu_host/gpu_host.h"
#include "ui/ozone/public/ozone_platform.h"
namespace ash {
AshGpuInterfaceProvider::AshGpuInterfaceProvider(
ws::gpu_host::GpuHost* gpu_host,
discardable_memory::DiscardableSharedMemoryManager*
discardable_shared_memory_manager)
: gpu_host_(gpu_host),
discardable_shared_memory_manager_(discardable_shared_memory_manager) {
DCHECK(gpu_host_);
DCHECK(discardable_shared_memory_manager_);
}
AshGpuInterfaceProvider::~AshGpuInterfaceProvider() = default;
void AshGpuInterfaceProvider::RegisterGpuInterfaces(
service_manager::BinderRegistry* registry) {
registry->AddInterface<ws::mojom::ArcGpu>(base::BindRepeating(
&AshGpuInterfaceProvider::BindArcGpuRequest, base::Unretained(this)));
registry->AddInterface(base::BindRepeating(
&AshGpuInterfaceProvider::BindDiscardableSharedMemoryManagerRequest,
base::Unretained(this)));
registry->AddInterface(base::BindRepeating(
&AshGpuInterfaceProvider::BindGpuRequest, base::Unretained(this)));
}
void AshGpuInterfaceProvider::BindOzoneGpuInterface(
const std::string& interface_name,
mojo::ScopedMessagePipeHandle handle) {
gpu_host_->BindOzoneGpuInterface(interface_name, std::move(handle));
}
void AshGpuInterfaceProvider::BindArcGpuRequest(
ws::mojom::ArcGpuRequest request) {
gpu_host_->AddArcGpu(std::move(request));
}
void AshGpuInterfaceProvider::BindDiscardableSharedMemoryManagerRequest(
discardable_memory::mojom::DiscardableSharedMemoryManagerRequest request) {
discardable_shared_memory_manager_->Bind(std::move(request),
service_manager::BindSourceInfo());
}
void AshGpuInterfaceProvider::BindGpuRequest(ws::mojom::GpuRequest request) {
gpu_host_->Add(std::move(request));
}
} // namespace ash