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