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 10 namespace llvm { 11 namespace xray { 12 13 Error BlockPrinter::visit(BufferExtents &R) { 14 OS << "\n[New Block]\n"; 15 CurrentState = State::Preamble; 16 return RP.visit(R); 17 } 18 19 // Preamble printing. 20 Error 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 29 Error BlockPrinter::visit(WallclockRecord &R) { 30 CurrentState = State::Preamble; 31 return RP.visit(R); 32 } 33 34 Error BlockPrinter::visit(PIDRecord &R) { 35 CurrentState = State::Preamble; 36 return RP.visit(R); 37 } 38 39 // Metadata printing. 40 Error 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 51 Error 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. 61 Error 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 70 Error 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 79 Error 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. 89 Error 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 98 Error BlockPrinter::visit(CallArgRecord &R) { 99 CurrentState = State::Arg; 100 OS << " : "; 101 auto E = RP.visit(R); 102 return E; 103 } 104 105 Error 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