[Demangle] Add a few more options to the microsoft demangler
[llvm-complete.git] / lib / XRay / FDRTraceExpander.cpp
blobcb7f66bccd7e8e232009dc890ad5a5eefab5ce22
1 //===- FDRTraceExpander.cpp -----------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 #include "llvm/XRay/FDRTraceExpander.h"
10 namespace llvm {
11 namespace xray {
13 void TraceExpander::resetCurrentRecord() {
14 if (BuildingRecord)
15 C(CurrentRecord);
16 BuildingRecord = false;
17 CurrentRecord.CallArgs.clear();
18 CurrentRecord.Data.clear();
21 Error TraceExpander::visit(BufferExtents &) {
22 resetCurrentRecord();
23 return Error::success();
26 Error TraceExpander::visit(WallclockRecord &) { return Error::success(); }
28 Error TraceExpander::visit(NewCPUIDRecord &R) {
29 CPUId = R.cpuid();
30 BaseTSC = R.tsc();
31 return Error::success();
34 Error TraceExpander::visit(TSCWrapRecord &R) {
35 BaseTSC = R.tsc();
36 return Error::success();
39 Error TraceExpander::visit(CustomEventRecord &R) {
40 resetCurrentRecord();
41 if (!IgnoringRecords) {
42 CurrentRecord.TSC = R.tsc();
43 CurrentRecord.CPU = R.cpu();
44 CurrentRecord.PId = PID;
45 CurrentRecord.TId = TID;
46 CurrentRecord.Type = RecordTypes::CUSTOM_EVENT;
47 CurrentRecord.Data = R.data();
48 BuildingRecord = true;
50 return Error::success();
53 Error TraceExpander::visit(CustomEventRecordV5 &R) {
54 resetCurrentRecord();
55 if (!IgnoringRecords) {
56 BaseTSC += R.delta();
57 CurrentRecord.TSC = BaseTSC;
58 CurrentRecord.CPU = CPUId;
59 CurrentRecord.PId = PID;
60 CurrentRecord.TId = TID;
61 CurrentRecord.Type = RecordTypes::CUSTOM_EVENT;
62 CurrentRecord.Data = R.data();
63 BuildingRecord = true;
65 return Error::success();
68 Error TraceExpander::visit(TypedEventRecord &R) {
69 resetCurrentRecord();
70 if (!IgnoringRecords) {
71 BaseTSC += R.delta();
72 CurrentRecord.TSC = BaseTSC;
73 CurrentRecord.CPU = CPUId;
74 CurrentRecord.PId = PID;
75 CurrentRecord.TId = TID;
76 CurrentRecord.RecordType = R.eventType();
77 CurrentRecord.Type = RecordTypes::TYPED_EVENT;
78 CurrentRecord.Data = R.data();
79 BuildingRecord = true;
81 return Error::success();
84 Error TraceExpander::visit(CallArgRecord &R) {
85 CurrentRecord.CallArgs.push_back(R.arg());
86 CurrentRecord.Type = RecordTypes::ENTER_ARG;
87 return Error::success();
90 Error TraceExpander::visit(PIDRecord &R) {
91 PID = R.pid();
92 return Error::success();
95 Error TraceExpander::visit(NewBufferRecord &R) {
96 if (IgnoringRecords)
97 IgnoringRecords = false;
98 TID = R.tid();
99 if (LogVersion == 2)
100 PID = R.tid();
101 return Error::success();
104 Error TraceExpander::visit(EndBufferRecord &) {
105 IgnoringRecords = true;
106 resetCurrentRecord();
107 return Error::success();
110 Error TraceExpander::visit(FunctionRecord &R) {
111 resetCurrentRecord();
112 if (!IgnoringRecords) {
113 BaseTSC += R.delta();
114 CurrentRecord.Type = R.recordType();
115 CurrentRecord.FuncId = R.functionId();
116 CurrentRecord.TSC = BaseTSC;
117 CurrentRecord.PId = PID;
118 CurrentRecord.TId = TID;
119 CurrentRecord.CPU = CPUId;
120 BuildingRecord = true;
122 return Error::success();
125 Error TraceExpander::flush() {
126 resetCurrentRecord();
127 return Error::success();
130 } // namespace xray
131 } // namespace llvm