ArmNN
 21.02
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 <ostream>
9 #include <string.h>
10 #include <map>
11 #include <set>
12 
13 #include "Instrument.hpp"
14 
15 namespace armnn
16 {
17 
18 enum class JsonObjectType
19 {
21  Event
22 };
23 
25 {
26  JsonChildObject(const std::string& label)
27  : m_Label(label), m_Unit(Measurement::Unit::TIME_MS), m_Type(JsonObjectType::Event)
28  {}
29  JsonChildObject(const JsonChildObject&) = default;
30 
31  void AddMeasurement(const double measurement)
32  {
33  m_Measurements.push_back(measurement);
34  }
35 
36  void AddChild(const JsonChildObject& childObject)
37  {
38  m_Children.push_back(childObject);
39  }
40 
41  JsonChildObject& GetChild(const unsigned int index)
42  {
43  return m_Children[index];
44  }
45 
46  void SetUnit(const Measurement::Unit unit)
47  {
48  m_Unit = unit;
49  }
50 
51  size_t NumChildren() const
52  {
53  return m_Children.size();
54  }
55 
57  {
58  m_Type = type;
59  }
60 
62  {
63  return m_Type;
64  }
65 
66  ~JsonChildObject() = default;
67 
68  std::string m_Label;
71  std::vector<double> m_Measurements;
72  std::vector<JsonChildObject> m_Children;
73 
74 private:
75  JsonChildObject() = delete;
76 };
77 
79 {
80 public:
81  void PrintJsonChildObject(const JsonChildObject& object, size_t& id);
82  void PrintHeader();
83  void PrintArmNNHeader();
84  void PrintFooter();
85  void PrintSeparator();
86  void PrintNewLine();
87  void PrintLabel(const std::string& label, size_t id);
88  void PrintUnit(armnn::Measurement::Unit unit);
89  void PrintType(armnn::JsonObjectType type);
90  void PrintMeasurementsList(const std::vector<double>& measurementsVector);
91 
92 public:
93  JsonPrinter(std::ostream &outputStream)
94  : m_OutputStream(outputStream), m_NumTabs(0)
95  {}
96 
97 private:
98  std::string MakeKey(const std::string& label, size_t id);
99  void PrintTabs();
100  void DecrementNumberOfTabs();
101  void IncrementNumberOfTabs();
102 
103  std::ostream &m_OutputStream;
104  unsigned int m_NumTabs;
105 };
106 
107 } // namespace armnn
JsonChildObject & GetChild(const unsigned int index)
Definition: JsonPrinter.hpp:41
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
void AddChild(const JsonChildObject &childObject)
Definition: JsonPrinter.hpp:36
std::vector< double > m_Measurements
Definition: JsonPrinter.hpp:71
JsonChildObject(const std::string &label)
Definition: JsonPrinter.hpp:26
Copyright (c) 2021 ARM Limited and Contributors.
size_t NumChildren() const
Definition: JsonPrinter.hpp:51
void SetType(JsonObjectType type)
Definition: JsonPrinter.hpp:56
Measurement::Unit m_Unit
Definition: JsonPrinter.hpp:69
void AddMeasurement(const double measurement)
Definition: JsonPrinter.hpp:31
std::vector< JsonChildObject > m_Children
Definition: JsonPrinter.hpp:72
JsonObjectType GetType() const
Definition: JsonPrinter.hpp:61
void SetUnit(const Measurement::Unit unit)
Definition: JsonPrinter.hpp:46
JsonObjectType m_Type
Definition: JsonPrinter.hpp:70
JsonObjectType
Definition: JsonPrinter.hpp:18
JsonPrinter(std::ostream &outputStream)
Definition: JsonPrinter.hpp:93