aboutsummaryrefslogtreecommitdiff
path: root/profiling/client/src/PeriodicCounterSelectionCommandHandler.hpp
diff options
context:
space:
mode:
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