ArmNN
 25.11
Loading...
Searching...
No Matches
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 <string>
9#include <map>
10#include <set>
11#include <sstream>
12
13#include <ProfilingGuid.hpp>
14#include "Instrument.hpp"
15#include "JsonUtils.hpp"
16
17namespace armnn
18{
19
26
28{
29 // Object type changes according to the JsonObjectType specified in enum
30 JsonChildObject(const std::string& label)
31 : m_Label(label),
32 m_Unit(Measurement::Unit::TIME_MS),
35 m_DetailsOnly(false)
36 {}
38
39 void AddMeasurement(const double measurement)
40 {
41 m_Measurements.push_back(measurement);
42 }
43
44 void SetAndParseDetails(std::string layerDetailsStr)
45 {
46 std::stringstream layerDetails(layerDetailsStr);
47 std::string stringLine;
48 while (std::getline(layerDetails, stringLine, '\n'))
49 {
50 m_LayerDetailsList.push_back(stringLine);
51 }
52 }
53
54 void SetGuid(arm::pipe::ProfilingGuid guid)
55 {
57 }
58
59 void AddChild(const JsonChildObject& childObject)
60 {
61 m_Children.push_back(childObject);
62 }
63
64 JsonChildObject& GetChild(const unsigned int index)
65 {
66 return m_Children[index];
67 }
68
69 void SetUnit(const Measurement::Unit unit)
70 {
71 m_Unit = unit;
72 }
73
74 size_t NumChildren() const
75 {
76 return m_Children.size();
77 }
78
80 {
81 m_Type = type;
82 }
83
85 {
86 return m_Type;
87 }
88
90 {
91 m_DetailsOnly = true;
92 }
93
95 {
96 return m_DetailsOnly;
97 }
98
99 ~JsonChildObject() = default;
100
101 std::string m_Label;
105 std::vector<double> m_Measurements;
106 std::vector<std::string> m_LayerDetailsList;
107 std::vector<JsonChildObject> m_Children;
108
109private:
110 bool m_DetailsOnly;
111 JsonChildObject() = delete;
112};
113
114class JsonPrinter : public JsonUtils
115{
116public:
117 void PrintJsonChildObject(const JsonChildObject& object, size_t& id);
118 void PrintLabel(const std::string& label, size_t id);
121 void PrintGuid(arm::pipe::ProfilingGuid guid);
122 void PrintMeasurementsList(const std::vector<double>& measurementsVector);
123
124public:
125 JsonPrinter(std::ostream& outputStream)
126 : JsonUtils(outputStream), m_OutputStream(outputStream)
127 {}
128
129private:
130 std::string MakeKey(const std::string& label, size_t id);
131
132 std::ostream& m_OutputStream;
133};
134
135} // namespace armnn
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
void PrintMeasurementsList(const std::vector< double > &measurementsVector)
void PrintType(armnn::JsonObjectType type)
void PrintUnit(armnn::Measurement::Unit unit)
void PrintLabel(const std::string &label, size_t id)
void PrintGuid(arm::pipe::ProfilingGuid guid)
void PrintJsonChildObject(const JsonChildObject &object, size_t &id)
JsonPrinter(std::ostream &outputStream)
JsonUtils(std::ostream &outputStream)
Definition JsonUtils.hpp:19
Copyright (c) 2021 ARM Limited and Contributors.
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition Optional.hpp:32
std::vector< double > m_Measurements
std::vector< std::string > m_LayerDetailsList
JsonChildObject & GetChild(const unsigned int index)
JsonChildObject(const JsonChildObject &)=default
size_t NumChildren() const
JsonChildObject(const std::string &label)
void AddChild(const JsonChildObject &childObject)
void SetAndParseDetails(std::string layerDetailsStr)
void SetType(JsonObjectType type)
JsonObjectType GetType() const
void SetUnit(const Measurement::Unit unit)
Optional< arm::pipe::ProfilingGuid > m_Guid
void SetGuid(arm::pipe::ProfilingGuid guid)
bool IsDetailsOnlyEnabled() const
Measurement::Unit m_Unit
std::vector< JsonChildObject > m_Children
void AddMeasurement(const double measurement)