IVGCVSW-6291 Issue parsing profiling layer details

 * Remove ConfigureDetailsObject function as it does not have ProfilerImpl scope
 * Add Graph title into Json structure

Signed-off-by: Keith Davis <keith.davis@arm.com>
Change-Id: Ia5068a5a457a77fd01e974e0b5aa0f309f15bfa7
diff --git a/src/armnn/JsonPrinter.cpp b/src/armnn/JsonPrinter.cpp
index 94ff7c0..4be956b 100644
--- a/src/armnn/JsonPrinter.cpp
+++ b/src/armnn/JsonPrinter.cpp
@@ -45,12 +45,29 @@
     }
     else if (object.GetType() == JsonObjectType::ExecObjectDesc)
     {
+        // Add details opening
+        DecrementNumberOfTabs();
+        PrintTabs();
+        m_OutputStream << std::quoted("Graph") << ":[{";
+        PrintNewLine();
+        IncrementNumberOfTabs();
+
+        // Fill details body
         for (std::string stringLine : object.m_LayerDetailsList)
         {
            PrintTabs();
            m_OutputStream << stringLine;
            PrintNewLine();
         }
+
+        // Close out details
+        DecrementNumberOfTabs();
+        PrintTabs();
+
+        object.IsDetailsOnlyEnabled() ? m_OutputStream << "]" : m_OutputStream << "],";
+
+        PrintNewLine();
+        IncrementNumberOfTabs();
     }
     if (!object.m_Children.empty())
     {
diff --git a/src/armnn/JsonPrinter.hpp b/src/armnn/JsonPrinter.hpp
index 9e8ecb4..d9b8386 100644
--- a/src/armnn/JsonPrinter.hpp
+++ b/src/armnn/JsonPrinter.hpp
@@ -31,7 +31,8 @@
         : m_Label(label),
           m_Unit(Measurement::Unit::TIME_MS),
           m_Type(JsonObjectType::Event),
-          m_Guid(armnn::EmptyOptional())
+          m_Guid(armnn::EmptyOptional()),
+          m_DetailsOnly(false)
     {}
     JsonChildObject(const JsonChildObject&) = default;
 
@@ -85,6 +86,16 @@
         return m_Type;
     }
 
+    void EnableDetailsOnly()
+    {
+        m_DetailsOnly = true;
+    }
+
+    bool IsDetailsOnlyEnabled() const
+    {
+        return m_DetailsOnly;
+    }
+
     ~JsonChildObject() = default;
 
     std::string m_Label;
@@ -96,6 +107,7 @@
     std::vector<JsonChildObject> m_Children;
 
 private:
+    bool m_DetailsOnly;
     JsonChildObject() = delete;
 };
 
diff --git a/src/armnn/Profiling.cpp b/src/armnn/Profiling.cpp
index 6a3522b..e7df459 100644
--- a/src/armnn/Profiling.cpp
+++ b/src/armnn/Profiling.cpp
@@ -411,7 +411,12 @@
          || m_DetailsToStdOutMethod == ProfilingDetailsMethod::DetailsWithEvents))
     {
         JsonChildObject detailsObject{ "layer_details" };
-        ConfigureDetailsObject(detailsObject, m_ProfilingDetails.get()->GetProfilingDetails());
+        if (m_DetailsToStdOutMethod == ProfilingDetailsMethod::DetailsOnly)
+        {
+            detailsObject.EnableDetailsOnly();
+        }
+        detailsObject.SetType(JsonObjectType::ExecObjectDesc);
+        detailsObject.SetAndParseDetails(m_ProfilingDetails.get()->GetProfilingDetails());
 
         size_t id = 0;
         printer.PrintJsonChildObject(detailsObject, id);
@@ -428,9 +433,9 @@
         printer.PrintSeparator();
         printer.PrintNewLine();
         printer.PrintJsonChildObject(inferenceObject, id);
+        printer.PrintNewLine();
     }
     // end of ArmNN
-    printer.PrintNewLine();
     printer.PrintFooter();
 
     // end of main JSON object
diff --git a/src/armnn/ProfilingDetails.hpp b/src/armnn/ProfilingDetails.hpp
index befc437..1bed395 100644
--- a/src/armnn/ProfilingDetails.hpp
+++ b/src/armnn/ProfilingDetails.hpp
@@ -36,6 +36,13 @@
                             const WorkloadInfo& infos,
                             const profiling::ProfilingGuid guid)
     {
+        // Once details exist, we can assume we're on the second iteration of details
+        if (m_DetailsExist)
+        {
+            PrintSeparator();
+            PrintNewLine();
+        }
+
         m_ProfilingDetails << std::quoted("Name") << ": " << std::quoted(workloadName) << " ";
         PrintHeader();
 
@@ -78,8 +85,6 @@
         StringifyLayerParameters<DescriptorType>::Serialize(extractParams, desc);
 
         PrintFooter();
-        PrintSeparator();
-        PrintNewLine();
 
         m_DetailsExist = true;
     }