ArmNN
 22.05
JsonPrinter.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <string>
9 #include <map>
10 #include <set>
11 #include <sstream>
12 
13 #include <ProfilingGuid.hpp>
14 #include "Instrument.hpp"
15 #include "JsonUtils.hpp"
16 
17 namespace armnn
18 {
19 
20 enum class JsonObjectType
21 {
23  Event,
25 };
26 
28 {
29  // Object type changes according to the JsonObjectType specified in enum
30  JsonChildObject(const std::string& label)
31  : m_Label(label),
32  m_Unit(Measurement::Unit::TIME_MS),
33  m_Type(JsonObjectType::Event),
34  m_Guid(armnn::EmptyOptional()),
35  m_DetailsOnly(false)
36  {}
37  JsonChildObject(const JsonChildObject&) = default;
38 
39  void AddMeasurement(const double measurement)
40  {
41  m_Measurements.push_back(measurement);
42  }
43 
44  void SetAndParseDetails(std::string layerDetailsStr)
45  {
46  std::stringstream layerDetails(layerDetailsStr);
47  std::string stringLine;
48  while (std::getline(layerDetails, stringLine, '\n'))
49  {
50  m_LayerDetailsList.push_back(stringLine);
51  }
52  }
53 
54  void SetGuid(arm::pipe::ProfilingGuid guid)
55  {
57  }
58 
59  void AddChild(const JsonChildObject& childObject)
60  {
61  m_Children.push_back(childObject);
62  }
63 
64  JsonChildObject& GetChild(const unsigned int index)
65  {
66  return m_Children[index];
67  }
68 
69  void SetUnit(const Measurement::Unit unit)
70  {
71  m_Unit = unit;
72  }
73 
74  size_t NumChildren() const
75  {
76  return m_Children.size();
77  }
78 
80  {
81  m_Type = type;
82  }
83 
85  {
86  return m_Type;
87  }
88 
90  {
91  m_DetailsOnly = true;
92  }
93 
94  bool IsDetailsOnlyEnabled() const
95  {
96  return m_DetailsOnly;
97  }
98 
99  ~JsonChildObject() = default;
100 
101  std::string m_Label;
105  std::vector<double> m_Measurements;
106  std::vector<std::string> m_LayerDetailsList;
107  std::vector<JsonChildObject> m_Children;
108 
109 private:
110  bool m_DetailsOnly;
111  JsonChildObject() = delete;
112 };
113 
114 class JsonPrinter : public JsonUtils
115 {
116 public:
117  void PrintJsonChildObject(const JsonChildObject& object, size_t& id);
118  void PrintLabel(const std::string& label, size_t id);
119  void PrintUnit(armnn::Measurement::Unit unit);
120  void PrintType(armnn::JsonObjectType type);
121  void PrintGuid(arm::pipe::ProfilingGuid guid);
122  void PrintMeasurementsList(const std::vector<double>& measurementsVector);
123 
124 public:
125  JsonPrinter(std::ostream& outputStream)
126  : JsonUtils(outputStream), m_OutputStream(outputStream)
127  {}
128 
129 private:
130  std::string MakeKey(const std::string& label, size_t id);
131 
132  std::ostream& m_OutputStream;
133 };
134 
135 } // namespace armnn
JsonChildObject & GetChild(const unsigned int index)
Definition: JsonPrinter.hpp:64
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
void AddChild(const JsonChildObject &childObject)
Definition: JsonPrinter.hpp:59
std::vector< double > m_Measurements
JsonChildObject(const std::string &label)
Definition: JsonPrinter.hpp:30
Copyright (c) 2021 ARM Limited and Contributors.
bool IsDetailsOnlyEnabled() const
Definition: JsonPrinter.hpp:94
void SetAndParseDetails(std::string layerDetailsStr)
Definition: JsonPrinter.hpp:44
size_t NumChildren() const
Definition: JsonPrinter.hpp:74
void SetType(JsonObjectType type)
Definition: JsonPrinter.hpp:79
Optional< arm::pipe::ProfilingGuid > m_Guid
Measurement::Unit m_Unit
void AddMeasurement(const double measurement)
Definition: JsonPrinter.hpp:39
std::vector< JsonChildObject > m_Children
JsonObjectType GetType() const
Definition: JsonPrinter.hpp:84
void SetGuid(arm::pipe::ProfilingGuid guid)
Definition: JsonPrinter.hpp:54
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
std::vector< std::string > m_LayerDetailsList
void SetUnit(const Measurement::Unit unit)
Definition: JsonPrinter.hpp:69
JsonObjectType m_Type
JsonObjectType
Definition: JsonPrinter.hpp:20
JsonPrinter(std::ostream &outputStream)