YAMLXRayRecord.h revision 321369
1272343Sngie//===- YAMLXRayRecord.h - XRay Record YAML Support Definitions ------------===// 2272343Sngie// 3272343Sngie// The LLVM Compiler Infrastructure 4272343Sngie// 5272343Sngie// This file is distributed under the University of Illinois Open Source 6272343Sngie// License. See LICENSE.TXT for details. 7272343Sngie// 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 18#include "llvm/Support/YAMLTraits.h" 19#include "llvm/XRay/XRayRecord.h" 20 21namespace llvm { 22namespace xray { 23 24struct YAMLXRayFileHeader { 25 uint16_t Version; 26 uint16_t Type; 27 bool ConstantTSC; 28 bool NonstopTSC; 29 uint64_t CycleFrequency; 30}; 31 32struct YAMLXRayRecord { 33 uint16_t RecordType; 34 uint16_t CPU; 35 RecordTypes Type; 36 int32_t FuncId; 37 std::string Function; 38 uint64_t TSC; 39 uint32_t TId; 40}; 41 42struct YAMLXRayTrace { 43 YAMLXRayFileHeader Header; 44 std::vector<YAMLXRayRecord> Records; 45}; 46 47} // namespace xray 48 49namespace yaml { 50 51// YAML Traits 52// ----------- 53template <> struct ScalarEnumerationTraits<xray::RecordTypes> { 54 static void enumeration(IO &IO, xray::RecordTypes &Type) { 55 IO.enumCase(Type, "function-enter", xray::RecordTypes::ENTER); 56 IO.enumCase(Type, "function-exit", xray::RecordTypes::EXIT); 57 } 58}; 59 60template <> 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 70template <> struct MappingTraits<xray::YAMLXRayRecord> { 71 static void mapping(IO &IO, xray::YAMLXRayRecord &Record) { 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 85template <> struct MappingTraits<xray::YAMLXRayTrace> { 86 static void mapping(IO &IO, xray::YAMLXRayTrace &Trace) { 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 97LLVM_YAML_IS_SEQUENCE_VECTOR(xray::YAMLXRayRecord) 98 99#endif // LLVM_XRAY_YAML_XRAY_RECORD_H 100