blob: 9a678a85abdec39f71700c4bf912f04a3c1a2839 [file] [log] [blame]
Francis Murtaghfcb8ef62019-09-20 15:40:09 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Francis Murtaghfcb8ef62019-09-20 15:40:09 +01008#include "IPeriodicCounterCapture.hpp"
Matteo Martincighe0e6efc2019-10-04 17:17:42 +01009#include "Holder.hpp"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010010#include "SendCounterPacket.hpp"
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010011#include "ICounterValues.hpp"
Finn Williams032bc742020-02-12 11:02:34 +000012#include "CounterIdMap.hpp"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010013
Nikhil Raj7dcc6972021-04-30 15:44:24 +010014#include <armnn/backends/profiling/IBackendProfilingContext.hpp>
15
16#include <common/include/Packet.hpp>
17
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010018#include <atomic>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010019#include <mutex>
20#include <thread>
21
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000022namespace arm
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010023{
24
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000025namespace pipe
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010026{
27
28class PeriodicCounterCapture final : public IPeriodicCounterCapture
29{
30public:
Finn Williams032bc742020-02-12 11:02:34 +000031 PeriodicCounterCapture(const Holder& data,
32 ISendCounterPacket& packet,
Finn Williamsf3fcf322020-05-11 14:38:02 +010033 IReadCounterValues& readCounterValue,
Finn Williams032bc742020-02-12 11:02:34 +000034 const ICounterMappings& counterIdMap,
Cathal Corbett6f073722022-03-04 12:11:09 +000035 const std::unordered_map<std::string,
36 std::shared_ptr<IBackendProfilingContext>>& backendProfilingContexts)
Finn Williams032bc742020-02-12 11:02:34 +000037 : m_CaptureDataHolder(data)
38 , m_IsRunning(false)
39 , m_KeepRunning(false)
40 , m_ReadCounterValues(readCounterValue)
41 , m_SendCounterPacket(packet)
42 , m_CounterIdMap(counterIdMap)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010043 , m_BackendProfilingContexts(backendProfilingContexts)
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010044 {}
45 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010046
47 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010048 void Stop() override;
Finn Williamsf4d59a62019-10-14 15:55:18 +010049 bool IsRunning() const { return m_IsRunning; }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010050
51private:
52 CaptureData ReadCaptureData();
Finn Williamsf3fcf322020-05-11 14:38:02 +010053 void Capture(IReadCounterValues& readCounterValues);
Finn Williams032bc742020-02-12 11:02:34 +000054 void DispatchPeriodicCounterCapturePacket(
Cathal Corbett6f073722022-03-04 12:11:09 +000055 const std::string& backendId, const std::vector<Timestamp>& timestampValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010056
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010057 const Holder& m_CaptureDataHolder;
Finn Williamsf4d59a62019-10-14 15:55:18 +010058 bool m_IsRunning;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010059 std::atomic<bool> m_KeepRunning;
60 std::thread m_PeriodCaptureThread;
Finn Williamsf3fcf322020-05-11 14:38:02 +010061 IReadCounterValues& m_ReadCounterValues;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010062 ISendCounterPacket& m_SendCounterPacket;
Finn Williams032bc742020-02-12 11:02:34 +000063 const ICounterMappings& m_CounterIdMap;
Cathal Corbett6f073722022-03-04 12:11:09 +000064 const std::unordered_map<std::string,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000065 std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010066};
67
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000068} // namespace pipe
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010069
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000070} // namespace arm