xref: /aosp_15_r20/external/armnn/profiling/client/src/PeriodicCounterCapture.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2019 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include "IPeriodicCounterCapture.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include "SendCounterPacket.hpp"
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <client/include/CounterIdMap.hpp>
12*89c4ff92SAndroid Build Coastguard Worker #include <client/include/Holder.hpp>
13*89c4ff92SAndroid Build Coastguard Worker #include <client/include/ICounterValues.hpp>
14*89c4ff92SAndroid Build Coastguard Worker 
15*89c4ff92SAndroid Build Coastguard Worker #include <client/include/backends/IBackendProfilingContext.hpp>
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker #include <common/include/Packet.hpp>
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker #include <atomic>
20*89c4ff92SAndroid Build Coastguard Worker 
21*89c4ff92SAndroid Build Coastguard Worker #if !defined(ARMNN_DISABLE_THREADS)
22*89c4ff92SAndroid Build Coastguard Worker #include <mutex>
23*89c4ff92SAndroid Build Coastguard Worker #include <thread>
24*89c4ff92SAndroid Build Coastguard Worker #endif
25*89c4ff92SAndroid Build Coastguard Worker 
26*89c4ff92SAndroid Build Coastguard Worker namespace arm
27*89c4ff92SAndroid Build Coastguard Worker {
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker namespace pipe
30*89c4ff92SAndroid Build Coastguard Worker {
31*89c4ff92SAndroid Build Coastguard Worker 
32*89c4ff92SAndroid Build Coastguard Worker class PeriodicCounterCapture final : public IPeriodicCounterCapture
33*89c4ff92SAndroid Build Coastguard Worker {
34*89c4ff92SAndroid Build Coastguard Worker public:
PeriodicCounterCapture(const Holder & data,ISendCounterPacket & packet,IReadCounterValues & readCounterValue,const ICounterMappings & counterIdMap,const std::unordered_map<std::string,std::shared_ptr<IBackendProfilingContext>> & backendProfilingContexts)35*89c4ff92SAndroid Build Coastguard Worker     PeriodicCounterCapture(const Holder& data,
36*89c4ff92SAndroid Build Coastguard Worker                            ISendCounterPacket& packet,
37*89c4ff92SAndroid Build Coastguard Worker                            IReadCounterValues& readCounterValue,
38*89c4ff92SAndroid Build Coastguard Worker                            const ICounterMappings& counterIdMap,
39*89c4ff92SAndroid Build Coastguard Worker                            const std::unordered_map<std::string,
40*89c4ff92SAndroid Build Coastguard Worker                            std::shared_ptr<IBackendProfilingContext>>& backendProfilingContexts)
41*89c4ff92SAndroid Build Coastguard Worker             : m_CaptureDataHolder(data)
42*89c4ff92SAndroid Build Coastguard Worker             , m_IsRunning(false)
43*89c4ff92SAndroid Build Coastguard Worker             , m_KeepRunning(false)
44*89c4ff92SAndroid Build Coastguard Worker             , m_ReadCounterValues(readCounterValue)
45*89c4ff92SAndroid Build Coastguard Worker             , m_SendCounterPacket(packet)
46*89c4ff92SAndroid Build Coastguard Worker             , m_CounterIdMap(counterIdMap)
47*89c4ff92SAndroid Build Coastguard Worker             , m_BackendProfilingContexts(backendProfilingContexts)
48*89c4ff92SAndroid Build Coastguard Worker     {}
~PeriodicCounterCapture()49*89c4ff92SAndroid Build Coastguard Worker     ~PeriodicCounterCapture() { Stop(); }
50*89c4ff92SAndroid Build Coastguard Worker 
51*89c4ff92SAndroid Build Coastguard Worker     void Start() override;
52*89c4ff92SAndroid Build Coastguard Worker     void Stop() override;
IsRunning() const53*89c4ff92SAndroid Build Coastguard Worker     bool IsRunning() const { return m_IsRunning; }
54*89c4ff92SAndroid Build Coastguard Worker 
55*89c4ff92SAndroid Build Coastguard Worker private:
56*89c4ff92SAndroid Build Coastguard Worker     CaptureData ReadCaptureData();
57*89c4ff92SAndroid Build Coastguard Worker     void Capture(IReadCounterValues& readCounterValues);
58*89c4ff92SAndroid Build Coastguard Worker     void DispatchPeriodicCounterCapturePacket(
59*89c4ff92SAndroid Build Coastguard Worker             const std::string& backendId, const std::vector<Timestamp>& timestampValues);
60*89c4ff92SAndroid Build Coastguard Worker 
61*89c4ff92SAndroid Build Coastguard Worker     const Holder&             m_CaptureDataHolder;
62*89c4ff92SAndroid Build Coastguard Worker     bool                      m_IsRunning;
63*89c4ff92SAndroid Build Coastguard Worker     std::atomic<bool>         m_KeepRunning;
64*89c4ff92SAndroid Build Coastguard Worker #if !defined(ARMNN_DISABLE_THREADS)
65*89c4ff92SAndroid Build Coastguard Worker     std::thread               m_PeriodCaptureThread;
66*89c4ff92SAndroid Build Coastguard Worker #endif
67*89c4ff92SAndroid Build Coastguard Worker     IReadCounterValues&       m_ReadCounterValues;
68*89c4ff92SAndroid Build Coastguard Worker     ISendCounterPacket&       m_SendCounterPacket;
69*89c4ff92SAndroid Build Coastguard Worker     const ICounterMappings&   m_CounterIdMap;
70*89c4ff92SAndroid Build Coastguard Worker     const std::unordered_map<std::string,
71*89c4ff92SAndroid Build Coastguard Worker             std::shared_ptr<IBackendProfilingContext>>& m_BackendProfilingContexts;
72*89c4ff92SAndroid Build Coastguard Worker };
73*89c4ff92SAndroid Build Coastguard Worker 
74*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
75*89c4ff92SAndroid Build Coastguard Worker 
76*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
77