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