blob: e0feddf9a5eb89e62f1da93c0b11982d24fdd257 [file] [log] [blame]
Ferran Balaguer1b941722019-08-28 16:57:18 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Ferran Balaguer1b941722019-08-28 16:57:18 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Finn Williams032bc742020-02-12 11:02:34 +00008#include "CounterIdMap.hpp"
Ferran Balaguer1b941722019-08-28 16:57:18 +01009#include "Holder.hpp"
Sadik Armagan3896b472020-02-10 12:24:15 +000010#include "ProfilingStateMachine.hpp"
Ferran Balaguer1b941722019-08-28 16:57:18 +010011#include "SendCounterPacket.hpp"
12#include "IPeriodicCounterCapture.hpp"
Matteo Martincighe8485382019-10-10 14:08:21 +010013#include "ICounterValues.hpp"
Ferran Balaguer1b941722019-08-28 16:57:18 +010014
Finn Williams032bc742020-02-12 11:02:34 +000015#include "armnn/backends/profiling/IBackendProfilingContext.hpp"
Finn Williams032bc742020-02-12 11:02:34 +000016
Jim Flynnbbfe6032020-07-20 16:57:44 +010017#include <common/include/CommandHandlerFunctor.hpp>
Jim Flynn6c9f17d2022-03-10 23:13:01 +000018#include <common/include/Logging.hpp>
Jim Flynnbbfe6032020-07-20 16:57:44 +010019#include <common/include/Packet.hpp>
Finn Williams032bc742020-02-12 11:02:34 +000020
Jim Flynnbbfe6032020-07-20 16:57:44 +010021#include <set>
Finn Williams032bc742020-02-12 11:02:34 +000022
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000023namespace arm
Ferran Balaguer1b941722019-08-28 16:57:18 +010024{
25
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000026namespace pipe
Ferran Balaguer1b941722019-08-28 16:57:18 +010027{
28
Finn Williams032bc742020-02-12 11:02:34 +000029
Jim Flynnbbfe6032020-07-20 16:57:44 +010030class PeriodicCounterSelectionCommandHandler : public arm::pipe::CommandHandlerFunctor
Ferran Balaguer1b941722019-08-28 16:57:18 +010031{
32
33public:
Jim Flynn397043f2019-10-17 17:37:10 +010034 PeriodicCounterSelectionCommandHandler(uint32_t familyId,
35 uint32_t packetId,
Matteo Martincighe8485382019-10-10 14:08:21 +010036 uint32_t version,
Cathal Corbett6f073722022-03-04 12:11:09 +000037 const std::unordered_map<std::string,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000038 std::shared_ptr<IBackendProfilingContext>>&
Finn Williamsfe5a24b2020-04-09 16:05:28 +010039 backendProfilingContexts,
Finn Williams032bc742020-02-12 11:02:34 +000040 const ICounterMappings& counterIdMap,
Matteo Martincighe8485382019-10-10 14:08:21 +010041 Holder& captureDataHolder,
Finn Williams032bc742020-02-12 11:02:34 +000042 const uint16_t maxArmnnCounterId,
Matteo Martincighe8485382019-10-10 14:08:21 +010043 IPeriodicCounterCapture& periodicCounterCapture,
44 const IReadCounterValues& readCounterValue,
45 ISendCounterPacket& sendCounterPacket,
46 const ProfilingStateMachine& profilingStateMachine)
Jim Flynn397043f2019-10-17 17:37:10 +010047 : CommandHandlerFunctor(familyId, packetId, version)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010048 , m_BackendProfilingContexts(backendProfilingContexts)
Finn Williams032bc742020-02-12 11:02:34 +000049 , m_CounterIdMap(counterIdMap)
Matteo Martincighe8485382019-10-10 14:08:21 +010050 , m_CaptureDataHolder(captureDataHolder)
Finn Williams032bc742020-02-12 11:02:34 +000051 , m_MaxArmCounterId(maxArmnnCounterId)
Matteo Martincighe8485382019-10-10 14:08:21 +010052 , m_PeriodicCounterCapture(periodicCounterCapture)
Finn Williams032bc742020-02-12 11:02:34 +000053 , m_PrevCapturePeriod(0)
Matteo Martincighe8485382019-10-10 14:08:21 +010054 , m_ReadCounterValues(readCounterValue)
55 , m_SendCounterPacket(sendCounterPacket)
56 , m_StateMachine(profilingStateMachine)
Finn Williams032bc742020-02-12 11:02:34 +000057
58 {
59
60 }
Ferran Balaguer1b941722019-08-28 16:57:18 +010061
Jim Flynnbbfe6032020-07-20 16:57:44 +010062 void operator()(const arm::pipe::Packet& packet) override;
Ferran Balaguer1b941722019-08-28 16:57:18 +010063
Ferran Balaguer1b941722019-08-28 16:57:18 +010064private:
Finn Williams032bc742020-02-12 11:02:34 +000065
Cathal Corbett6f073722022-03-04 12:11:09 +000066 std::unordered_map<std::string, std::vector<uint16_t>> m_BackendCounterMap;
67 const std::unordered_map<std::string,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000068 std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts;
Finn Williams032bc742020-02-12 11:02:34 +000069 const ICounterMappings& m_CounterIdMap;
Ferran Balaguer1b941722019-08-28 16:57:18 +010070 Holder& m_CaptureDataHolder;
Finn Williams032bc742020-02-12 11:02:34 +000071 const uint16_t m_MaxArmCounterId;
Matteo Martincighe8485382019-10-10 14:08:21 +010072 IPeriodicCounterCapture& m_PeriodicCounterCapture;
Finn Williams032bc742020-02-12 11:02:34 +000073 uint32_t m_PrevCapturePeriod;
74 std::set<uint16_t> m_PrevBackendCounterIds;
Matteo Martincighe8485382019-10-10 14:08:21 +010075 const IReadCounterValues& m_ReadCounterValues;
Ferran Balaguer1b941722019-08-28 16:57:18 +010076 ISendCounterPacket& m_SendCounterPacket;
Matteo Martincighe8485382019-10-10 14:08:21 +010077 const ProfilingStateMachine& m_StateMachine;
78
Cathal Corbett6f073722022-03-04 12:11:09 +000079 void ActivateBackendCounters(const std::string backendId,
80 const uint32_t capturePeriod,
81 const std::vector<uint16_t> counterIds)
Finn Williams032bc742020-02-12 11:02:34 +000082 {
Jim Flynndecd08b2022-03-13 22:35:46 +000083 arm::pipe::Optional<std::string> errorMsg =
Finn Williamsfe5a24b2020-04-09 16:05:28 +010084 m_BackendProfilingContexts.at(backendId)->ActivateCounters(capturePeriod, counterIds);
Finn Williams032bc742020-02-12 11:02:34 +000085
86 if(errorMsg.has_value())
87 {
Jim Flynn6c9f17d2022-03-10 23:13:01 +000088 ARM_PIPE_LOG(warning) << "An error has occurred when activating counters of " << backendId << ": "
Finn Williams032bc742020-02-12 11:02:34 +000089 << errorMsg.value();
90 }
91 }
Jim Flynnbbfe6032020-07-20 16:57:44 +010092 void ParseData(const arm::pipe::Packet& packet, CaptureData& captureData);
Cathal Corbett6f073722022-03-04 12:11:09 +000093 std::set<std::string> ProcessBackendCounterIds(const uint32_t capturePeriod,
Finn Williamsfe5a24b2020-04-09 16:05:28 +010094 const std::set<uint16_t> newCounterIds,
95 const std::set<uint16_t> unusedCounterIds);
Finn Williams032bc742020-02-12 11:02:34 +000096
Ferran Balaguer1b941722019-08-28 16:57:18 +010097};
98
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000099} // namespace pipe
Ferran Balaguer1b941722019-08-28 16:57:18 +0100100
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000101} // namespace arm