]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/XRay/XRayRecord.h
Merge libc++ trunk r300890, and update build glue.
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / XRay / XRayRecord.h
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 };
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
78 } // namespace xray
79 } // namespace llvm
80
81 #endif // LLVM_XRAY_XRAY_RECORD_H