blob: 2d10d52533b0f0f54ccb3f4b8605dada6259f19b [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 "ui/ozone/platform/scenic/scenic_gpu_service.h"
#include "mojo/public/c/system/message_pipe.h"
namespace ui {
namespace {
// Fulfills an InterfaceRequest<T> using an InterfacePtr<T>.
//
// Messages queued on the InterfaceRequest's message pipe are preserved and will
// be eventually delivered to the remote end of InterfacePtr<T>'s.
//
// InterfacePtr<T> must be a brand new interface; i.e., it not have been
// previously used to send a message.
template <typename Interface>
void FulfillInterfaceRequest(
mojo::InterfaceRequest<Interface> interface_request,
mojo::InterfacePtr<Interface> interface_ptr) {
MojoResult result =
mojo::FuseMessagePipes(interface_ptr.PassInterface().PassHandle(),
interface_request.PassMessagePipe());
DCHECK_EQ(result, MOJO_RESULT_OK);
}
} // namespace
ScenicGpuService::ScenicGpuService()
: gpu_host_request_(mojo::MakeRequest(&gpu_host_)),
weak_ptr_factory_(this) {}
ScenicGpuService::~ScenicGpuService() {}
base::RepeatingCallback<void(mojom::ScenicGpuServiceRequest)>
ScenicGpuService::GetBinderCallback() {
return base::BindRepeating(&ScenicGpuService::AddBinding,
weak_ptr_factory_.GetWeakPtr());
}
void ScenicGpuService::Initialize(mojom::ScenicGpuHostPtr gpu_host) {
FulfillInterfaceRequest(std::move(gpu_host_request_), std::move(gpu_host));
}
void ScenicGpuService::AddBinding(mojom::ScenicGpuServiceRequest request) {
binding_set_.AddBinding(this, std::move(request));
}
} // namespace ui