Files
archived-llvm/lib/XRay/BlockPrinter.cpp
Dean Michael Berris dd24af18f6 [XRay] Add the llvm-xray fdr-dump implementation
Summary:
In this change, we implement a `BlockPrinter` which orders records in a
Block that's been indexed by the `BlockIndexer`. This is used in the
`llvm-xray fdr-dump` tool which ties together the various types and
utilities we've been working on, to allow for inspection of XRay FDR
mode traces both with and without verification.

This change is the final step of the refactoring of D50441.

Reviewers: mboerger, eizan

Subscribers: mgorny, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D51846

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341887 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-11 00:22:53 +00:00

97 lines
2.2 KiB
C++

//===- BlockPrinter.cpp - FDR Block Pretty Printer Implementation --------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#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;
}
// 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