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 |