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