blob: ac084af3dc4e190926db7d832747f5856d21f784 [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"
Finn Williams56b465d2020-05-15 13:34:12 +010010#include <Packet.hpp>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010011#include "SendCounterPacket.hpp"
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010012#include "ICounterValues.hpp"
Finn Williams032bc742020-02-12 11:02:34 +000013#include "CounterIdMap.hpp"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010014
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010015#include <atomic>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010016#include <mutex>
17#include <thread>
Finn Williams032bc742020-02-12 11:02:34 +000018#include <armnn/backends/profiling/IBackendProfilingContext.hpp>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010019
20namespace armnn
21{
22
23namespace profiling
24{
25
26class PeriodicCounterCapture final : public IPeriodicCounterCapture
27{
28public:
Finn Williams032bc742020-02-12 11:02:34 +000029 PeriodicCounterCapture(const Holder& data,
30 ISendCounterPacket& packet,
Finn Williamsf3fcf322020-05-11 14:38:02 +010031 IReadCounterValues& readCounterValue,
Finn Williams032bc742020-02-12 11:02:34 +000032 const ICounterMappings& counterIdMap,
33 const std::unordered_map<armnn::BackendId,
34 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>&
35 backendProfilingContexts)
36 : m_CaptureDataHolder(data)
37 , m_IsRunning(false)
38 , m_KeepRunning(false)
39 , m_ReadCounterValues(readCounterValue)
40 , m_SendCounterPacket(packet)
41 , m_CounterIdMap(counterIdMap)
Finn Williamsfe5a24b2020-04-09 16:05:28 +010042 , m_BackendProfilingContexts(backendProfilingContexts)
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010043 {}
44 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010045
46 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010047 void Stop() override;
Finn Williamsf4d59a62019-10-14 15:55:18 +010048 bool IsRunning() const { return m_IsRunning; }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010049
50private:
51 CaptureData ReadCaptureData();
Finn Williamsf3fcf322020-05-11 14:38:02 +010052 void Capture(IReadCounterValues& readCounterValues);
Finn Williams032bc742020-02-12 11:02:34 +000053 void DispatchPeriodicCounterCapturePacket(
54 const armnn::BackendId& backendId, const std::vector<Timestamp>& timestampValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010055
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010056 const Holder& m_CaptureDataHolder;
Finn Williamsf4d59a62019-10-14 15:55:18 +010057 bool m_IsRunning;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010058 std::atomic<bool> m_KeepRunning;
59 std::thread m_PeriodCaptureThread;
Finn Williamsf3fcf322020-05-11 14:38:02 +010060 IReadCounterValues& m_ReadCounterValues;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010061 ISendCounterPacket& m_SendCounterPacket;
Finn Williams032bc742020-02-12 11:02:34 +000062 const ICounterMappings& m_CounterIdMap;
63 const std::unordered_map<armnn::BackendId,
Finn Williamsfe5a24b2020-04-09 16:05:28 +010064 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>& m_BackendProfilingContexts;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010065};
66
67} // namespace profiling
68
69} // namespace armnn