1343171Sdim//===- RecordPrinter.cpp - FDR Record Printer -----------------------------===//
2343171Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6343171Sdim//
7343171Sdim//===----------------------------------------------------------------------===//
8343171Sdim#include "llvm/XRay/RecordPrinter.h"
9343171Sdim
10343171Sdim#include "llvm/Support/FormatVariadic.h"
11343171Sdim
12343171Sdimnamespace llvm {
13343171Sdimnamespace xray {
14343171Sdim
15343171SdimError RecordPrinter::visit(BufferExtents &R) {
16343171Sdim  OS << formatv("<Buffer: size = {0} bytes>", R.size()) << Delim;
17343171Sdim  return Error::success();
18343171Sdim}
19343171Sdim
20343171SdimError RecordPrinter::visit(WallclockRecord &R) {
21343171Sdim  OS << formatv("<Wall Time: seconds = {0}.{1,0+6}>", R.seconds(), R.nanos())
22343171Sdim     << Delim;
23343171Sdim  return Error::success();
24343171Sdim}
25343171Sdim
26343171SdimError RecordPrinter::visit(NewCPUIDRecord &R) {
27343171Sdim  OS << formatv("<CPU: id = {0}, tsc = {1}>", R.cpuid(), R.tsc()) << Delim;
28343171Sdim  return Error::success();
29343171Sdim}
30343171Sdim
31343171SdimError RecordPrinter::visit(TSCWrapRecord &R) {
32343171Sdim  OS << formatv("<TSC Wrap: base = {0}>", R.tsc()) << Delim;
33343171Sdim  return Error::success();
34343171Sdim}
35343171Sdim
36343171SdimError RecordPrinter::visit(CustomEventRecord &R) {
37343171Sdim  OS << formatv(
38343171Sdim            "<Custom Event: tsc = {0}, cpu = {1}, size = {2}, data = '{3}'>",
39343171Sdim            R.tsc(), R.cpu(), R.size(), R.data())
40343171Sdim     << Delim;
41343171Sdim  return Error::success();
42343171Sdim}
43343171Sdim
44343171SdimError RecordPrinter::visit(CustomEventRecordV5 &R) {
45343171Sdim  OS << formatv("<Custom Event: delta = +{0}, size = {1}, data = '{2}'>",
46343171Sdim                R.delta(), R.size(), R.data())
47343171Sdim     << Delim;
48343171Sdim  return Error::success();
49343171Sdim}
50343171Sdim
51343171SdimError RecordPrinter::visit(TypedEventRecord &R) {
52343171Sdim  OS << formatv(
53343171Sdim            "<Typed Event: delta = +{0}, type = {1}, size = {2}, data = '{3}'",
54343171Sdim            R.delta(), R.eventType(), R.size(), R.data())
55343171Sdim     << Delim;
56343171Sdim  return Error::success();
57343171Sdim}
58343171Sdim
59343171SdimError RecordPrinter::visit(CallArgRecord &R) {
60343171Sdim  OS << formatv("<Call Argument: data = {0} (hex = {0:x})>", R.arg()) << Delim;
61343171Sdim  return Error::success();
62343171Sdim}
63343171Sdim
64343171SdimError RecordPrinter::visit(PIDRecord &R) {
65343171Sdim  OS << formatv("<PID: {0}>", R.pid()) << Delim;
66343171Sdim  return Error::success();
67343171Sdim}
68343171Sdim
69343171SdimError RecordPrinter::visit(NewBufferRecord &R) {
70343171Sdim  OS << formatv("<Thread ID: {0}>", R.tid()) << Delim;
71343171Sdim  return Error::success();
72343171Sdim}
73343171Sdim
74343171SdimError RecordPrinter::visit(EndBufferRecord &R) {
75343171Sdim  OS << "<End of Buffer>" << Delim;
76343171Sdim  return Error::success();
77343171Sdim}
78343171Sdim
79343171SdimError RecordPrinter::visit(FunctionRecord &R) {
80343171Sdim  // FIXME: Support symbolization here?
81343171Sdim  switch (R.recordType()) {
82343171Sdim  case RecordTypes::ENTER:
83343171Sdim    OS << formatv("<Function Enter: #{0} delta = +{1}>", R.functionId(),
84343171Sdim                  R.delta());
85343171Sdim    break;
86343171Sdim  case RecordTypes::ENTER_ARG:
87343171Sdim    OS << formatv("<Function Enter With Arg: #{0} delta = +{1}>",
88343171Sdim                  R.functionId(), R.delta());
89343171Sdim    break;
90343171Sdim  case RecordTypes::EXIT:
91343171Sdim    OS << formatv("<Function Exit: #{0} delta = +{1}>", R.functionId(),
92343171Sdim                  R.delta());
93343171Sdim    break;
94343171Sdim  case RecordTypes::TAIL_EXIT:
95343171Sdim    OS << formatv("<Function Tail Exit: #{0} delta = +{1}>", R.functionId(),
96343171Sdim                  R.delta());
97343171Sdim    break;
98343171Sdim  case RecordTypes::CUSTOM_EVENT:
99343171Sdim  case RecordTypes::TYPED_EVENT:
100343171Sdim    // TODO: Flag as a bug?
101343171Sdim    break;
102343171Sdim  }
103343171Sdim  OS << Delim;
104343171Sdim  return Error::success();
105343171Sdim}
106343171Sdim
107343171Sdim} // namespace xray
108343171Sdim} // namespace llvm
109