Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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