// Copyright 2019 the V8 project 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 V8_LIBPLATFORM_TRACING_TRACE_EVENT_LISTENER_H_
#define V8_LIBPLATFORM_TRACING_TRACE_EVENT_LISTENER_H_

#include <vector>

#include "libplatform/libplatform-export.h"

namespace perfetto {
namespace protos {
class TracePacket;
}  // namespace protos
}  // namespace perfetto

namespace v8 {
namespace platform {
namespace tracing {

// A TraceEventListener is a simple interface that allows subclasses to listen
// to trace events. This interface is to hide the more complex interactions that
// the PerfettoConsumer class has to perform. Clients override ProcessPacket()
// to respond to trace events, e.g. to write them to a file as JSON or for
// testing purposes.
class V8_PLATFORM_EXPORT TraceEventListener {
 public:
  virtual ~TraceEventListener() = default;
  virtual void ProcessPacket(const ::perfetto::protos::TracePacket& packet) = 0;

  void ParseFromArray(const std::vector<char>& array);
};

}  // namespace tracing
}  // namespace platform
}  // namespace v8

#endif  // V8_LIBPLATFORM_TRACING_TRACE_EVENT_LISTENER_H_
