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 |