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