2017-01-11 06:39:09 +00:00
|
|
|
//===- XRayRecord.h - XRay Trace Record -----------------------------------===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This file replicates the record definition for XRay log entries. This should
|
|
|
|
// follow the evolution of the log record versions supported in the compiler-rt
|
|
|
|
// xray project.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_XRAY_XRAY_RECORD_H
|
|
|
|
#define LLVM_XRAY_XRAY_RECORD_H
|
|
|
|
|
|
|
|
#include <cstdint>
|
2017-11-21 00:23:19 +00:00
|
|
|
#include <vector>
|
2017-01-11 06:39:09 +00:00
|
|
|
|
|
|
|
namespace llvm {
|
|
|
|
namespace xray {
|
|
|
|
|
|
|
|
/// XRay traces all have a header providing some top-matter information useful
|
|
|
|
/// to help tools determine how to interpret the information available in the
|
|
|
|
/// trace.
|
|
|
|
struct XRayFileHeader {
|
|
|
|
/// Version of the XRay implementation that produced this file.
|
|
|
|
uint16_t Version = 0;
|
|
|
|
|
|
|
|
/// A numeric identifier for the type of file this is. Best used in
|
|
|
|
/// combination with Version.
|
|
|
|
uint16_t Type = 0;
|
|
|
|
|
|
|
|
/// Whether the CPU that produced the timestamp counters (TSC) move at a
|
|
|
|
/// constant rate.
|
|
|
|
bool ConstantTSC;
|
|
|
|
|
|
|
|
/// Whether the CPU that produced the timestamp counters (TSC) do not stop.
|
|
|
|
bool NonstopTSC;
|
|
|
|
|
|
|
|
/// The number of cycles per second for the CPU that produced the timestamp
|
|
|
|
/// counter (TSC) values. Useful for estimating the amount of time that
|
|
|
|
/// elapsed between two TSCs on some platforms.
|
|
|
|
uint64_t CycleFrequency = 0;
|
2017-03-29 06:10:12 +00:00
|
|
|
|
|
|
|
// This is different depending on the type of xray record. The naive format
|
|
|
|
// stores a Wallclock timespec. FDR logging stores the size of a thread
|
|
|
|
// buffer.
|
|
|
|
char FreeFormData[16];
|
2017-01-11 06:39:09 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/// Determines the supported types of records that could be seen in XRay traces.
|
|
|
|
/// This may or may not correspond to actual record types in the raw trace (as
|
|
|
|
/// the loader implementation may synthesize this information in the process of
|
|
|
|
/// of loading).
|
2017-09-27 04:48:03 +00:00
|
|
|
enum class RecordTypes { ENTER, EXIT, TAIL_EXIT, ENTER_ARG };
|
2017-01-11 06:39:09 +00:00
|
|
|
|
|
|
|
struct XRayRecord {
|
|
|
|
/// The type of record.
|
|
|
|
uint16_t RecordType;
|
|
|
|
|
2017-02-17 01:47:16 +00:00
|
|
|
/// The CPU where the thread is running. We assume number of CPUs <= 65536.
|
|
|
|
uint16_t CPU;
|
2017-01-11 06:39:09 +00:00
|
|
|
|
|
|
|
/// Identifies the type of record.
|
|
|
|
RecordTypes Type;
|
|
|
|
|
|
|
|
/// The function ID for the record.
|
|
|
|
int32_t FuncId;
|
|
|
|
|
|
|
|
/// Get the full 8 bytes of the TSC when we get the log record.
|
|
|
|
uint64_t TSC;
|
|
|
|
|
|
|
|
/// The thread ID for the currently running thread.
|
|
|
|
uint32_t TId;
|
2017-09-27 04:48:03 +00:00
|
|
|
|
2018-07-13 05:38:22 +00:00
|
|
|
/// The process ID for the currently running process.
|
|
|
|
uint32_t PId;
|
|
|
|
|
2017-09-27 04:48:03 +00:00
|
|
|
/// The function call arguments.
|
|
|
|
std::vector<uint64_t> CallArgs;
|
2017-01-11 06:39:09 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace xray
|
|
|
|
} // namespace llvm
|
|
|
|
|
|
|
|
#endif // LLVM_XRAY_XRAY_RECORD_H
|