chromium/services/tracing/public/cpp/system_tracing_service.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_TRACING_PUBLIC_CPP_SYSTEM_TRACING_SERVICE_H_
#define SERVICES_TRACING_PUBLIC_CPP_SYSTEM_TRACING_SERVICE_H_

#include "base/component_export.h"
#include "base/sequence_checker.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/shared_remote.h"
#include "services/tracing/public/mojom/system_tracing_service.mojom.h"
#include "third_party/perfetto/include/perfetto/ext/base/unix_socket.h"

namespace tracing {

// Mojo implementation between a child and the browser process for connecting to
// the Perfetto system tracing service daemon (traced) from within a sandboxed
// child process. This enables system-wide trace collection with
// traced that includes trace data from all Chrome processes.
//
// Example:
//   (In the browser process: bind the receiver and pass the pending remote
//    using the ChildProcess mojo interface)
//   auto system_tracing_service = std::make_unique<SystemTracingService>();
//   child_process->EnableSystemTracingService(
//       system_tracing_service->BindAndPassPendingRemote());
//
//   (In the child process, where a pending remote is received)
//   mojo::SharedRemote<SystemTracingService> remote;
//   remote.Bind(std::move(pending_remote));
//   (Request to open the producer socket in the browser process)
//   OpenProducerSocketCallback cb = ...;
//   remote->OpenProducerSocket(std::move(cb));
class COMPONENT_EXPORT(TRACING_CPP) SystemTracingService
    : public mojom::SystemTracingService {};

}  // namespace tracing

#endif  // SERVICES_TRACING_PUBLIC_CPP_SYSTEM_TRACING_SERVICE_H_