xref: /aosp_15_r20/external/armnn/profiling/client/src/ProfilingService.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2019 Arm Ltd and Contributors. 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 "ActivateTimelineReportingCommandHandler.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include "BufferManager.hpp"
10*89c4ff92SAndroid Build Coastguard Worker #include "CommandHandler.hpp"
11*89c4ff92SAndroid Build Coastguard Worker #include "ConnectionAcknowledgedCommandHandler.hpp"
12*89c4ff92SAndroid Build Coastguard Worker #include "DeactivateTimelineReportingCommandHandler.hpp"
13*89c4ff92SAndroid Build Coastguard Worker #include "INotifyBackends.hpp"
14*89c4ff92SAndroid Build Coastguard Worker #include "PeriodicCounterCapture.hpp"
15*89c4ff92SAndroid Build Coastguard Worker #include "PeriodicCounterSelectionCommandHandler.hpp"
16*89c4ff92SAndroid Build Coastguard Worker #include "PerJobCounterSelectionCommandHandler.hpp"
17*89c4ff92SAndroid Build Coastguard Worker #include "ProfilingConnectionFactory.hpp"
18*89c4ff92SAndroid Build Coastguard Worker #include "ProfilingStateMachine.hpp"
19*89c4ff92SAndroid Build Coastguard Worker #include "RequestCounterDirectoryCommandHandler.hpp"
20*89c4ff92SAndroid Build Coastguard Worker #include "SendCounterPacket.hpp"
21*89c4ff92SAndroid Build Coastguard Worker #include "SendThread.hpp"
22*89c4ff92SAndroid Build Coastguard Worker #include "SendTimelinePacket.hpp"
23*89c4ff92SAndroid Build Coastguard Worker #include "TimelinePacketWriterFactory.hpp"
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker #include <client/include/CounterIdMap.hpp>
26*89c4ff92SAndroid Build Coastguard Worker #include <client/include/ICounterValues.hpp>
27*89c4ff92SAndroid Build Coastguard Worker #include <client/include/ILocalPacketHandler.hpp>
28*89c4ff92SAndroid Build Coastguard Worker #include <client/include/IProfilingService.hpp>
29*89c4ff92SAndroid Build Coastguard Worker #include <client/include/IReportStructure.hpp>
30*89c4ff92SAndroid Build Coastguard Worker 
31*89c4ff92SAndroid Build Coastguard Worker #include <client/include/backends/IBackendProfilingContext.hpp>
32*89c4ff92SAndroid Build Coastguard Worker 
33*89c4ff92SAndroid Build Coastguard Worker #include <common/include/CounterDirectory.hpp>
34*89c4ff92SAndroid Build Coastguard Worker 
35*89c4ff92SAndroid Build Coastguard Worker #include <list>
36*89c4ff92SAndroid Build Coastguard Worker 
37*89c4ff92SAndroid Build Coastguard Worker namespace arm
38*89c4ff92SAndroid Build Coastguard Worker {
39*89c4ff92SAndroid Build Coastguard Worker 
40*89c4ff92SAndroid Build Coastguard Worker namespace pipe
41*89c4ff92SAndroid Build Coastguard Worker {
42*89c4ff92SAndroid Build Coastguard Worker 
43*89c4ff92SAndroid Build Coastguard Worker class ProfilingService : public IProfilingService, public INotifyBackends
44*89c4ff92SAndroid Build Coastguard Worker {
45*89c4ff92SAndroid Build Coastguard Worker public:
46*89c4ff92SAndroid Build Coastguard Worker     using IProfilingConnectionFactoryPtr = std::unique_ptr<IProfilingConnectionFactory>;
47*89c4ff92SAndroid Build Coastguard Worker     using IProfilingConnectionPtr = std::unique_ptr<IProfilingConnection>;
48*89c4ff92SAndroid Build Coastguard Worker     using CounterIndices = std::vector<std::atomic<uint32_t>*>;
49*89c4ff92SAndroid Build Coastguard Worker     using CounterValues = std::list<std::atomic<uint32_t>>;
50*89c4ff92SAndroid Build Coastguard Worker     using BackendProfilingContext = std::unordered_map<std::string,
51*89c4ff92SAndroid Build Coastguard Worker                                                        std::shared_ptr<IBackendProfilingContext>>;
52*89c4ff92SAndroid Build Coastguard Worker 
ProfilingService(uint16_t maxGlobalCounterId,IInitialiseProfilingService & initialiser,const std::string & softwareInfo,const std::string & softwareVersion,const std::string & hardwareVersion,arm::pipe::Optional<IReportStructure &> reportStructure=arm::pipe::EmptyOptional ())53*89c4ff92SAndroid Build Coastguard Worker     ProfilingService(uint16_t maxGlobalCounterId,
54*89c4ff92SAndroid Build Coastguard Worker                      IInitialiseProfilingService& initialiser,
55*89c4ff92SAndroid Build Coastguard Worker                      const std::string& softwareInfo,
56*89c4ff92SAndroid Build Coastguard Worker                      const std::string& softwareVersion,
57*89c4ff92SAndroid Build Coastguard Worker                      const std::string& hardwareVersion,
58*89c4ff92SAndroid Build Coastguard Worker                      arm::pipe::Optional<IReportStructure&> reportStructure = arm::pipe::EmptyOptional())
59*89c4ff92SAndroid Build Coastguard Worker         : m_Options()
60*89c4ff92SAndroid Build Coastguard Worker         , m_TimelineReporting(false)
61*89c4ff92SAndroid Build Coastguard Worker         , m_ProfilingConnectionFactory(new ProfilingConnectionFactory())
62*89c4ff92SAndroid Build Coastguard Worker         , m_ProfilingConnection()
63*89c4ff92SAndroid Build Coastguard Worker         , m_StateMachine()
64*89c4ff92SAndroid Build Coastguard Worker         , m_CounterIndex()
65*89c4ff92SAndroid Build Coastguard Worker         , m_CounterValues()
66*89c4ff92SAndroid Build Coastguard Worker         , m_CommandHandlerRegistry()
67*89c4ff92SAndroid Build Coastguard Worker         , m_PacketVersionResolver()
68*89c4ff92SAndroid Build Coastguard Worker         , m_CommandHandler(1000,
69*89c4ff92SAndroid Build Coastguard Worker                            false,
70*89c4ff92SAndroid Build Coastguard Worker                            m_CommandHandlerRegistry,
71*89c4ff92SAndroid Build Coastguard Worker                            m_PacketVersionResolver)
72*89c4ff92SAndroid Build Coastguard Worker         , m_BufferManager()
73*89c4ff92SAndroid Build Coastguard Worker         , m_SendCounterPacket(m_BufferManager, softwareInfo, softwareVersion, hardwareVersion)
74*89c4ff92SAndroid Build Coastguard Worker         , m_SendThread(m_StateMachine, m_BufferManager, m_SendCounterPacket)
75*89c4ff92SAndroid Build Coastguard Worker         , m_SendTimelinePacket(m_BufferManager)
76*89c4ff92SAndroid Build Coastguard Worker         , m_PeriodicCounterCapture(m_Holder, m_SendCounterPacket, *this, m_CounterIdMap, m_BackendProfilingContexts)
77*89c4ff92SAndroid Build Coastguard Worker         , m_ConnectionAcknowledgedCommandHandler(0,
78*89c4ff92SAndroid Build Coastguard Worker                                                  1,
79*89c4ff92SAndroid Build Coastguard Worker                                                  m_PacketVersionResolver.ResolvePacketVersion(0, 1).GetEncodedValue(),
80*89c4ff92SAndroid Build Coastguard Worker                                                  m_CounterDirectory,
81*89c4ff92SAndroid Build Coastguard Worker                                                  m_SendCounterPacket,
82*89c4ff92SAndroid Build Coastguard Worker                                                  m_SendTimelinePacket,
83*89c4ff92SAndroid Build Coastguard Worker                                                  m_StateMachine,
84*89c4ff92SAndroid Build Coastguard Worker                                                  *this,
85*89c4ff92SAndroid Build Coastguard Worker                                                  m_BackendProfilingContexts)
86*89c4ff92SAndroid Build Coastguard Worker         , m_RequestCounterDirectoryCommandHandler(0,
87*89c4ff92SAndroid Build Coastguard Worker                                                   3,
88*89c4ff92SAndroid Build Coastguard Worker                                                   m_PacketVersionResolver.ResolvePacketVersion(0, 3).GetEncodedValue(),
89*89c4ff92SAndroid Build Coastguard Worker                                                   m_CounterDirectory,
90*89c4ff92SAndroid Build Coastguard Worker                                                   m_SendCounterPacket,
91*89c4ff92SAndroid Build Coastguard Worker                                                   m_SendTimelinePacket,
92*89c4ff92SAndroid Build Coastguard Worker                                                   m_StateMachine)
93*89c4ff92SAndroid Build Coastguard Worker         , m_PeriodicCounterSelectionCommandHandler(0,
94*89c4ff92SAndroid Build Coastguard Worker                                                    4,
95*89c4ff92SAndroid Build Coastguard Worker                                                    m_PacketVersionResolver.ResolvePacketVersion(0, 4).GetEncodedValue(),
96*89c4ff92SAndroid Build Coastguard Worker                                                    m_BackendProfilingContexts,
97*89c4ff92SAndroid Build Coastguard Worker                                                    m_CounterIdMap,
98*89c4ff92SAndroid Build Coastguard Worker                                                    m_Holder,
99*89c4ff92SAndroid Build Coastguard Worker                                                    maxGlobalCounterId,
100*89c4ff92SAndroid Build Coastguard Worker                                                    m_PeriodicCounterCapture,
101*89c4ff92SAndroid Build Coastguard Worker                                                    *this,
102*89c4ff92SAndroid Build Coastguard Worker                                                    m_SendCounterPacket,
103*89c4ff92SAndroid Build Coastguard Worker                                                    m_StateMachine)
104*89c4ff92SAndroid Build Coastguard Worker         , m_PerJobCounterSelectionCommandHandler(0,
105*89c4ff92SAndroid Build Coastguard Worker                                                  5,
106*89c4ff92SAndroid Build Coastguard Worker                                                  m_PacketVersionResolver.ResolvePacketVersion(0, 5).GetEncodedValue(),
107*89c4ff92SAndroid Build Coastguard Worker                                                  m_StateMachine)
108*89c4ff92SAndroid Build Coastguard Worker         , m_ActivateTimelineReportingCommandHandler(0,
109*89c4ff92SAndroid Build Coastguard Worker                                                     6,
110*89c4ff92SAndroid Build Coastguard Worker                                                     m_PacketVersionResolver.ResolvePacketVersion(0, 6)
111*89c4ff92SAndroid Build Coastguard Worker                                                                            .GetEncodedValue(),
112*89c4ff92SAndroid Build Coastguard Worker                                                     m_SendTimelinePacket,
113*89c4ff92SAndroid Build Coastguard Worker                                                     m_StateMachine,
114*89c4ff92SAndroid Build Coastguard Worker                                                     reportStructure,
115*89c4ff92SAndroid Build Coastguard Worker                                                     m_TimelineReporting,
116*89c4ff92SAndroid Build Coastguard Worker                                                     *this,
117*89c4ff92SAndroid Build Coastguard Worker                                                     *this)
118*89c4ff92SAndroid Build Coastguard Worker         , m_DeactivateTimelineReportingCommandHandler(0,
119*89c4ff92SAndroid Build Coastguard Worker                                                       7,
120*89c4ff92SAndroid Build Coastguard Worker                                                       m_PacketVersionResolver.ResolvePacketVersion(0, 7)
121*89c4ff92SAndroid Build Coastguard Worker                                                                              .GetEncodedValue(),
122*89c4ff92SAndroid Build Coastguard Worker                                                       m_TimelineReporting,
123*89c4ff92SAndroid Build Coastguard Worker                                                       m_StateMachine,
124*89c4ff92SAndroid Build Coastguard Worker                                                       *this)
125*89c4ff92SAndroid Build Coastguard Worker         , m_TimelinePacketWriterFactory(m_BufferManager)
126*89c4ff92SAndroid Build Coastguard Worker         , m_MaxGlobalCounterId(maxGlobalCounterId)
127*89c4ff92SAndroid Build Coastguard Worker         , m_ServiceActive(false)
128*89c4ff92SAndroid Build Coastguard Worker         , m_Initialiser(initialiser)
129*89c4ff92SAndroid Build Coastguard Worker     {
130*89c4ff92SAndroid Build Coastguard Worker         // Register the "Connection Acknowledged" command handler
131*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_ConnectionAcknowledgedCommandHandler);
132*89c4ff92SAndroid Build Coastguard Worker 
133*89c4ff92SAndroid Build Coastguard Worker         // Register the "Request Counter Directory" command handler
134*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_RequestCounterDirectoryCommandHandler);
135*89c4ff92SAndroid Build Coastguard Worker 
136*89c4ff92SAndroid Build Coastguard Worker         // Register the "Periodic Counter Selection" command handler
137*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_PeriodicCounterSelectionCommandHandler);
138*89c4ff92SAndroid Build Coastguard Worker 
139*89c4ff92SAndroid Build Coastguard Worker         // Register the "Per-Job Counter Selection" command handler
140*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_PerJobCounterSelectionCommandHandler);
141*89c4ff92SAndroid Build Coastguard Worker 
142*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_ActivateTimelineReportingCommandHandler);
143*89c4ff92SAndroid Build Coastguard Worker 
144*89c4ff92SAndroid Build Coastguard Worker         m_CommandHandlerRegistry.RegisterFunctor(&m_DeactivateTimelineReportingCommandHandler);
145*89c4ff92SAndroid Build Coastguard Worker     }
146*89c4ff92SAndroid Build Coastguard Worker 
147*89c4ff92SAndroid Build Coastguard Worker     ~ProfilingService();
148*89c4ff92SAndroid Build Coastguard Worker 
149*89c4ff92SAndroid Build Coastguard Worker     // Resets the profiling options, optionally clears the profiling service entirely
150*89c4ff92SAndroid Build Coastguard Worker     void ResetExternalProfilingOptions(const ProfilingOptions& options,
151*89c4ff92SAndroid Build Coastguard Worker                                        bool resetProfilingService = false) override;
152*89c4ff92SAndroid Build Coastguard Worker     ProfilingState ConfigureProfilingService(const ProfilingOptions& options,
153*89c4ff92SAndroid Build Coastguard Worker                                              bool resetProfilingService = false) override;
154*89c4ff92SAndroid Build Coastguard Worker 
155*89c4ff92SAndroid Build Coastguard Worker 
156*89c4ff92SAndroid Build Coastguard Worker     // Updates the profiling service, making it transition to a new state if necessary
157*89c4ff92SAndroid Build Coastguard Worker     void Update();
158*89c4ff92SAndroid Build Coastguard Worker 
159*89c4ff92SAndroid Build Coastguard Worker     // Disconnects the profiling service from the external server
160*89c4ff92SAndroid Build Coastguard Worker     void Disconnect() override;
161*89c4ff92SAndroid Build Coastguard Worker 
162*89c4ff92SAndroid Build Coastguard Worker     // Store a profiling context returned from a backend that support profiling.
163*89c4ff92SAndroid Build Coastguard Worker     void AddBackendProfilingContext(const std::string& backendId,
164*89c4ff92SAndroid Build Coastguard Worker         std::shared_ptr<IBackendProfilingContext> profilingContext) override;
165*89c4ff92SAndroid Build Coastguard Worker 
166*89c4ff92SAndroid Build Coastguard Worker     // Enable the recording of timeline events and entities
167*89c4ff92SAndroid Build Coastguard Worker     void NotifyBackendsForTimelineReporting() override;
168*89c4ff92SAndroid Build Coastguard Worker 
169*89c4ff92SAndroid Build Coastguard Worker     const ICounterDirectory& GetCounterDirectory() const;
170*89c4ff92SAndroid Build Coastguard Worker     ICounterRegistry& GetCounterRegistry() override;
171*89c4ff92SAndroid Build Coastguard Worker     ProfilingState GetCurrentState() const override;
172*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterRegistered(uint16_t counterUid) const override;
173*89c4ff92SAndroid Build Coastguard Worker     uint32_t GetAbsoluteCounterValue(uint16_t counterUid) const override;
174*89c4ff92SAndroid Build Coastguard Worker     uint32_t GetDeltaCounterValue(uint16_t counterUid) override;
175*89c4ff92SAndroid Build Coastguard Worker     uint16_t GetCounterCount() const override;
176*89c4ff92SAndroid Build Coastguard Worker     // counter global/backend mapping functions
177*89c4ff92SAndroid Build Coastguard Worker     const ICounterMappings& GetCounterMappings() const override;
178*89c4ff92SAndroid Build Coastguard Worker     IRegisterCounterMapping& GetCounterMappingRegistry() override;
179*89c4ff92SAndroid Build Coastguard Worker     bool IsCategoryRegistered(const std::string& categoryName) const override;
180*89c4ff92SAndroid Build Coastguard Worker     bool IsCounterRegistered(const std::string& counterName) const override;
181*89c4ff92SAndroid Build Coastguard Worker 
182*89c4ff92SAndroid Build Coastguard Worker     // Getters for the profiling service state
183*89c4ff92SAndroid Build Coastguard Worker     bool IsProfilingEnabled() const override;
184*89c4ff92SAndroid Build Coastguard Worker 
185*89c4ff92SAndroid Build Coastguard Worker     CaptureData GetCaptureData() override;
186*89c4ff92SAndroid Build Coastguard Worker     void SetCaptureData(uint32_t capturePeriod,
187*89c4ff92SAndroid Build Coastguard Worker                         const std::vector<uint16_t>& counterIds,
188*89c4ff92SAndroid Build Coastguard Worker                         const std::set<std::string>& activeBackends);
189*89c4ff92SAndroid Build Coastguard Worker 
190*89c4ff92SAndroid Build Coastguard Worker     // Setters for the profiling service state
191*89c4ff92SAndroid Build Coastguard Worker     void SetCounterValue(uint16_t counterUid, uint32_t value) override;
192*89c4ff92SAndroid Build Coastguard Worker     uint32_t AddCounterValue(uint16_t counterUid, uint32_t value) override;
193*89c4ff92SAndroid Build Coastguard Worker     uint32_t SubtractCounterValue(uint16_t counterUid, uint32_t value) override;
194*89c4ff92SAndroid Build Coastguard Worker     uint32_t IncrementCounterValue(uint16_t counterUid) override;
195*89c4ff92SAndroid Build Coastguard Worker 
196*89c4ff92SAndroid Build Coastguard Worker     void InitializeCounterValue(uint16_t counterUid) override;
197*89c4ff92SAndroid Build Coastguard Worker 
198*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() const override;
199*89c4ff92SAndroid Build Coastguard Worker 
GetSendCounterPacket()200*89c4ff92SAndroid Build Coastguard Worker     ISendCounterPacket& GetSendCounterPacket() override
201*89c4ff92SAndroid Build Coastguard Worker     {
202*89c4ff92SAndroid Build Coastguard Worker         return m_SendCounterPacket;
203*89c4ff92SAndroid Build Coastguard Worker     }
204*89c4ff92SAndroid Build Coastguard Worker 
IsTimelineReportingEnabled() const205*89c4ff92SAndroid Build Coastguard Worker     bool IsTimelineReportingEnabled() const override
206*89c4ff92SAndroid Build Coastguard Worker     {
207*89c4ff92SAndroid Build Coastguard Worker         return m_TimelineReporting;
208*89c4ff92SAndroid Build Coastguard Worker     }
209*89c4ff92SAndroid Build Coastguard Worker 
210*89c4ff92SAndroid Build Coastguard Worker     void AddLocalPacketHandler(ILocalPacketHandlerSharedPtr localPacketHandler);
211*89c4ff92SAndroid Build Coastguard Worker 
212*89c4ff92SAndroid Build Coastguard Worker     void NotifyProfilingServiceActive() override; // IProfilingServiceStatus
213*89c4ff92SAndroid Build Coastguard Worker     void WaitForProfilingServiceActivation(unsigned int timeout) override; // IProfilingServiceStatus
214*89c4ff92SAndroid Build Coastguard Worker 
215*89c4ff92SAndroid Build Coastguard Worker private:
216*89c4ff92SAndroid Build Coastguard Worker     //Copy/move constructors/destructors and copy/move assignment operators are deleted
217*89c4ff92SAndroid Build Coastguard Worker     ProfilingService(const ProfilingService&) = delete;
218*89c4ff92SAndroid Build Coastguard Worker     ProfilingService(ProfilingService&&) = delete;
219*89c4ff92SAndroid Build Coastguard Worker     ProfilingService& operator=(const ProfilingService&) = delete;
220*89c4ff92SAndroid Build Coastguard Worker     ProfilingService& operator=(ProfilingService&&) = delete;
221*89c4ff92SAndroid Build Coastguard Worker 
222*89c4ff92SAndroid Build Coastguard Worker     // Initialization/reset functions
223*89c4ff92SAndroid Build Coastguard Worker     void Initialize();
224*89c4ff92SAndroid Build Coastguard Worker     void Reset();
225*89c4ff92SAndroid Build Coastguard Worker     void Stop();
226*89c4ff92SAndroid Build Coastguard Worker 
227*89c4ff92SAndroid Build Coastguard Worker     // Helper function
228*89c4ff92SAndroid Build Coastguard Worker     void CheckCounterUid(uint16_t counterUid) const;
229*89c4ff92SAndroid Build Coastguard Worker 
230*89c4ff92SAndroid Build Coastguard Worker     // Profiling service components
231*89c4ff92SAndroid Build Coastguard Worker     ProfilingOptions                   m_Options;
232*89c4ff92SAndroid Build Coastguard Worker     std::atomic<bool>                  m_TimelineReporting;
233*89c4ff92SAndroid Build Coastguard Worker     CounterDirectory                   m_CounterDirectory;
234*89c4ff92SAndroid Build Coastguard Worker     CounterIdMap                       m_CounterIdMap;
235*89c4ff92SAndroid Build Coastguard Worker     IProfilingConnectionFactoryPtr     m_ProfilingConnectionFactory;
236*89c4ff92SAndroid Build Coastguard Worker     IProfilingConnectionPtr            m_ProfilingConnection;
237*89c4ff92SAndroid Build Coastguard Worker     ProfilingStateMachine              m_StateMachine;
238*89c4ff92SAndroid Build Coastguard Worker     CounterIndices                     m_CounterIndex;
239*89c4ff92SAndroid Build Coastguard Worker     CounterValues                      m_CounterValues;
240*89c4ff92SAndroid Build Coastguard Worker     arm::pipe::CommandHandlerRegistry  m_CommandHandlerRegistry;
241*89c4ff92SAndroid Build Coastguard Worker     arm::pipe::PacketVersionResolver   m_PacketVersionResolver;
242*89c4ff92SAndroid Build Coastguard Worker     CommandHandler                     m_CommandHandler;
243*89c4ff92SAndroid Build Coastguard Worker     BufferManager                      m_BufferManager;
244*89c4ff92SAndroid Build Coastguard Worker     SendCounterPacket                  m_SendCounterPacket;
245*89c4ff92SAndroid Build Coastguard Worker     SendThread                         m_SendThread;
246*89c4ff92SAndroid Build Coastguard Worker     SendTimelinePacket                 m_SendTimelinePacket;
247*89c4ff92SAndroid Build Coastguard Worker 
248*89c4ff92SAndroid Build Coastguard Worker     Holder m_Holder;
249*89c4ff92SAndroid Build Coastguard Worker 
250*89c4ff92SAndroid Build Coastguard Worker     PeriodicCounterCapture m_PeriodicCounterCapture;
251*89c4ff92SAndroid Build Coastguard Worker 
252*89c4ff92SAndroid Build Coastguard Worker     ConnectionAcknowledgedCommandHandler      m_ConnectionAcknowledgedCommandHandler;
253*89c4ff92SAndroid Build Coastguard Worker     RequestCounterDirectoryCommandHandler     m_RequestCounterDirectoryCommandHandler;
254*89c4ff92SAndroid Build Coastguard Worker     PeriodicCounterSelectionCommandHandler    m_PeriodicCounterSelectionCommandHandler;
255*89c4ff92SAndroid Build Coastguard Worker     PerJobCounterSelectionCommandHandler      m_PerJobCounterSelectionCommandHandler;
256*89c4ff92SAndroid Build Coastguard Worker     ActivateTimelineReportingCommandHandler   m_ActivateTimelineReportingCommandHandler;
257*89c4ff92SAndroid Build Coastguard Worker     DeactivateTimelineReportingCommandHandler m_DeactivateTimelineReportingCommandHandler;
258*89c4ff92SAndroid Build Coastguard Worker 
259*89c4ff92SAndroid Build Coastguard Worker     TimelinePacketWriterFactory m_TimelinePacketWriterFactory;
260*89c4ff92SAndroid Build Coastguard Worker     BackendProfilingContext     m_BackendProfilingContexts;
261*89c4ff92SAndroid Build Coastguard Worker     uint16_t                    m_MaxGlobalCounterId;
262*89c4ff92SAndroid Build Coastguard Worker 
263*89c4ff92SAndroid Build Coastguard Worker     // Signalling to let external actors know when service is active or not
264*89c4ff92SAndroid Build Coastguard Worker #if !defined(ARMNN_DISABLE_THREADS)
265*89c4ff92SAndroid Build Coastguard Worker     std::mutex m_ServiceActiveMutex;
266*89c4ff92SAndroid Build Coastguard Worker     std::condition_variable m_ServiceActiveConditionVariable;
267*89c4ff92SAndroid Build Coastguard Worker #endif
268*89c4ff92SAndroid Build Coastguard Worker     bool m_ServiceActive;
269*89c4ff92SAndroid Build Coastguard Worker 
270*89c4ff92SAndroid Build Coastguard Worker     IInitialiseProfilingService& m_Initialiser;
271*89c4ff92SAndroid Build Coastguard Worker 
272*89c4ff92SAndroid Build Coastguard Worker protected:
273*89c4ff92SAndroid Build Coastguard Worker 
274*89c4ff92SAndroid Build Coastguard Worker     // Protected methods for testing
SwapProfilingConnectionFactory(ProfilingService & instance,IProfilingConnectionFactory * other,IProfilingConnectionFactory * & backup)275*89c4ff92SAndroid Build Coastguard Worker     void SwapProfilingConnectionFactory(ProfilingService& instance,
276*89c4ff92SAndroid Build Coastguard Worker                                         IProfilingConnectionFactory* other,
277*89c4ff92SAndroid Build Coastguard Worker                                         IProfilingConnectionFactory*& backup)
278*89c4ff92SAndroid Build Coastguard Worker     {
279*89c4ff92SAndroid Build Coastguard Worker         ARM_PIPE_ASSERT(instance.m_ProfilingConnectionFactory);
280*89c4ff92SAndroid Build Coastguard Worker         ARM_PIPE_ASSERT(other);
281*89c4ff92SAndroid Build Coastguard Worker 
282*89c4ff92SAndroid Build Coastguard Worker         backup = instance.m_ProfilingConnectionFactory.release();
283*89c4ff92SAndroid Build Coastguard Worker         instance.m_ProfilingConnectionFactory.reset(other);
284*89c4ff92SAndroid Build Coastguard Worker     }
GetProfilingConnection(ProfilingService & instance)285*89c4ff92SAndroid Build Coastguard Worker     IProfilingConnection* GetProfilingConnection(ProfilingService& instance)
286*89c4ff92SAndroid Build Coastguard Worker     {
287*89c4ff92SAndroid Build Coastguard Worker         return instance.m_ProfilingConnection.get();
288*89c4ff92SAndroid Build Coastguard Worker     }
TransitionToState(ProfilingService & instance,ProfilingState newState)289*89c4ff92SAndroid Build Coastguard Worker     void TransitionToState(ProfilingService& instance, ProfilingState newState)
290*89c4ff92SAndroid Build Coastguard Worker     {
291*89c4ff92SAndroid Build Coastguard Worker         instance.m_StateMachine.TransitionToState(newState);
292*89c4ff92SAndroid Build Coastguard Worker     }
WaitForPacketSent(ProfilingService & instance,uint32_t timeout=1000)293*89c4ff92SAndroid Build Coastguard Worker     bool WaitForPacketSent(ProfilingService& instance, uint32_t timeout = 1000)
294*89c4ff92SAndroid Build Coastguard Worker     {
295*89c4ff92SAndroid Build Coastguard Worker         return instance.m_SendThread.WaitForPacketSent(timeout);
296*89c4ff92SAndroid Build Coastguard Worker     }
297*89c4ff92SAndroid Build Coastguard Worker 
GetBufferManager(ProfilingService & instance)298*89c4ff92SAndroid Build Coastguard Worker     BufferManager& GetBufferManager(ProfilingService& instance)
299*89c4ff92SAndroid Build Coastguard Worker     {
300*89c4ff92SAndroid Build Coastguard Worker         return instance.m_BufferManager;
301*89c4ff92SAndroid Build Coastguard Worker     }
302*89c4ff92SAndroid Build Coastguard Worker };
303*89c4ff92SAndroid Build Coastguard Worker 
304*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe
305*89c4ff92SAndroid Build Coastguard Worker 
306*89c4ff92SAndroid Build Coastguard Worker } // namespace arm
307