mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
54bc26f33d
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 llvm-svn: 341887
97 lines
2.2 KiB
C++
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
|