blob: 2e9ac364f1d73e1d98bdc858f65e02e962fbb50b [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
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010014#include <WallClockTimer.hpp>
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010015
16#include <atomic>
17#include <chrono>
18#include <mutex>
19#include <thread>
20
21namespace armnn
22{
23
24namespace profiling
25{
26
27class PeriodicCounterCapture final : public IPeriodicCounterCapture
28{
29public:
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010030 PeriodicCounterCapture(const Holder& data, ISendCounterPacket& packet, const IReadCounterValues& readCounterValue)
31 : m_CaptureDataHolder(data)
32 , m_IsRunning(false)
33 , m_KeepRunning(false)
34 , m_ReadCounterValues(readCounterValue)
35 , m_SendCounterPacket(packet)
36 {}
37 ~PeriodicCounterCapture() { Stop(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010038
39 void Start() override;
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010040 void Stop() override;
41 bool IsRunning() const { return m_IsRunning.load(); }
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010042
43private:
44 CaptureData ReadCaptureData();
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010045 void Capture(const IReadCounterValues& readCounterValues);
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010046
Matteo Martincighe0e6efc2019-10-04 17:17:42 +010047 const Holder& m_CaptureDataHolder;
48 std::atomic<bool> m_IsRunning;
49 std::atomic<bool> m_KeepRunning;
50 std::thread m_PeriodCaptureThread;
51 const IReadCounterValues& m_ReadCounterValues;
52 ISendCounterPacket& m_SendCounterPacket;
Francis Murtaghfcb8ef62019-09-20 15:40:09 +010053};
54
55} // namespace profiling
56
57} // namespace armnn