Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  105.