From e6a2ccd09060ba93203ddc5a7f79260cedf2c147 Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Thu, 27 Feb 2020 16:21:41 +0000 Subject: IVGCVSW-4161 Provide for per model call back registration !armnn:2810 Signed-off-by: Finn Williams Change-Id: Idf56d42bd767baa5df0059a2f489f75281f8ac71 --- .../TimelineCaptureCommandHandler.cpp | 17 +++++++++-- .../TimelineCaptureCommandHandler.hpp | 17 +++++------ src/timelineDecoder/TimelineDecoder.cpp | 33 ++++++++++++++++++++-- src/timelineDecoder/TimelineDecoder.hpp | 3 +- .../TimelineDirectoryCaptureCommandHandler.cpp | 3 ++ .../TimelineDirectoryCaptureCommandHandler.hpp | 6 +++- src/timelineDecoder/tests/TimelineTests.cpp | 8 +++++- 7 files changed, 72 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/timelineDecoder/TimelineCaptureCommandHandler.cpp b/src/timelineDecoder/TimelineCaptureCommandHandler.cpp index fb6935e247..58edd9fc43 100644 --- a/src/timelineDecoder/TimelineCaptureCommandHandler.cpp +++ b/src/timelineDecoder/TimelineCaptureCommandHandler.cpp @@ -6,7 +6,7 @@ #include "TimelineCaptureCommandHandler.hpp" #include - +#include namespace armnn { @@ -28,7 +28,15 @@ void TimelineCaptureCommandHandler::ParseData(const armnn::profiling::Packet& pa uint32_t offset = 0; m_PacketLength = packet.GetLength(); - if ( m_PacketLength < 8 ) + // We are expecting TimelineDirectoryCaptureCommandHandler to set the thread id size + // if it not set in the constructor + if (m_ThreadIdSize == 0) + { + ARMNN_LOG(error) << "TimelineCaptureCommandHandler: m_ThreadIdSize has not been set"; + return; + } + + if (packet.GetLength() < 8) { return; } @@ -125,6 +133,11 @@ void TimelineCaptureCommandHandler::ReadEvent(const unsigned char* data, uint32_ m_TimelineDecoder.CreateEvent(event); } +void TimelineCaptureCommandHandler::SetThreadIdSize(uint32_t size) +{ + m_ThreadIdSize = size; +} + void TimelineCaptureCommandHandler::operator()(const profiling::Packet& packet) { ParseData(packet); diff --git a/src/timelineDecoder/TimelineCaptureCommandHandler.hpp b/src/timelineDecoder/TimelineCaptureCommandHandler.hpp index b69e615b56..e143b5f6e5 100644 --- a/src/timelineDecoder/TimelineCaptureCommandHandler.hpp +++ b/src/timelineDecoder/TimelineCaptureCommandHandler.hpp @@ -5,9 +5,9 @@ #pragma once -#include #include "armnn/profiling/ITimelineDecoder.hpp" +#include #include #include @@ -31,11 +31,11 @@ public: uint32_t packetId, uint32_t version, ITimelineDecoder& timelineDecoder, - uint32_t threadId_size) - : CommandHandlerFunctor(familyId, packetId, version), - m_TimelineDecoder(timelineDecoder), - m_ThreadIdSize(threadId_size), - m_PacketLength(0) + uint32_t threadIdSize = 0) + : CommandHandlerFunctor(familyId, packetId, version) + , m_TimelineDecoder(timelineDecoder) + , m_ThreadIdSize(threadIdSize) + , m_PacketLength(0) {} void operator()(const armnn::profiling::Packet& packet) override; @@ -46,12 +46,13 @@ public: void ReadRelationship(const unsigned char* data, uint32_t& offset); void ReadEvent(const unsigned char* data, uint32_t& offset); + void SetThreadIdSize(uint32_t size); + private: void ParseData(const armnn::profiling::Packet& packet); ITimelineDecoder& m_TimelineDecoder; - - const uint32_t m_ThreadIdSize; + uint32_t m_ThreadIdSize; unsigned int m_PacketLength; static const ReadFunction m_ReadFunctions[]; diff --git a/src/timelineDecoder/TimelineDecoder.cpp b/src/timelineDecoder/TimelineDecoder.cpp index 2f9ac135b4..f7f4663530 100644 --- a/src/timelineDecoder/TimelineDecoder.cpp +++ b/src/timelineDecoder/TimelineDecoder.cpp @@ -4,13 +4,14 @@ // #include "TimelineDecoder.hpp" -#include "../profiling/ProfilingUtils.hpp" - +#include #include + namespace armnn { namespace timelinedecoder { + TimelineDecoder::TimelineStatus TimelineDecoder::CreateEntity(const Entity &entity) { if (m_OnNewEntityCallback == nullptr) @@ -120,6 +121,34 @@ TimelineDecoder::TimelineStatus TimelineDecoder::SetRelationshipCallback(OnNewRe return TimelineStatus::TimelineStatus_Success; } +void TimelineDecoder::SetDefaultCallbacks() +{ + SetEntityCallback([](Model& model, const ITimelineDecoder::Entity entity) + { + model.m_Entities.emplace_back(entity); + }); + + SetEventClassCallback([](Model& model, const ITimelineDecoder::EventClass eventClass) + { + model.m_EventClasses.emplace_back(eventClass); + }); + + SetEventCallback([](Model& model, const ITimelineDecoder::Event event) + { + model.m_Events.emplace_back(event); + }); + + SetLabelCallback([](Model& model, const ITimelineDecoder::Label label) + { + model.m_Labels.emplace_back(label); + }); + + SetRelationshipCallback([](Model& model, const ITimelineDecoder::Relationship relationship) + { + model.m_Relationships.emplace_back(relationship); + }); +} + void TimelineDecoder::print() { printLabels(); diff --git a/src/timelineDecoder/TimelineDecoder.hpp b/src/timelineDecoder/TimelineDecoder.hpp index 405673164b..c6d1e4ee0a 100644 --- a/src/timelineDecoder/TimelineDecoder.hpp +++ b/src/timelineDecoder/TimelineDecoder.hpp @@ -39,13 +39,14 @@ public: const Model& GetModel(); - TimelineStatus SetEntityCallback(const OnNewEntityCallback); TimelineStatus SetEventClassCallback(const OnNewEventClassCallback); TimelineStatus SetEventCallback(const OnNewEventCallback); TimelineStatus SetLabelCallback(const OnNewLabelCallback); TimelineStatus SetRelationshipCallback(const OnNewRelationshipCallback); + void SetDefaultCallbacks(); + void print(); private: diff --git a/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp b/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp index 655e461b8c..74aefea142 100644 --- a/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp +++ b/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.cpp @@ -4,6 +4,7 @@ // #include "TimelineDirectoryCaptureCommandHandler.hpp" +#include "TimelineCaptureCommandHandler.hpp" #include #include @@ -41,6 +42,8 @@ void TimelineDirectoryCaptureCommandHandler::ParseData(const armnn::profiling::P { m_SwTraceMessages.push_back(profiling::ReadSwTraceMessage(data, offset)); } + + m_TimelineCaptureCommandHandler.SetThreadIdSize(m_SwTraceHeader.m_ThreadIdBytes); } void TimelineDirectoryCaptureCommandHandler::Print() diff --git a/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp b/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp index b4e0fd2d7d..a22a5d9f87 100644 --- a/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp +++ b/src/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp @@ -5,7 +5,8 @@ #pragma once -#include + +#include #include #include #include @@ -26,8 +27,10 @@ public: TimelineDirectoryCaptureCommandHandler(uint32_t familyId, uint32_t packetId, uint32_t version, + TimelineCaptureCommandHandler& timelineCaptureCommandHandler, bool quietOperation = false) : CommandHandlerFunctor(familyId, packetId, version) + , m_TimelineCaptureCommandHandler(timelineCaptureCommandHandler) , m_QuietOperation(quietOperation) {} @@ -40,6 +43,7 @@ private: void ParseData(const armnn::profiling::Packet& packet); void Print(); + TimelineCaptureCommandHandler& m_TimelineCaptureCommandHandler; bool m_QuietOperation; }; diff --git a/src/timelineDecoder/tests/TimelineTests.cpp b/src/timelineDecoder/tests/TimelineTests.cpp index 62b4330e1f..1f55515758 100644 --- a/src/timelineDecoder/tests/TimelineTests.cpp +++ b/src/timelineDecoder/tests/TimelineTests.cpp @@ -83,8 +83,13 @@ BOOST_AUTO_TEST_CASE(TimelineDirectoryTest) profiling::PacketVersionResolver packetVersionResolver; + TimelineDecoder timelineDecoder; + TimelineCaptureCommandHandler timelineCaptureCommandHandler( + 1, 1, packetVersionResolver.ResolvePacketVersion(1, 1).GetEncodedValue(), timelineDecoder); + TimelineDirectoryCaptureCommandHandler timelineDirectoryCaptureCommandHandler( - 1, 0, packetVersionResolver.ResolvePacketVersion(1, 0).GetEncodedValue(), true); + 1, 0, packetVersionResolver.ResolvePacketVersion(1, 0).GetEncodedValue(), + timelineCaptureCommandHandler, true); sendTimelinePacket->SendTimelineMessageDirectoryPackage(); sendTimelinePacket->Commit(); @@ -151,6 +156,7 @@ BOOST_AUTO_TEST_CASE(TimelineCaptureTest) TimelineDecoder timelineDecoder; const TimelineDecoder::Model& model = timelineDecoder.GetModel(); + TimelineCaptureCommandHandler timelineCaptureCommandHandler( 1, 1, packetVersionResolver.ResolvePacketVersion(1, 1).GetEncodedValue(), timelineDecoder, threadIdSize); -- cgit v1.2.1