LLVM  4.0.0
YAMLXRayRecord.h
Go to the documentation of this file.
1 //===- YAMLXRayRecord.h - XRay Record YAML Support Definitions ------------===//
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 // Types and traits specialisations for YAML I/O of XRay log entries.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_XRAY_YAML_XRAY_RECORD_H
14 #define LLVM_XRAY_YAML_XRAY_RECORD_H
15 
16 #include <type_traits>
17 
19 #include "llvm/XRay/XRayRecord.h"
20 
21 namespace llvm {
22 namespace xray {
23 
25  uint16_t Version;
26  uint16_t Type;
28  bool NonstopTSC;
29  uint64_t CycleFrequency;
30 };
31 
33  uint16_t RecordType;
34  uint8_t CPU;
36  int32_t FuncId;
37  std::string Function;
38  uint64_t TSC;
40 };
41 
42 struct YAMLXRayTrace {
44  std::vector<YAMLXRayRecord> Records;
45 };
46 
47 } // namespace xray
48 
49 namespace yaml {
50 
51 // YAML Traits
52 // -----------
53 template <> struct ScalarEnumerationTraits<xray::RecordTypes> {
55  IO.enumCase(Type, "function-enter", xray::RecordTypes::ENTER);
56  IO.enumCase(Type, "function-exit", xray::RecordTypes::EXIT);
57  }
58 };
59 
60 template <> struct MappingTraits<xray::YAMLXRayFileHeader> {
61  static void mapping(IO &IO, xray::YAMLXRayFileHeader &Header) {
62  IO.mapRequired("version", Header.Version);
63  IO.mapRequired("type", Header.Type);
64  IO.mapRequired("constant-tsc", Header.ConstantTSC);
65  IO.mapRequired("nonstop-tsc", Header.NonstopTSC);
66  IO.mapRequired("cycle-frequency", Header.CycleFrequency);
67  }
68 };
69 
70 template <> struct MappingTraits<xray::YAMLXRayRecord> {
72  // FIXME: Make this type actually be descriptive
73  IO.mapRequired("type", Record.RecordType);
74  IO.mapRequired("func-id", Record.FuncId);
75  IO.mapOptional("function", Record.Function);
76  IO.mapRequired("cpu", Record.CPU);
77  IO.mapRequired("thread", Record.TId);
78  IO.mapRequired("kind", Record.Type);
79  IO.mapRequired("tsc", Record.TSC);
80  }
81 
82  static constexpr bool flow = true;
83 };
84 
85 template <> struct MappingTraits<xray::YAMLXRayTrace> {
87  // A trace file contains two parts, the header and the list of all the
88  // trace records.
89  IO.mapRequired("header", Trace.Header);
90  IO.mapRequired("records", Trace.Records);
91  }
92 };
93 
94 } // namespace yaml
95 } // namespace llvm
96 
97 LLVM_YAML_IS_SEQUENCE_VECTOR(xray::YAMLXRayRecord)
98 
99 #endif // LLVM_XRAY_YAML_XRAY_RECORD_H
void mapOptional(const char *Key, T &Val)
Definition: YAMLTraits.h:646
static void mapping(IO &IO, xray::YAMLXRayRecord &Record)
#define LLVM_YAML_IS_SEQUENCE_VECTOR(_type)
Utility for declaring that a std::vector of a particular type should be considered a YAML sequence...
Definition: YAMLTraits.h:1565
static void enumeration(IO &IO, xray::RecordTypes &Type)
This class should be specialized by any type that needs to be converted to/from a YAML mapping...
static void mapping(IO &IO, xray::YAMLXRayTrace &Trace)
void enumCase(T &Val, const char *Str, const T ConstVal)
Definition: YAMLTraits.h:581
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
RecordTypes
Determines the supported types of records that could be seen in XRay traces.
Definition: XRayRecord.h:51
This class should be specialized by any integral type that converts to/from a YAML scalar where there...
Definition: YAMLTraits.h:97
std::vector< YAMLXRayRecord > Records
static void mapping(IO &IO, xray::YAMLXRayFileHeader &Header)
void mapRequired(const char *Key, T &Val)
Definition: YAMLTraits.h:637
YAMLXRayFileHeader Header