blob: ec67391b9c3b7e6a9fc4d84d8d4beb1e00ce0ad5 [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"
16#include "armnn/Logging.hpp"
17#include "armnn/BackendRegistry.hpp"
18
Jim Flynnbbfe6032020-07-20 16:57:44 +010019#include <common/include/CommandHandlerFunctor.hpp>
20#include <common/include/Packet.hpp>
Finn Williams032bc742020-02-12 11:02:34 +000021
Jim Flynnbbfe6032020-07-20 16:57:44 +010022#include <set>
Finn Williams032bc742020-02-12 11:02:34 +000023
Ferran Balaguer1b941722019-08-28 16:57:18 +010024namespace armnn
25{
26
27namespace profiling
28{
29
Finn Williams032bc742020-02-12 11:02:34 +000030
Jim Flynnbbfe6032020-07-20 16:57:44 +010031class PeriodicCounterSelectionCommandHandler : public arm::pipe::CommandHandlerFunctor
Ferran Balaguer1b941722019-08-28 16:57:18 +010032{
33
34public:
Jim Flynn397043f2019-10-17 17:37:10 +010035 PeriodicCounterSelectionCommandHandler(uint32_t familyId,
36 uint32_t packetId,
Matteo Martincighe8485382019-10-10 14:08:21 +010037 uint32_t version,
Finn Williams032bc742020-02-12 11:02:34 +000038 const std::unordered_map<BackendId,
39 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>&
Finn Williamsfe5a24b2020-04-09 16:05:28 +010040 backendProfilingContexts,
Finn Williams032bc742020-02-12 11:02:34 +000041 const ICounterMappings& counterIdMap,
Matteo Martincighe8485382019-10-10 14:08:21 +010042 Holder& captureDataHolder,
Finn Williams032bc742020-02-12 11:02:34 +000043 const uint16_t maxArmnnCounterId,
Matteo Martincighe8485382019-10-10 14:08:21 +010044 IPeriodicCounterCapture& periodicCounterCapture,
45 const IReadCounterValues& readCounterValue,
46 ISendCounterPacket& sendCounterPacket,
47 const ProfilingStateMachine& profilingStateMachine)
Jim Flynn397043f2019-10-17 17:37:10 +010048 : CommandHandlerFunctor(familyId, packetId, version)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010049 , m_BackendProfilingContexts(backendProfilingContexts)
Finn Williams032bc742020-02-12 11:02:34 +000050 , m_CounterIdMap(counterIdMap)
Matteo Martincighe8485382019-10-10 14:08:21 +010051 , m_CaptureDataHolder(captureDataHolder)
Finn Williams032bc742020-02-12 11:02:34 +000052 , m_MaxArmCounterId(maxArmnnCounterId)
Matteo Martincighe8485382019-10-10 14:08:21 +010053 , m_PeriodicCounterCapture(periodicCounterCapture)
Finn Williams032bc742020-02-12 11:02:34 +000054 , m_PrevCapturePeriod(0)
Matteo Martincighe8485382019-10-10 14:08:21 +010055 , m_ReadCounterValues(readCounterValue)
56 , m_SendCounterPacket(sendCounterPacket)
57 , m_StateMachine(profilingStateMachine)
Finn Williams032bc742020-02-12 11:02:34 +000058
59 {
60
61 }
Ferran Balaguer1b941722019-08-28 16:57:18 +010062
Jim Flynnbbfe6032020-07-20 16:57:44 +010063 void operator()(const arm::pipe::Packet& packet) override;
Ferran Balaguer1b941722019-08-28 16:57:18 +010064
Ferran Balaguer1b941722019-08-28 16:57:18 +010065private:
Finn Williams032bc742020-02-12 11:02:34 +000066
67 std::unordered_map<armnn::BackendId, std::vector<uint16_t>> m_BackendCounterMap;
68 const std::unordered_map<BackendId,
Finn Williamsfe5a24b2020-04-09 16:05:28 +010069 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>& m_BackendProfilingContexts;
Finn Williams032bc742020-02-12 11:02:34 +000070 const ICounterMappings& m_CounterIdMap;
Ferran Balaguer1b941722019-08-28 16:57:18 +010071 Holder& m_CaptureDataHolder;
Finn Williams032bc742020-02-12 11:02:34 +000072 const uint16_t m_MaxArmCounterId;
Matteo Martincighe8485382019-10-10 14:08:21 +010073 IPeriodicCounterCapture& m_PeriodicCounterCapture;
Finn Williams032bc742020-02-12 11:02:34 +000074 uint32_t m_PrevCapturePeriod;
75 std::set<uint16_t> m_PrevBackendCounterIds;
Matteo Martincighe8485382019-10-10 14:08:21 +010076 const IReadCounterValues& m_ReadCounterValues;
Ferran Balaguer1b941722019-08-28 16:57:18 +010077 ISendCounterPacket& m_SendCounterPacket;
Matteo Martincighe8485382019-10-10 14:08:21 +010078 const ProfilingStateMachine& m_StateMachine;
79
Finn Williams032bc742020-02-12 11:02:34 +000080 void ActivateBackedCounters(const armnn::BackendId backendId,
81 const uint32_t capturePeriod,
82 const std::vector<uint16_t> counterIds)
83 {
84 Optional<std::string> errorMsg =
Finn Williamsfe5a24b2020-04-09 16:05:28 +010085 m_BackendProfilingContexts.at(backendId)->ActivateCounters(capturePeriod, counterIds);
Finn Williams032bc742020-02-12 11:02:34 +000086
87 if(errorMsg.has_value())
88 {
89 ARMNN_LOG(warning) << "An error has occurred when activating counters of " << backendId << ": "
90 << errorMsg.value();
91 }
92 }
Jim Flynnbbfe6032020-07-20 16:57:44 +010093 void ParseData(const arm::pipe::Packet& packet, CaptureData& captureData);
Rob Hughesb98032f2020-04-24 11:41:34 +010094 std::set<armnn::BackendId> ProcessBackendCounterIds(const uint32_t capturePeriod,
Finn Williamsfe5a24b2020-04-09 16:05:28 +010095 const std::set<uint16_t> newCounterIds,
96 const std::set<uint16_t> unusedCounterIds);
Finn Williams032bc742020-02-12 11:02:34 +000097
Ferran Balaguer1b941722019-08-28 16:57:18 +010098};
99
100} // namespace profiling
101
102} // namespace armnn
103