// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_PERFORMANCE_PERFETTO_BRIDGE_PERFETTO_BRIDGE_H_
#define SRC_PERFORMANCE_PERFETTO_BRIDGE_PERFETTO_BRIDGE_H_

#include <fuchsia/tracing/perfetto/cpp/fidl.h>

class PerfettoBridge : public fuchsia::tracing::perfetto::ProducerConnector,
                       public fuchsia::tracing::perfetto::ConsumerConnector {
 public:
  PerfettoBridge();
  ~PerfettoBridge();

  PerfettoBridge(const PerfettoBridge&) = delete;
  void operator=(const PerfettoBridge&) = delete;

  // fuchsia::tracing::perfetto::ProducerConnector implementation.
  void ConnectProducer(::zx::socket producer_socket,
                       ::fuchsia::tracing::perfetto::TraceBuffer buffer,
                       ConnectProducerCallback callback) final;

  // fuchsia::tracing::perfetto::ConsumerConnector
  void ConnectConsumer(::zx::socket consumer_socket, ConnectConsumerCallback callback) final;
};

#endif  // SRC_PERFORMANCE_PERFETTO_BRIDGE_PERFETTO_BRIDGE_H_
