1//===- FDRTraceExpander.h - XRay FDR Mode Log Expander --------------------===// 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// 9// We define an FDR record visitor which can re-constitute XRayRecord instances 10// from a sequence of FDR mode records in arrival order into a collection. 11// 12//===----------------------------------------------------------------------===// 13#ifndef LLVM_XRAY_FDRTRACEEXPANDER_H 14#define LLVM_XRAY_FDRTRACEEXPANDER_H 15 16#include "llvm/ADT/STLExtras.h" 17#include "llvm/XRay/FDRRecords.h" 18#include "llvm/XRay/XRayRecord.h" 19 20namespace llvm { 21namespace xray { 22 23class TraceExpander : public RecordVisitor { 24 // Type-erased callback for handling individual XRayRecord instances. 25 function_ref<void(const XRayRecord &)> C; 26 int32_t PID = 0; 27 int32_t TID = 0; 28 uint64_t BaseTSC = 0; 29 XRayRecord CurrentRecord{0, 0, RecordTypes::ENTER, 0, 0, 0, 0, {}, {}}; 30 uint16_t CPUId = 0; 31 uint16_t LogVersion = 0; 32 bool BuildingRecord = false; 33 bool IgnoringRecords = false; 34 35 void resetCurrentRecord(); 36 37public: 38 explicit TraceExpander(function_ref<void(const XRayRecord &)> F, uint16_t L) 39 : C(std::move(F)), LogVersion(L) {} 40 41 Error visit(BufferExtents &) override; 42 Error visit(WallclockRecord &) override; 43 Error visit(NewCPUIDRecord &) override; 44 Error visit(TSCWrapRecord &) override; 45 Error visit(CustomEventRecord &) override; 46 Error visit(CallArgRecord &) override; 47 Error visit(PIDRecord &) override; 48 Error visit(NewBufferRecord &) override; 49 Error visit(EndBufferRecord &) override; 50 Error visit(FunctionRecord &) override; 51 Error visit(CustomEventRecordV5 &) override; 52 Error visit(TypedEventRecord &) override; 53 54 // Must be called after all the records have been processed, to handle the 55 // most recent record generated. 56 Error flush(); 57}; 58 59} // namespace xray 60} // namespace llvm 61 62#endif // LLVM_XRAY_FDRTRACEEXPANDER_H 63