1 //===- BlockPrinter.h - FDR Block Pretty Printer -------------------------===// 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 // 9 // An implementation of the RecordVisitor which formats a block of records for 10 // easier human consumption. 11 // 12 //===----------------------------------------------------------------------===// 13 #ifndef LLVM_XRAY_BLOCKPRINTER_H 14 #define LLVM_XRAY_BLOCKPRINTER_H 15 16 #include "llvm/Support/Compiler.h" 17 #include "llvm/Support/raw_ostream.h" 18 #include "llvm/XRay/FDRRecords.h" 19 #include "llvm/XRay/RecordPrinter.h" 20 21 namespace llvm { 22 namespace xray { 23 24 class LLVM_ABI BlockPrinter : public RecordVisitor { 25 enum class State { 26 Start, 27 Preamble, 28 Metadata, 29 Function, 30 Arg, 31 CustomEvent, 32 End, 33 }; 34 35 raw_ostream &OS; 36 RecordPrinter &RP; 37 State CurrentState = State::Start; 38 39 public: BlockPrinter(raw_ostream & O,RecordPrinter & P)40 explicit BlockPrinter(raw_ostream &O, RecordPrinter &P) : OS(O), RP(P) {} 41 42 Error visit(BufferExtents &) override; 43 Error visit(WallclockRecord &) override; 44 Error visit(NewCPUIDRecord &) override; 45 Error visit(TSCWrapRecord &) override; 46 Error visit(CustomEventRecord &) override; 47 Error visit(CallArgRecord &) override; 48 Error visit(PIDRecord &) override; 49 Error visit(NewBufferRecord &) override; 50 Error visit(EndBufferRecord &) override; 51 Error visit(FunctionRecord &) override; 52 Error visit(CustomEventRecordV5 &) override; 53 Error visit(TypedEventRecord &) override; 54 reset()55 void reset() { CurrentState = State::Start; } 56 }; 57 58 } // namespace xray 59 } // namespace llvm 60 61 #endif // LLVM_XRAY_BLOCKPRINTER_H 62