ArmNN
 21.08
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  {}
36  JsonChildObject(const JsonChildObject&) = default;
37 
38  void AddMeasurement(const double measurement)
39  {
40  m_Measurements.push_back(measurement);
41  }
42 
43  void SetAndParseDetails(std::string layerDetailsStr)
44  {
45  std::stringstream layerDetails(layerDetailsStr);
46  std::string stringLine;
47  while (std::getline(layerDetails, stringLine, '\n'))
48  {
49  m_LayerDetailsList.push_back(stringLine);
50  }
51  }
52 
53  void SetGuid(profiling::ProfilingGuid guid)
54  {
56  }
57 
58  void AddChild(const JsonChildObject& childObject)
59  {
60  m_Children.push_back(childObject);
61  }
62 
63  JsonChildObject& GetChild(const unsigned int index)
64  {
65  return m_Children[index];
66  }
67 
68  void SetUnit(const Measurement::Unit unit)
69  {
70  m_Unit = unit;
71  }
72 
73  size_t NumChildren() const
74  {
75  return m_Children.size();
76  }
77 
79  {
80  m_Type = type;
81  }
82 
84  {
85  return m_Type;
86  }
87 
88  ~JsonChildObject() = default;
89 
90  std::string m_Label;
94  std::vector<double> m_Measurements;
95  std::vector<std::string> m_LayerDetailsList;
96  std::vector<JsonChildObject> m_Children;
97 
98 private:
99  JsonChildObject() = delete;
100 };
101 
102 class JsonPrinter : public JsonUtils
103 {
104 public:
105  void PrintJsonChildObject(const JsonChildObject& object, size_t& id);
106  void PrintLabel(const std::string& label, size_t id);
107  void PrintUnit(armnn::Measurement::Unit unit);
108  void PrintType(armnn::JsonObjectType type);
109  void PrintGuid(armnn::profiling::ProfilingGuid guid);
110  void PrintMeasurementsList(const std::vector<double>& measurementsVector);
111 
112 public:
113  JsonPrinter(std::ostream& outputStream)
114  : JsonUtils(outputStream), m_OutputStream(outputStream)
115  {}
116 
117 private:
118  std::string MakeKey(const std::string& label, size_t id);
119 
120  std::ostream& m_OutputStream;
121 };
122 
123 } // namespace armnn
JsonChildObject & GetChild(const unsigned int index)
Definition: JsonPrinter.hpp:63
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
void AddChild(const JsonChildObject &childObject)
Definition: JsonPrinter.hpp:58
std::vector< double > m_Measurements
Definition: JsonPrinter.hpp:94
JsonChildObject(const std::string &label)
Definition: JsonPrinter.hpp:30
Copyright (c) 2021 ARM Limited and Contributors.
void SetAndParseDetails(std::string layerDetailsStr)
Definition: JsonPrinter.hpp:43
size_t NumChildren() const
Definition: JsonPrinter.hpp:73
Optional< profiling::ProfilingGuid > m_Guid
Definition: JsonPrinter.hpp:93
void SetType(JsonObjectType type)
Definition: JsonPrinter.hpp:78
Measurement::Unit m_Unit
Definition: JsonPrinter.hpp:91
void AddMeasurement(const double measurement)
Definition: JsonPrinter.hpp:38
std::vector< JsonChildObject > m_Children
Definition: JsonPrinter.hpp:96
JsonObjectType GetType() const
Definition: JsonPrinter.hpp:83
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
Definition: JsonPrinter.hpp:95
void SetUnit(const Measurement::Unit unit)
Definition: JsonPrinter.hpp:68
void SetGuid(profiling::ProfilingGuid guid)
Definition: JsonPrinter.hpp:53
JsonObjectType m_Type
Definition: JsonPrinter.hpp:92
JsonObjectType
Definition: JsonPrinter.hpp:20
JsonPrinter(std::ostream &outputStream)