aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/test/RequestCountersPacketHandler.cpp
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2020-04-29 21:12:13 +0100
committerJim Flynn <jim.flynn@arm.com>2020-05-26 16:33:21 +0100
commit01d0281404183c84d26e863502cac8d83044c0bf (patch)
tree526f19f39fb826d0df1035729182af27ec5a44d8 /src/profiling/test/RequestCountersPacketHandler.cpp
parent42b3d7da750ab6ad39ea228985f422685f89eb45 (diff)
downloadarmnn-01d0281404183c84d26e863502cac8d83044c0bf.tar.gz
IVGCVSW-4595 Change FileOnlyProfilingConnection to all packet processor model
Change-Id: Ieccb26190d80e570ddef8d7c22e824eda1b92d7f Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/profiling/test/RequestCountersPacketHandler.cpp')
-rw-r--r--src/profiling/test/RequestCountersPacketHandler.cpp78
1 files changed, 78 insertions, 0 deletions
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 <common/include/ProfilingException.hpp>
+
+namespace armnn
+{
+
+namespace profiling
+{
+
+std::vector<uint32_t> RequestCountersPacketHandler::GetHeadersAccepted()
+{
+ std::vector<uint32_t> 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<uint16_t> 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<uint32_t>(m_IdList.size()) * uint16_t_size;
+
+ auto uniqueData = std::make_unique<unsigned char[]>(bodySize);
+ auto data = reinterpret_cast<unsigned char*>(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