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;
}