1 //===- XRayRecord.h - XRay Trace Record -----------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // This file replicates the record definition for XRay log entries. This should
10 // follow the evolution of the log record versions supported in the compiler-rt
13 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_XRAY_XRAY_RECORD_H
15 #define LLVM_XRAY_XRAY_RECORD_H
24 /// XRay traces all have a header providing some top-matter information useful
25 /// to help tools determine how to interpret the information available in the
27 struct XRayFileHeader
{
28 /// Version of the XRay implementation that produced this file.
31 /// A numeric identifier for the type of file this is. Best used in
32 /// combination with Version.
35 /// Whether the CPU that produced the timestamp counters (TSC) move at a
39 /// Whether the CPU that produced the timestamp counters (TSC) do not stop.
42 /// The number of cycles per second for the CPU that produced the timestamp
43 /// counter (TSC) values. Useful for estimating the amount of time that
44 /// elapsed between two TSCs on some platforms.
45 uint64_t CycleFrequency
= 0;
47 // This is different depending on the type of xray record. The naive format
48 // stores a Wallclock timespec. FDR logging stores the size of a thread
50 char FreeFormData
[16];
53 /// Determines the supported types of records that could be seen in XRay traces.
54 /// This may or may not correspond to actual record types in the raw trace (as
55 /// the loader implementation may synthesize this information in the process of
57 enum class RecordTypes
{
66 /// An XRayRecord is the denormalized view of data associated in a trace. These
67 /// records may not correspond to actual entries in the raw traces, but they are
68 /// the logical representation of records in a higher-level event log.
70 /// RecordType values are used as "sub-types" which have meaning in the
71 /// context of the `Type` below. For function call and custom event records,
72 /// the RecordType is always 0, while for typed events we store the type in
73 /// the RecordType field.
76 /// The CPU where the thread is running. We assume number of CPUs <= 65536.
79 /// Identifies the type of record.
82 /// The function ID for the record, if this is a function call record.
85 /// Get the full 8 bytes of the TSC when we get the log record.
88 /// The thread ID for the currently running thread.
91 /// The process ID for the currently running process.
94 /// The function call arguments.
95 std::vector
<uint64_t> CallArgs
;
97 /// For custom and typed events, we provide the raw data from the trace.
104 #endif // LLVM_XRAY_XRAY_RECORD_H