1 //===- XRayRecord.h - XRay Trace Record -----------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file replicates the record definition for XRay log entries. This should 11 // follow the evolution of the log record versions supported in the compiler-rt 12 // xray project. 13 // 14 //===----------------------------------------------------------------------===// 15 #ifndef LLVM_XRAY_XRAY_RECORD_H 16 #define LLVM_XRAY_XRAY_RECORD_H 17 18 #include <cstdint> 19 20 namespace llvm { 21 namespace xray { 22 23 /// XRay traces all have a header providing some top-matter information useful 24 /// to help tools determine how to interpret the information available in the 25 /// trace. 26 struct XRayFileHeader { 27 /// Version of the XRay implementation that produced this file. 28 uint16_t Version = 0; 29 30 /// A numeric identifier for the type of file this is. Best used in 31 /// combination with Version. 32 uint16_t Type = 0; 33 34 /// Whether the CPU that produced the timestamp counters (TSC) move at a 35 /// constant rate. 36 bool ConstantTSC; 37 38 /// Whether the CPU that produced the timestamp counters (TSC) do not stop. 39 bool NonstopTSC; 40 41 /// The number of cycles per second for the CPU that produced the timestamp 42 /// counter (TSC) values. Useful for estimating the amount of time that 43 /// elapsed between two TSCs on some platforms. 44 uint64_t CycleFrequency = 0; 45 46 // This is different depending on the type of xray record. The naive format 47 // stores a Wallclock timespec. FDR logging stores the size of a thread 48 // buffer. 49 char FreeFormData[16]; 50 }; 51 52 /// Determines the supported types of records that could be seen in XRay traces. 53 /// This may or may not correspond to actual record types in the raw trace (as 54 /// the loader implementation may synthesize this information in the process of 55 /// of loading). 56 enum class RecordTypes { ENTER, EXIT, TAIL_EXIT, ENTER_ARG }; 57 58 struct XRayRecord { 59 /// The type of record. 60 uint16_t RecordType; 61 62 /// The CPU where the thread is running. We assume number of CPUs <= 65536. 63 uint16_t CPU; 64 65 /// Identifies the type of record. 66 RecordTypes Type; 67 68 /// The function ID for the record. 69 int32_t FuncId; 70 71 /// Get the full 8 bytes of the TSC when we get the log record. 72 uint64_t TSC; 73 74 /// The thread ID for the currently running thread. 75 uint32_t TId; 76 77 /// The function call arguments. 78 std::vector<uint64_t> CallArgs; 79 }; 80 81 } // namespace xray 82 } // namespace llvm 83 84 #endif // LLVM_XRAY_XRAY_RECORD_H 85