|  | //===- BlockPrinter.cpp - FDR Block Pretty Printer Implementation --------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | #include "llvm/XRay/BlockPrinter.h" | 
|  |  | 
|  | namespace llvm { | 
|  | namespace xray { | 
|  |  | 
|  | Error BlockPrinter::visit(BufferExtents &R) { | 
|  | OS << "\n[New Block]\n"; | 
|  | CurrentState = State::Preamble; | 
|  | return RP.visit(R); | 
|  | } | 
|  |  | 
|  | // Preamble printing. | 
|  | Error BlockPrinter::visit(NewBufferRecord &R) { | 
|  | if (CurrentState == State::Start) | 
|  | OS << "\n[New Block]\n"; | 
|  |  | 
|  | OS << "Preamble: \n"; | 
|  | CurrentState = State::Preamble; | 
|  | return RP.visit(R); | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(WallclockRecord &R) { | 
|  | CurrentState = State::Preamble; | 
|  | return RP.visit(R); | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(PIDRecord &R) { | 
|  | CurrentState = State::Preamble; | 
|  | return RP.visit(R); | 
|  | } | 
|  |  | 
|  | // Metadata printing. | 
|  | Error BlockPrinter::visit(NewCPUIDRecord &R) { | 
|  | if (CurrentState == State::Preamble) | 
|  | OS << "\nBody:\n"; | 
|  | if (CurrentState == State::Function) | 
|  | OS << "\nMetadata: "; | 
|  | CurrentState = State::Metadata; | 
|  | OS << " "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(TSCWrapRecord &R) { | 
|  | if (CurrentState == State::Function) | 
|  | OS << "\nMetadata:"; | 
|  | CurrentState = State::Metadata; | 
|  | OS << " "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | // Custom events will be rendered like "function" events. | 
|  | Error BlockPrinter::visit(CustomEventRecord &R) { | 
|  | if (CurrentState == State::Metadata) | 
|  | OS << "\n"; | 
|  | CurrentState = State::CustomEvent; | 
|  | OS << "*  "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(CustomEventRecordV5 &R) { | 
|  | if (CurrentState == State::Metadata) | 
|  | OS << "\n"; | 
|  | CurrentState = State::CustomEvent; | 
|  | OS << "*  "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(TypedEventRecord &R) { | 
|  | if (CurrentState == State::Metadata) | 
|  | OS << "\n"; | 
|  | CurrentState = State::CustomEvent; | 
|  | OS << "*  "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | // Function call printing. | 
|  | Error BlockPrinter::visit(FunctionRecord &R) { | 
|  | if (CurrentState == State::Metadata) | 
|  | OS << "\n"; | 
|  | CurrentState = State::Function; | 
|  | OS << "-  "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(CallArgRecord &R) { | 
|  | CurrentState = State::Arg; | 
|  | OS << " : "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | Error BlockPrinter::visit(EndBufferRecord &R) { | 
|  | CurrentState = State::End; | 
|  | OS << " *** "; | 
|  | auto E = RP.visit(R); | 
|  | return E; | 
|  | } | 
|  |  | 
|  | } // namespace xray | 
|  | } // namespace llvm |