From 01d0281404183c84d26e863502cac8d83044c0bf Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Wed, 29 Apr 2020 21:12:13 +0100 Subject: IVGCVSW-4595 Change FileOnlyProfilingConnection to all packet processor model Change-Id: Ieccb26190d80e570ddef8d7c22e824eda1b92d7f Signed-off-by: Jim Flynn --- .../test/RequestCountersPacketHandler.cpp | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/profiling/test/RequestCountersPacketHandler.cpp (limited to 'src/profiling/test/RequestCountersPacketHandler.cpp') diff --git a/src/profiling/test/RequestCountersPacketHandler.cpp b/src/profiling/test/RequestCountersPacketHandler.cpp new file mode 100644 index 0000000000..76c4b0cdc6 --- /dev/null +++ b/src/profiling/test/RequestCountersPacketHandler.cpp @@ -0,0 +1,78 @@ +// +// Copyright © 2020 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "RequestCountersPacketHandler.hpp" + +#include "DirectoryCaptureCommandHandler.hpp" +#include "PacketVersionResolver.hpp" + +#include + +namespace armnn +{ + +namespace profiling +{ + +std::vector RequestCountersPacketHandler::GetHeadersAccepted() +{ + std::vector headers; + headers.push_back(m_CounterDirectoryMessageHeader); // counter directory + return headers; +} + +void RequestCountersPacketHandler::HandlePacket(const Packet& packet) +{ + if (packet.GetHeader() != m_CounterDirectoryMessageHeader) + { + return; + } + armnn::profiling::PacketVersionResolver packetVersionResolver; + DirectoryCaptureCommandHandler directoryCaptureCommandHandler( + 0, 2, packetVersionResolver.ResolvePacketVersion(0, 2).GetEncodedValue()); + directoryCaptureCommandHandler.operator()(packet); + const ICounterDirectory& counterDirectory = directoryCaptureCommandHandler.GetCounterDirectory(); + for (auto& category : counterDirectory.GetCategories()) + { + // Remember we need to translate the Uid's from our CounterDirectory instance to the parent one. + std::vector translatedCounters; + for (auto const& copyUid : category->m_Counters) + { + translatedCounters.emplace_back(directoryCaptureCommandHandler.TranslateUIDCopyToOriginal(copyUid)); + } + m_IdList.insert(std::end(m_IdList), std::begin(translatedCounters), std::end(translatedCounters)); + } + SendCounterSelectionPacket(); +} + +void RequestCountersPacketHandler::SendCounterSelectionPacket() +{ + uint32_t uint16_t_size = sizeof(uint16_t); + uint32_t uint32_t_size = sizeof(uint32_t); + + uint32_t offset = 0; + uint32_t bodySize = uint32_t_size + boost::numeric_cast(m_IdList.size()) * uint16_t_size; + + auto uniqueData = std::make_unique(bodySize); + auto data = reinterpret_cast(uniqueData.get()); + + // Copy capturePeriod + WriteUint32(data, offset, m_CapturePeriod); + + // Copy m_IdList + offset += uint32_t_size; + for (const uint16_t& id : m_IdList) + { + WriteUint16(data, offset, id); + offset += uint16_t_size; + } + + Packet packet(0x40000, bodySize, uniqueData); + m_Connection->ReturnPacket(packet); +} + +} // namespace profiling + +} // namespace armnn \ No newline at end of file -- cgit v1.2.1