IVGCVSW-3603 *Json printer prints full profiling hierarchy

Change-Id: Ide5acbf993c2bcff5265b72fc979caa6f183bb22
Signed-off-by: Derek Lamberti <derek.lamberti@arm.com>
diff --git a/src/armnn/JsonPrinter.hpp b/src/armnn/JsonPrinter.hpp
index 12a0891..04f56b0 100644
--- a/src/armnn/JsonPrinter.hpp
+++ b/src/armnn/JsonPrinter.hpp
@@ -8,16 +8,23 @@
 #include <ostream>
 #include <string.h>
 #include <map>
+#include <set>
 
 #include "Instrument.hpp"
 
 namespace armnn
 {
 
+enum class JsonObjectType
+{
+    Measurement,
+    Event
+};
+
 struct JsonChildObject
 {
     JsonChildObject(const std::string& label)
-            : m_Label(label), m_Unit(Measurement::Unit::TIME_MS)
+            : m_Label(label), m_Unit(Measurement::Unit::TIME_MS), m_Type(JsonObjectType::Event)
     {}
     JsonChildObject(const JsonChildObject&) = default;
 
@@ -31,7 +38,7 @@
         m_Children.push_back(childObject);
     }
 
-    JsonChildObject GetChild(const unsigned int index)
+    JsonChildObject& GetChild(const unsigned int index)
     {
         return m_Children[index];
     }
@@ -41,10 +48,26 @@
         m_Unit = unit;
     }
 
+    size_t NumChildren() const
+    {
+        return m_Children.size();
+    }
+
+    void SetType(JsonObjectType type)
+    {
+        m_Type = type;
+    }
+
+    JsonObjectType GetType() const
+    {
+        return m_Type;
+    }
+
     ~JsonChildObject() = default;
 
     std::string m_Label;
     Measurement::Unit m_Unit;
+    JsonObjectType m_Type;
     std::vector<double> m_Measurements;
     std::vector<JsonChildObject> m_Children;
 
@@ -55,14 +78,15 @@
 class JsonPrinter
 {
 public:
-    void PrintJsonChildObject(const JsonChildObject& object);
+    void PrintJsonChildObject(const JsonChildObject& object, size_t& id);
     void PrintHeader();
     void PrintArmNNHeader();
     void PrintFooter();
     void PrintSeparator();
     void PrintNewLine();
-    void PrintLabel(const std::string& label);
+    void PrintLabel(const std::string& label, size_t id);
     void PrintUnit(armnn::Measurement::Unit unit);
+    void PrintType(armnn::JsonObjectType type);
     void PrintMeasurementsList(const std::vector<double>& measurementsVector);
 
 public:
@@ -71,6 +95,7 @@
     {}
 
 private:
+    std::string MakeKey(const std::string& label, size_t id);
     void PrintTabs();
     void DecrementNumberOfTabs();
     void IncrementNumberOfTabs();