• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
20     Measurement,
21     Event
22 };
23 
24 struct JsonChildObject
25 {
JsonChildObjectarmnn::JsonChildObject26     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 
AddMeasurementarmnn::JsonChildObject31     void AddMeasurement(const double measurement)
32     {
33         m_Measurements.push_back(measurement);
34     }
35 
AddChildarmnn::JsonChildObject36     void AddChild(const JsonChildObject& childObject)
37     {
38         m_Children.push_back(childObject);
39     }
40 
GetChildarmnn::JsonChildObject41     JsonChildObject& GetChild(const unsigned int index)
42     {
43         return m_Children[index];
44     }
45 
SetUnitarmnn::JsonChildObject46     void SetUnit(const Measurement::Unit unit)
47     {
48         m_Unit = unit;
49     }
50 
NumChildrenarmnn::JsonChildObject51     size_t NumChildren() const
52     {
53         return m_Children.size();
54     }
55 
SetTypearmnn::JsonChildObject56     void SetType(JsonObjectType type)
57     {
58         m_Type = type;
59     }
60 
GetTypearmnn::JsonChildObject61     JsonObjectType GetType() const
62     {
63         return m_Type;
64     }
65 
66     ~JsonChildObject() = default;
67 
68     std::string m_Label;
69     Measurement::Unit m_Unit;
70     JsonObjectType m_Type;
71     std::vector<double> m_Measurements;
72     std::vector<JsonChildObject> m_Children;
73 
74 private:
75     JsonChildObject() = delete;
76 };
77 
78 class JsonPrinter
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:
JsonPrinter(std::ostream & outputStream)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