blob: 9229a49d85f2eeeb2d11ac9bd451e152c4fc1418 [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 "Packet.hpp"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010011#include "SendCounterPacket.hpp"
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010012#include "ICounterValues.hpp"
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010013
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010014#include <atomic>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010015#include <mutex>
16#include <thread>
17
18namespace armnn
19{
20
21namespace profiling
22{
23
24class PeriodicCounterCapture final : public IPeriodicCounterCapture
25{
26public:
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010027 PeriodicCounterCapture(const Holder& data, ISendCounterPacket& packet, const IReadCounterValues& readCounterValue)
28 : m_CaptureDataHolder(data)
29 , m_IsRunning(false)
30 , m_KeepRunning(false)
31 , m_ReadCounterValues(readCounterValue)
32 , m_SendCounterPacket(packet)
33 {}
34 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010035
36 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010037 void Stop() override;
Finn Williamsf4d59a62019-10-14 15:55:18 +010038 bool IsRunning() const { return m_IsRunning; }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010039
40private:
41 CaptureData ReadCaptureData();
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010042 void Capture(const IReadCounterValues& readCounterValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010043
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010044 const Holder& m_CaptureDataHolder;
Finn Williamsf4d59a62019-10-14 15:55:18 +010045 bool m_IsRunning;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010046 std::atomic<bool> m_KeepRunning;
47 std::thread m_PeriodCaptureThread;
48 const IReadCounterValues& m_ReadCounterValues;
49 ISendCounterPacket& m_SendCounterPacket;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010050};
51
52} // namespace profiling
53
54} // namespace armnn