blob: 1bf9e3175b2b23db755c4d4f7b541b57532e2b89 [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
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
14namespace armnn
15{
16
17struct 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
51private:
52 JsonChildObject() = delete;
53};
54
55class JsonPrinter
56{
57public:
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
68public:
69 JsonPrinter(std::ostream &outputStream)
70 : m_OutputStream(outputStream), m_NumTabs(0)
71 {}
72
73private:
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