From ec22ad2c54e1706cdd51a3d784f87c7d189120ae Mon Sep 17 00:00:00 2001 From: Keith Davis Date: Fri, 22 Oct 2021 14:17:19 +0100 Subject: 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 Change-Id: Ia5068a5a457a77fd01e974e0b5aa0f309f15bfa7 --- src/armnn/JsonPrinter.cpp | 17 +++++++++++++++++ src/armnn/JsonPrinter.hpp | 14 +++++++++++++- src/armnn/Profiling.cpp | 9 +++++++-- src/armnn/ProfilingDetails.hpp | 9 +++++++-- 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/armnn/JsonPrinter.cpp b/src/armnn/JsonPrinter.cpp index 94ff7c0610..4be956b90b 100644 --- a/src/armnn/JsonPrinter.cpp +++ b/src/armnn/JsonPrinter.cpp @@ -45,12 +45,29 @@ void JsonPrinter::PrintJsonChildObject(const JsonChildObject& object, size_t& id } 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 9e8ecb48e5..d9b83869d7 100644 --- a/src/armnn/JsonPrinter.hpp +++ b/src/armnn/JsonPrinter.hpp @@ -31,7 +31,8 @@ struct JsonChildObject : 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 @@ struct JsonChildObject return m_Type; } + void EnableDetailsOnly() + { + m_DetailsOnly = true; + } + + bool IsDetailsOnlyEnabled() const + { + return m_DetailsOnly; + } + ~JsonChildObject() = default; std::string m_Label; @@ -96,6 +107,7 @@ struct JsonChildObject std::vector m_Children; private: + bool m_DetailsOnly; JsonChildObject() = delete; }; diff --git a/src/armnn/Profiling.cpp b/src/armnn/Profiling.cpp index 6a3522ba29..e7df459103 100644 --- a/src/armnn/Profiling.cpp +++ b/src/armnn/Profiling.cpp @@ -411,7 +411,12 @@ void ProfilerImpl::Print(std::ostream& outStream) const || 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 @@ void ProfilerImpl::Print(std::ostream& outStream) const 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 befc437dd7..1bed395486 100644 --- a/src/armnn/ProfilingDetails.hpp +++ b/src/armnn/ProfilingDetails.hpp @@ -36,6 +36,13 @@ public: 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 @@ public: StringifyLayerParameters::Serialize(extractParams, desc); PrintFooter(); - PrintSeparator(); - PrintNewLine(); m_DetailsExist = true; } -- cgit v1.2.1