blob: b7b1a20e1c209a8ec526730fe3bbd4de64259469 [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
22namespace armnn
23{
24
25namespace profiling
26{
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,
35 const std::unordered_map<armnn::BackendId,
36 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>&
37 backendProfilingContexts)
38 : m_CaptureDataHolder(data)
39 , m_IsRunning(false)
40 , m_KeepRunning(false)
41 , m_ReadCounterValues(readCounterValue)
42 , m_SendCounterPacket(packet)
43 , m_CounterIdMap(counterIdMap)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010044 , m_BackendProfilingContexts(backendProfilingContexts)
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010045 {}
46 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010047
48 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010049 void Stop() override;
Finn Williamsf4d59a62019-10-14 15:55:18 +010050 bool IsRunning() const { return m_IsRunning; }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010051
52private:
53 CaptureData ReadCaptureData();
Finn Williamsf3fcf322020-05-11 14:38:02 +010054 void Capture(IReadCounterValues& readCounterValues);
Finn Williams032bc742020-02-12 11:02:34 +000055 void DispatchPeriodicCounterCapturePacket(
56 const armnn::BackendId& backendId, const std::vector<Timestamp>& timestampValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010057
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010058 const Holder& m_CaptureDataHolder;
Finn Williamsf4d59a62019-10-14 15:55:18 +010059 bool m_IsRunning;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010060 std::atomic<bool> m_KeepRunning;
61 std::thread m_PeriodCaptureThread;
Finn Williamsf3fcf322020-05-11 14:38:02 +010062 IReadCounterValues& m_ReadCounterValues;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010063 ISendCounterPacket& m_SendCounterPacket;
Finn Williams032bc742020-02-12 11:02:34 +000064 const ICounterMappings& m_CounterIdMap;
65 const std::unordered_map<armnn::BackendId,
Finn Williamsfe5a24b2020-04-09 16:05:28 +010066 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>& m_BackendProfilingContexts;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010067};
68
69} // namespace profiling
70
71} // namespace armnn