1dd01efc5SDean Michael Berris //===- BlockPrinter.cpp - FDR Block Pretty Printer Implementation --------===// 2dd01efc5SDean Michael Berris // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6dd01efc5SDean Michael Berris // 7dd01efc5SDean Michael Berris //===----------------------------------------------------------------------===// 8dd01efc5SDean Michael Berris #include "llvm/XRay/BlockPrinter.h" 9dd01efc5SDean Michael Berris 10dd01efc5SDean Michael Berris namespace llvm { 11dd01efc5SDean Michael Berris namespace xray { 12dd01efc5SDean Michael Berris visit(BufferExtents & R)13dd01efc5SDean Michael BerrisError BlockPrinter::visit(BufferExtents &R) { 14dd01efc5SDean Michael Berris OS << "\n[New Block]\n"; 15dd01efc5SDean Michael Berris CurrentState = State::Preamble; 16dd01efc5SDean Michael Berris return RP.visit(R); 17dd01efc5SDean Michael Berris } 18dd01efc5SDean Michael Berris 19dd01efc5SDean Michael Berris // Preamble printing. visit(NewBufferRecord & R)20dd01efc5SDean Michael BerrisError BlockPrinter::visit(NewBufferRecord &R) { 21dd01efc5SDean Michael Berris if (CurrentState == State::Start) 22dd01efc5SDean Michael Berris OS << "\n[New Block]\n"; 23dd01efc5SDean Michael Berris 24dd01efc5SDean Michael Berris OS << "Preamble: \n"; 25dd01efc5SDean Michael Berris CurrentState = State::Preamble; 26dd01efc5SDean Michael Berris return RP.visit(R); 27dd01efc5SDean Michael Berris } 28dd01efc5SDean Michael Berris visit(WallclockRecord & R)29dd01efc5SDean Michael BerrisError BlockPrinter::visit(WallclockRecord &R) { 30dd01efc5SDean Michael Berris CurrentState = State::Preamble; 31dd01efc5SDean Michael Berris return RP.visit(R); 32dd01efc5SDean Michael Berris } 33dd01efc5SDean Michael Berris visit(PIDRecord & R)34dd01efc5SDean Michael BerrisError BlockPrinter::visit(PIDRecord &R) { 35dd01efc5SDean Michael Berris CurrentState = State::Preamble; 36dd01efc5SDean Michael Berris return RP.visit(R); 37dd01efc5SDean Michael Berris } 38dd01efc5SDean Michael Berris 39dd01efc5SDean Michael Berris // Metadata printing. visit(NewCPUIDRecord & R)40dd01efc5SDean Michael BerrisError BlockPrinter::visit(NewCPUIDRecord &R) { 41dd01efc5SDean Michael Berris if (CurrentState == State::Preamble) 42dd01efc5SDean Michael Berris OS << "\nBody:\n"; 43dd01efc5SDean Michael Berris if (CurrentState == State::Function) 44dd01efc5SDean Michael Berris OS << "\nMetadata: "; 45dd01efc5SDean Michael Berris CurrentState = State::Metadata; 46dd01efc5SDean Michael Berris OS << " "; 47dd01efc5SDean Michael Berris auto E = RP.visit(R); 48dd01efc5SDean Michael Berris return E; 49dd01efc5SDean Michael Berris } 50dd01efc5SDean Michael Berris visit(TSCWrapRecord & R)51dd01efc5SDean Michael BerrisError BlockPrinter::visit(TSCWrapRecord &R) { 52dd01efc5SDean Michael Berris if (CurrentState == State::Function) 53dd01efc5SDean Michael Berris OS << "\nMetadata:"; 54dd01efc5SDean Michael Berris CurrentState = State::Metadata; 55dd01efc5SDean Michael Berris OS << " "; 56dd01efc5SDean Michael Berris auto E = RP.visit(R); 57dd01efc5SDean Michael Berris return E; 58dd01efc5SDean Michael Berris } 59dd01efc5SDean Michael Berris 60dd01efc5SDean Michael Berris // Custom events will be rendered like "function" events. visit(CustomEventRecord & R)61dd01efc5SDean Michael BerrisError BlockPrinter::visit(CustomEventRecord &R) { 62dd01efc5SDean Michael Berris if (CurrentState == State::Metadata) 63dd01efc5SDean Michael Berris OS << "\n"; 64dd01efc5SDean Michael Berris CurrentState = State::CustomEvent; 65dd01efc5SDean Michael Berris OS << "* "; 66dd01efc5SDean Michael Berris auto E = RP.visit(R); 67dd01efc5SDean Michael Berris return E; 68dd01efc5SDean Michael Berris } 69dd01efc5SDean Michael Berris visit(CustomEventRecordV5 & R)7059439dd0SDean Michael BerrisError BlockPrinter::visit(CustomEventRecordV5 &R) { 7159439dd0SDean Michael Berris if (CurrentState == State::Metadata) 7259439dd0SDean Michael Berris OS << "\n"; 7359439dd0SDean Michael Berris CurrentState = State::CustomEvent; 7459439dd0SDean Michael Berris OS << "* "; 7559439dd0SDean Michael Berris auto E = RP.visit(R); 7659439dd0SDean Michael Berris return E; 7759439dd0SDean Michael Berris } 7859439dd0SDean Michael Berris visit(TypedEventRecord & R)7959439dd0SDean Michael BerrisError BlockPrinter::visit(TypedEventRecord &R) { 8059439dd0SDean Michael Berris if (CurrentState == State::Metadata) 8159439dd0SDean Michael Berris OS << "\n"; 8259439dd0SDean Michael Berris CurrentState = State::CustomEvent; 8359439dd0SDean Michael Berris OS << "* "; 8459439dd0SDean Michael Berris auto E = RP.visit(R); 8559439dd0SDean Michael Berris return E; 8659439dd0SDean Michael Berris } 8759439dd0SDean Michael Berris 88dd01efc5SDean Michael Berris // Function call printing. visit(FunctionRecord & R)89dd01efc5SDean Michael BerrisError BlockPrinter::visit(FunctionRecord &R) { 90dd01efc5SDean Michael Berris if (CurrentState == State::Metadata) 91dd01efc5SDean Michael Berris OS << "\n"; 92dd01efc5SDean Michael Berris CurrentState = State::Function; 93dd01efc5SDean Michael Berris OS << "- "; 94dd01efc5SDean Michael Berris auto E = RP.visit(R); 95dd01efc5SDean Michael Berris return E; 96dd01efc5SDean Michael Berris } 97dd01efc5SDean Michael Berris visit(CallArgRecord & R)98dd01efc5SDean Michael BerrisError BlockPrinter::visit(CallArgRecord &R) { 99dd01efc5SDean Michael Berris CurrentState = State::Arg; 100dd01efc5SDean Michael Berris OS << " : "; 101dd01efc5SDean Michael Berris auto E = RP.visit(R); 102dd01efc5SDean Michael Berris return E; 103dd01efc5SDean Michael Berris } 104dd01efc5SDean Michael Berris visit(EndBufferRecord & R)105dd01efc5SDean Michael BerrisError BlockPrinter::visit(EndBufferRecord &R) { 106dd01efc5SDean Michael Berris CurrentState = State::End; 107dd01efc5SDean Michael Berris OS << " *** "; 108dd01efc5SDean Michael Berris auto E = RP.visit(R); 109dd01efc5SDean Michael Berris return E; 110dd01efc5SDean Michael Berris } 111dd01efc5SDean Michael Berris 112dd01efc5SDean Michael Berris } // namespace xray 113dd01efc5SDean Michael Berris } // namespace llvm 114