Release 18.08
[platform/upstream/armnn.git] / src / armnn / JsonPrinter.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // See LICENSE file in the project root for full license information.
4 //
5
6 #pragma once
7
8 #include <ostream>
9 #include <string.h>
10 #include <map>
11
12 #include "Instrument.hpp"
13
14 namespace armnn
15 {
16
17 struct JsonChildObject
18 {
19     JsonChildObject(const std::string& label)
20             : m_Label(label), m_Unit(Measurement::Unit::TIME_MS)
21     {}
22     JsonChildObject(const JsonChildObject&) = default;
23
24     void AddMeasurement(const double measurement)
25     {
26         m_Measurements.push_back(measurement);
27     }
28
29     void AddChild(const JsonChildObject& childObject)
30     {
31         m_Children.push_back(childObject);
32     }
33
34     JsonChildObject GetChild(const unsigned int index)
35     {
36         return m_Children[index];
37     }
38
39     void SetUnit(const Measurement::Unit unit)
40     {
41         m_Unit = unit;
42     }
43
44     ~JsonChildObject() = default;
45
46     std::string m_Label;
47     Measurement::Unit m_Unit;
48     std::vector<double> m_Measurements;
49     std::vector<JsonChildObject> m_Children;
50
51 private:
52     JsonChildObject() = delete;
53 };
54
55 class JsonPrinter
56 {
57 public:
58     void PrintJsonChildObject(const JsonChildObject& object);
59     void PrintHeader();
60     void PrintArmNNHeader();
61     void PrintFooter();
62     void PrintSeparator();
63     void PrintNewLine();
64     void PrintLabel(const std::string& label);
65     void PrintUnit(armnn::Measurement::Unit unit);
66     void PrintMeasurementsList(const std::vector<double>& measurementsVector);
67
68 public:
69     JsonPrinter(std::ostream &outputStream)
70         : m_OutputStream(outputStream), m_NumTabs(0)
71     {}
72
73 private:
74     void PrintTabs();
75     void DecrementNumberOfTabs();
76     void IncrementNumberOfTabs();
77
78     std::ostream &m_OutputStream;
79     unsigned int m_NumTabs;
80 };
81
82 } // namespace armnn