1//===- BlockPrinter.cpp - FDR Block Pretty Printer Implementation --------===// 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#include "llvm/XRay/BlockPrinter.h" 9 10namespace llvm { 11namespace xray { 12 13Error BlockPrinter::visit(BufferExtents &R) { 14 OS << "\n[New Block]\n"; 15 CurrentState = State::Preamble; 16 return RP.visit(R); 17} 18 19// Preamble printing. 20Error BlockPrinter::visit(NewBufferRecord &R) { 21 if (CurrentState == State::Start) 22 OS << "\n[New Block]\n"; 23 24 OS << "Preamble: \n"; 25 CurrentState = State::Preamble; 26 return RP.visit(R); 27} 28 29Error BlockPrinter::visit(WallclockRecord &R) { 30 CurrentState = State::Preamble; 31 return RP.visit(R); 32} 33 34Error BlockPrinter::visit(PIDRecord &R) { 35 CurrentState = State::Preamble; 36 return RP.visit(R); 37} 38 39// Metadata printing. 40Error BlockPrinter::visit(NewCPUIDRecord &R) { 41 if (CurrentState == State::Preamble) 42 OS << "\nBody:\n"; 43 if (CurrentState == State::Function) 44 OS << "\nMetadata: "; 45 CurrentState = State::Metadata; 46 OS << " "; 47 auto E = RP.visit(R); 48 return E; 49} 50 51Error BlockPrinter::visit(TSCWrapRecord &R) { 52 if (CurrentState == State::Function) 53 OS << "\nMetadata:"; 54 CurrentState = State::Metadata; 55 OS << " "; 56 auto E = RP.visit(R); 57 return E; 58} 59 60// Custom events will be rendered like "function" events. 61Error BlockPrinter::visit(CustomEventRecord &R) { 62 if (CurrentState == State::Metadata) 63 OS << "\n"; 64 CurrentState = State::CustomEvent; 65 OS << "* "; 66 auto E = RP.visit(R); 67 return E; 68} 69 70Error BlockPrinter::visit(CustomEventRecordV5 &R) { 71 if (CurrentState == State::Metadata) 72 OS << "\n"; 73 CurrentState = State::CustomEvent; 74 OS << "* "; 75 auto E = RP.visit(R); 76 return E; 77} 78 79Error BlockPrinter::visit(TypedEventRecord &R) { 80 if (CurrentState == State::Metadata) 81 OS << "\n"; 82 CurrentState = State::CustomEvent; 83 OS << "* "; 84 auto E = RP.visit(R); 85 return E; 86} 87 88// Function call printing. 89Error BlockPrinter::visit(FunctionRecord &R) { 90 if (CurrentState == State::Metadata) 91 OS << "\n"; 92 CurrentState = State::Function; 93 OS << "- "; 94 auto E = RP.visit(R); 95 return E; 96} 97 98Error BlockPrinter::visit(CallArgRecord &R) { 99 CurrentState = State::Arg; 100 OS << " : "; 101 auto E = RP.visit(R); 102 return E; 103} 104 105Error BlockPrinter::visit(EndBufferRecord &R) { 106 CurrentState = State::End; 107 OS << " *** "; 108 auto E = RP.visit(R); 109 return E; 110} 111 112} // namespace xray 113} // namespace llvm 114