1//===- FDRRecordConsumer.h - XRay Flight Data Recorder Mode Records -------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8#ifndef LLVM_XRAY_FDRRECORDCONSUMER_H 9#define LLVM_XRAY_FDRRECORDCONSUMER_H 10 11#include "llvm/Support/Error.h" 12#include "llvm/XRay/FDRRecords.h" 13#include <algorithm> 14#include <memory> 15#include <vector> 16 17namespace llvm { 18namespace xray { 19 20class RecordConsumer { 21public: 22 virtual Error consume(std::unique_ptr<Record> R) = 0; 23 virtual ~RecordConsumer() = default; 24}; 25 26// This consumer will collect all the records into a vector of records, in 27// arrival order. 28class LogBuilderConsumer : public RecordConsumer { 29 std::vector<std::unique_ptr<Record>> &Records; 30 31public: 32 explicit LogBuilderConsumer(std::vector<std::unique_ptr<Record>> &R) 33 : Records(R) {} 34 35 Error consume(std::unique_ptr<Record> R) override; 36}; 37 38// A PipelineConsumer applies a set of visitors to every consumed Record, in the 39// order by which the visitors are added to the pipeline in the order of 40// appearance. 41class PipelineConsumer : public RecordConsumer { 42 std::vector<RecordVisitor *> Visitors; 43 44public: 45 PipelineConsumer(std::initializer_list<RecordVisitor *> V) : Visitors(V) {} 46 47 Error consume(std::unique_ptr<Record> R) override; 48}; 49 50} // namespace xray 51} // namespace llvm 52 53#endif // LLVM_XRAY_FDRRECORDCONSUMER_H 54