Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 14 | pmbaty | 1 | //===- XRayRecord.h - XRay Trace Record -----------------------------------===// |
| 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 | // 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 |
||
| 11 | // xray project. |
||
| 12 | // |
||
| 13 | //===----------------------------------------------------------------------===// |
||
| 14 | #ifndef LLVM_XRAY_XRAYRECORD_H |
||
| 15 | #define LLVM_XRAY_XRAYRECORD_H |
||
| 16 | |||
| 17 | #include <cstdint> |
||
| 18 | #include <vector> |
||
| 19 | #include <string> |
||
| 20 | |||
| 21 | namespace llvm { |
||
| 22 | namespace xray { |
||
| 23 | |||
| 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 |
||
| 26 | /// trace. |
||
| 27 | struct XRayFileHeader { |
||
| 28 | /// Version of the XRay implementation that produced this file. |
||
| 29 | uint16_t Version = 0; |
||
| 30 | |||
| 31 | /// A numeric identifier for the type of file this is. Best used in |
||
| 32 | /// combination with Version. |
||
| 33 | uint16_t Type = 0; |
||
| 34 | |||
| 35 | /// Whether the CPU that produced the timestamp counters (TSC) move at a |
||
| 36 | /// constant rate. |
||
| 37 | bool ConstantTSC; |
||
| 38 | |||
| 39 | /// Whether the CPU that produced the timestamp counters (TSC) do not stop. |
||
| 40 | bool NonstopTSC; |
||
| 41 | |||
| 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; |
||
| 46 | |||
| 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 |
||
| 49 | // buffer. |
||
| 50 | char FreeFormData[16]; |
||
| 51 | }; |
||
| 52 | |||
| 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 |
||
| 56 | /// of loading). |
||
| 57 | enum class RecordTypes { |
||
| 58 | ENTER, |
||
| 59 | EXIT, |
||
| 60 | TAIL_EXIT, |
||
| 61 | ENTER_ARG, |
||
| 62 | CUSTOM_EVENT, |
||
| 63 | TYPED_EVENT |
||
| 64 | }; |
||
| 65 | |||
| 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. |
||
| 69 | struct XRayRecord { |
||
| 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. |
||
| 74 | uint16_t RecordType; |
||
| 75 | |||
| 76 | /// The CPU where the thread is running. We assume number of CPUs <= 65536. |
||
| 77 | uint16_t CPU; |
||
| 78 | |||
| 79 | /// Identifies the type of record. |
||
| 80 | RecordTypes Type; |
||
| 81 | |||
| 82 | /// The function ID for the record, if this is a function call record. |
||
| 83 | int32_t FuncId; |
||
| 84 | |||
| 85 | /// Get the full 8 bytes of the TSC when we get the log record. |
||
| 86 | uint64_t TSC; |
||
| 87 | |||
| 88 | /// The thread ID for the currently running thread. |
||
| 89 | uint32_t TId; |
||
| 90 | |||
| 91 | /// The process ID for the currently running process. |
||
| 92 | uint32_t PId; |
||
| 93 | |||
| 94 | /// The function call arguments. |
||
| 95 | std::vector<uint64_t> CallArgs; |
||
| 96 | |||
| 97 | /// For custom and typed events, we provide the raw data from the trace. |
||
| 98 | std::string Data; |
||
| 99 | }; |
||
| 100 | |||
| 101 | } // namespace xray |
||
| 102 | } // namespace llvm |
||
| 103 | |||
| 104 | #endif // LLVM_XRAY_XRAYRECORD_H |