From 9723d0243463e3a32ed11ae1c38298343b4e8818 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Wed, 13 Nov 2019 10:56:41 +0000 Subject: IVGCVSW-4074 Send Timeline message in RequestCounterDirectoryCommandHandler * Added call to SendTimelineMessageDirectoryPackage in the handler * Updated the unit tests accordingly * Refactored SendTimelinePacket to remove macro Signed-off-by: Matteo Martincigh Change-Id: I7bb6f8575945b99a0e77ef30ecfe4dee3058669e --- src/profiling/SendTimelinePacket.hpp | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/profiling/SendTimelinePacket.hpp') diff --git a/src/profiling/SendTimelinePacket.hpp b/src/profiling/SendTimelinePacket.hpp index 77268a4eb5..4b2e06328b 100644 --- a/src/profiling/SendTimelinePacket.hpp +++ b/src/profiling/SendTimelinePacket.hpp @@ -9,6 +9,8 @@ #include "ISendTimelinePacket.hpp" #include "ProfilingUtils.hpp" +#include + #include namespace armnn @@ -54,12 +56,52 @@ private: /// Reserves maximum packet size from buffer void ReserveBuffer(); + template + void ForwardWriteBinaryFunction(Func& func, Params&& ... params); + IBufferManager& m_BufferManager; IPacketBufferPtr m_WriteBuffer; unsigned int m_Offset; unsigned int m_BufferSize; }; +template +void SendTimelinePacket::ForwardWriteBinaryFunction(Func& func, Params&& ... params) +{ + try + { + ReserveBuffer(); + BOOST_ASSERT(m_WriteBuffer); + unsigned int numberOfBytesWritten = 0; + while (true) + { + TimelinePacketStatus result = func(std::forward(params)..., + &m_WriteBuffer->GetWritableData()[m_Offset], + m_BufferSize, + numberOfBytesWritten); + switch (result) + { + case TimelinePacketStatus::BufferExhaustion: + Commit(); + ReserveBuffer(); + continue; + + case TimelinePacketStatus::Error: + throw RuntimeException("Error processing while sending TimelineBinaryPacket", CHECK_LOCATION()); + + default: + m_Offset += numberOfBytesWritten; + m_BufferSize -= numberOfBytesWritten; + return; + } + } + } + catch (...) + { + throw RuntimeException("Error processing while sending TimelineBinaryPacket", CHECK_LOCATION()); + } +} + } // namespace profiling } // namespace armnn -- cgit v1.2.1