blob: 35ceb0cb779851b92a17f92c4f4f0a3b4aac14ad [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"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +01009#include "SendCounterPacket.hpp"
10
Jim Flynn27761832022-03-20 21:52:17 +000011#include <client/include/CounterIdMap.hpp>
12#include <client/include/Holder.hpp>
13#include <client/include/ICounterValues.hpp>
14
15#include <client/include/backends/IBackendProfilingContext.hpp>
Nikhil Raj7dcc6972021-04-30 15:44:24 +010016
17#include <common/include/Packet.hpp>
18
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010019#include <atomic>
Jim Flynne195a042022-04-12 17:19:28 +010020
21#if !defined(ARMNN_DISABLE_THREADS)
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010022#include <mutex>
23#include <thread>
Jim Flynne195a042022-04-12 17:19:28 +010024#endif
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010025
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000026namespace arm
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010027{
28
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000029namespace pipe
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010030{
31
32class PeriodicCounterCapture final : public IPeriodicCounterCapture
33{
34public:
Finn Williams032bc742020-02-12 11:02:34 +000035 PeriodicCounterCapture(const Holder& data,
36 ISendCounterPacket& packet,
Finn Williamsf3fcf322020-05-11 14:38:02 +010037 IReadCounterValues& readCounterValue,
Finn Williams032bc742020-02-12 11:02:34 +000038 const ICounterMappings& counterIdMap,
Cathal Corbett6f073722022-03-04 12:11:09 +000039 const std::unordered_map<std::string,
Jim Flynne195a042022-04-12 17:19:28 +010040 std::shared_ptr<IBackendProfilingContext>>& backendProfilingContexts)
Finn Williams032bc742020-02-12 11:02:34 +000041 : m_CaptureDataHolder(data)
42 , m_IsRunning(false)
43 , m_KeepRunning(false)
44 , m_ReadCounterValues(readCounterValue)
45 , m_SendCounterPacket(packet)
46 , m_CounterIdMap(counterIdMap)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010047 , m_BackendProfilingContexts(backendProfilingContexts)
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010048 {}
49 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010050
51 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010052 void Stop() override;
Finn Williamsf4d59a62019-10-14 15:55:18 +010053 bool IsRunning() const { return m_IsRunning; }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010054
55private:
56 CaptureData ReadCaptureData();
Finn Williamsf3fcf322020-05-11 14:38:02 +010057 void Capture(IReadCounterValues& readCounterValues);
Finn Williams032bc742020-02-12 11:02:34 +000058 void DispatchPeriodicCounterCapturePacket(
Cathal Corbett6f073722022-03-04 12:11:09 +000059 const std::string& backendId, const std::vector<Timestamp>& timestampValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010060
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010061 const Holder& m_CaptureDataHolder;
Finn Williamsf4d59a62019-10-14 15:55:18 +010062 bool m_IsRunning;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010063 std::atomic<bool> m_KeepRunning;
Jim Flynne195a042022-04-12 17:19:28 +010064#if !defined(ARMNN_DISABLE_THREADS)
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010065 std::thread m_PeriodCaptureThread;
Jim Flynne195a042022-04-12 17:19:28 +010066#endif
Finn Williamsf3fcf322020-05-11 14:38:02 +010067 IReadCounterValues& m_ReadCounterValues;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010068 ISendCounterPacket& m_SendCounterPacket;
Finn Williams032bc742020-02-12 11:02:34 +000069 const ICounterMappings& m_CounterIdMap;
Cathal Corbett6f073722022-03-04 12:11:09 +000070 const std::unordered_map<std::string,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000071 std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010072};
73
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000074} // namespace pipe
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010075
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000076} // namespace arm