xref: /llvm-project/llvm/lib/XRay/BlockPrinter.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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 Berris Error 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