aboutsummaryrefslogtreecommitdiff
path: root/profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2022-03-23 23:01:26 +0000
committerJim Flynn <jim.flynn@arm.com>2022-03-23 23:43:35 +0000
commit3e9bc19ad523361e6b18057849e30c0c48183915 (patch)
treeb7b012a9734ce39d054fc5d92302780fd838e5c8 /profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp
parent277618302d0f131eac0b6ac2015dd3eb09aa6ff9 (diff)
downloadarmnn-3e9bc19ad523361e6b18057849e30c0c48183915.tar.gz
IVGCVSW-6706 Create the libpipeClient library
Change-Id: I2368aade38ad3808fab55d8a86cd659d4e95d91e Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp')
-rw-r--r--profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp102
1 files changed, 102 insertions, 0 deletions
diff --git a/profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp b/profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp
new file mode 100644
index 0000000000..6e544c9097
--- /dev/null
+++ b/profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp
@@ -0,0 +1,102 @@
+//
+// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "ProfilingStateMachine.hpp"
+#include "SendCounterPacket.hpp"
+#include "IPeriodicCounterCapture.hpp"
+
+#include <client/include/CounterIdMap.hpp>
+#include <client/include/Holder.hpp>
+#include <client/include/ICounterValues.hpp>
+
+#include <client/include/backends/IBackendProfilingContext.hpp>
+
+#include <common/include/CommandHandlerFunctor.hpp>
+#include <common/include/Logging.hpp>
+#include <common/include/Packet.hpp>
+
+#include <set>
+
+namespace arm
+{
+
+namespace pipe
+{
+
+
+class PeriodicCounterSelectionCommandHandler : public arm::pipe::CommandHandlerFunctor
+{
+
+public:
+ PeriodicCounterSelectionCommandHandler(uint32_t familyId,
+ uint32_t packetId,
+ uint32_t version,
+ const std::unordered_map<std::string,
+ std::shared_ptr<IBackendProfilingContext>>&
+ backendProfilingContexts,
+ const ICounterMappings& counterIdMap,
+ Holder& captureDataHolder,
+ const uint16_t maxArmnnCounterId,
+ IPeriodicCounterCapture& periodicCounterCapture,
+ const IReadCounterValues& readCounterValue,
+ ISendCounterPacket& sendCounterPacket,
+ const ProfilingStateMachine& profilingStateMachine)
+ : CommandHandlerFunctor(familyId, packetId, version)
+ , m_BackendProfilingContexts(backendProfilingContexts)
+ , m_CounterIdMap(counterIdMap)
+ , m_CaptureDataHolder(captureDataHolder)
+ , m_MaxArmCounterId(maxArmnnCounterId)
+ , m_PeriodicCounterCapture(periodicCounterCapture)
+ , m_PrevCapturePeriod(0)
+ , m_ReadCounterValues(readCounterValue)
+ , m_SendCounterPacket(sendCounterPacket)
+ , m_StateMachine(profilingStateMachine)
+
+ {
+
+ }
+
+ void operator()(const arm::pipe::Packet& packet) override;
+
+private:
+
+ std::unordered_map<std::string, std::vector<uint16_t>> m_BackendCounterMap;
+ const std::unordered_map<std::string,
+ std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts;
+ const ICounterMappings& m_CounterIdMap;
+ Holder& m_CaptureDataHolder;
+ const uint16_t m_MaxArmCounterId;
+ IPeriodicCounterCapture& m_PeriodicCounterCapture;
+ uint32_t m_PrevCapturePeriod;
+ std::set<uint16_t> m_PrevBackendCounterIds;
+ const IReadCounterValues& m_ReadCounterValues;
+ ISendCounterPacket& m_SendCounterPacket;
+ const ProfilingStateMachine& m_StateMachine;
+
+ void ActivateBackendCounters(const std::string backendId,
+ const uint32_t capturePeriod,
+ const std::vector<uint16_t> counterIds)
+ {
+ arm::pipe::Optional<std::string> errorMsg =
+ m_BackendProfilingContexts.at(backendId)->ActivateCounters(capturePeriod, counterIds);
+
+ if(errorMsg.has_value())
+ {
+ ARM_PIPE_LOG(warning) << "An error has occurred when activating counters of " << backendId << ": "
+ << errorMsg.value();
+ }
+ }
+ void ParseData(const arm::pipe::Packet& packet, CaptureData& captureData);
+ std::set<std::string> ProcessBackendCounterIds(const uint32_t capturePeriod,
+ const std::set<uint16_t> newCounterIds,
+ const std::set<uint16_t> unusedCounterIds);
+
+};
+
+} // namespace pipe
+
+} // namespace arm