aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/ProfilingService.hpp
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2022-03-23 23:01:26 +0000
committerJim Flynn <jim.flynn@arm.com>2022-03-23 23:43:35 +0000
commit3e9bc19ad523361e6b18057849e30c0c48183915 (patch)
treeb7b012a9734ce39d054fc5d92302780fd838e5c8 /src/profiling/ProfilingService.hpp
parent277618302d0f131eac0b6ac2015dd3eb09aa6ff9 (diff)
downloadarmnn-3e9bc19ad523361e6b18057849e30c0c48183915.tar.gz
IVGCVSW-6706 Create the libpipeClient library
Change-Id: I2368aade38ad3808fab55d8a86cd659d4e95d91e Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/profiling/ProfilingService.hpp')
-rw-r--r--src/profiling/ProfilingService.hpp304
1 files changed, 0 insertions, 304 deletions
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
deleted file mode 100644
index b84b39d0df..0000000000
--- a/src/profiling/ProfilingService.hpp
+++ /dev/null
@@ -1,304 +0,0 @@
-//
-// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ActivateTimelineReportingCommandHandler.hpp"
-#include "BufferManager.hpp"
-#include "CommandHandler.hpp"
-#include "ConnectionAcknowledgedCommandHandler.hpp"
-#include "DeactivateTimelineReportingCommandHandler.hpp"
-#include "INotifyBackends.hpp"
-#include "PeriodicCounterCapture.hpp"
-#include "PeriodicCounterSelectionCommandHandler.hpp"
-#include "PerJobCounterSelectionCommandHandler.hpp"
-#include "ProfilingConnectionFactory.hpp"
-#include "ProfilingStateMachine.hpp"
-#include "RequestCounterDirectoryCommandHandler.hpp"
-#include "SendCounterPacket.hpp"
-#include "SendThread.hpp"
-#include "SendTimelinePacket.hpp"
-#include "TimelinePacketWriterFactory.hpp"
-
-#include <client/include/CounterIdMap.hpp>
-#include <client/include/ICounterValues.hpp>
-#include <client/include/ILocalPacketHandler.hpp>
-#include <client/include/IProfilingService.hpp>
-#include <client/include/IReportStructure.hpp>
-
-#include <client/include/backends/IBackendProfilingContext.hpp>
-
-#include <common/include/CounterDirectory.hpp>
-
-#include <list>
-
-namespace arm
-{
-
-namespace pipe
-{
-
-class ProfilingService : public IProfilingService, public INotifyBackends
-{
-public:
- using IProfilingConnectionFactoryPtr = std::unique_ptr<IProfilingConnectionFactory>;
- using IProfilingConnectionPtr = std::unique_ptr<IProfilingConnection>;
- using CounterIndices = std::vector<std::atomic<uint32_t>*>;
- using CounterValues = std::list<std::atomic<uint32_t>>;
- using BackendProfilingContext = std::unordered_map<std::string,
- std::shared_ptr<IBackendProfilingContext>>;
-
- 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())
- : m_Options()
- , m_TimelineReporting(false)
- , m_ProfilingConnectionFactory(new ProfilingConnectionFactory())
- , m_ProfilingConnection()
- , m_StateMachine()
- , m_CounterIndex()
- , m_CounterValues()
- , m_CommandHandlerRegistry()
- , m_PacketVersionResolver()
- , m_CommandHandler(1000,
- false,
- m_CommandHandlerRegistry,
- m_PacketVersionResolver)
- , m_BufferManager()
- , m_SendCounterPacket(m_BufferManager, softwareInfo, softwareVersion, hardwareVersion)
- , m_SendThread(m_StateMachine, m_BufferManager, m_SendCounterPacket)
- , m_SendTimelinePacket(m_BufferManager)
- , m_PeriodicCounterCapture(m_Holder, m_SendCounterPacket, *this, m_CounterIdMap, m_BackendProfilingContexts)
- , m_ConnectionAcknowledgedCommandHandler(0,
- 1,
- m_PacketVersionResolver.ResolvePacketVersion(0, 1).GetEncodedValue(),
- m_CounterDirectory,
- m_SendCounterPacket,
- m_SendTimelinePacket,
- m_StateMachine,
- *this,
- m_BackendProfilingContexts)
- , m_RequestCounterDirectoryCommandHandler(0,
- 3,
- m_PacketVersionResolver.ResolvePacketVersion(0, 3).GetEncodedValue(),
- m_CounterDirectory,
- m_SendCounterPacket,
- m_SendTimelinePacket,
- m_StateMachine)
- , m_PeriodicCounterSelectionCommandHandler(0,
- 4,
- m_PacketVersionResolver.ResolvePacketVersion(0, 4).GetEncodedValue(),
- m_BackendProfilingContexts,
- m_CounterIdMap,
- m_Holder,
- maxGlobalCounterId,
- m_PeriodicCounterCapture,
- *this,
- m_SendCounterPacket,
- m_StateMachine)
- , m_PerJobCounterSelectionCommandHandler(0,
- 5,
- m_PacketVersionResolver.ResolvePacketVersion(0, 5).GetEncodedValue(),
- m_StateMachine)
- , m_ActivateTimelineReportingCommandHandler(0,
- 6,
- m_PacketVersionResolver.ResolvePacketVersion(0, 6)
- .GetEncodedValue(),
- m_SendTimelinePacket,
- m_StateMachine,
- reportStructure,
- m_TimelineReporting,
- *this,
- *this)
- , m_DeactivateTimelineReportingCommandHandler(0,
- 7,
- m_PacketVersionResolver.ResolvePacketVersion(0, 7)
- .GetEncodedValue(),
- m_TimelineReporting,
- m_StateMachine,
- *this)
- , m_TimelinePacketWriterFactory(m_BufferManager)
- , m_MaxGlobalCounterId(maxGlobalCounterId)
- , m_ServiceActive(false)
- , m_Initialiser(initialiser)
- {
- // Register the "Connection Acknowledged" command handler
- m_CommandHandlerRegistry.RegisterFunctor(&m_ConnectionAcknowledgedCommandHandler);
-
- // Register the "Request Counter Directory" command handler
- m_CommandHandlerRegistry.RegisterFunctor(&m_RequestCounterDirectoryCommandHandler);
-
- // Register the "Periodic Counter Selection" command handler
- m_CommandHandlerRegistry.RegisterFunctor(&m_PeriodicCounterSelectionCommandHandler);
-
- // Register the "Per-Job Counter Selection" command handler
- m_CommandHandlerRegistry.RegisterFunctor(&m_PerJobCounterSelectionCommandHandler);
-
- m_CommandHandlerRegistry.RegisterFunctor(&m_ActivateTimelineReportingCommandHandler);
-
- m_CommandHandlerRegistry.RegisterFunctor(&m_DeactivateTimelineReportingCommandHandler);
- }
-
- ~ProfilingService();
-
- // Resets the profiling options, optionally clears the profiling service entirely
- void ResetExternalProfilingOptions(const ProfilingOptions& options,
- bool resetProfilingService = false) override;
- ProfilingState ConfigureProfilingService(const ProfilingOptions& options,
- bool resetProfilingService = false) override;
-
-
- // Updates the profiling service, making it transition to a new state if necessary
- void Update();
-
- // Disconnects the profiling service from the external server
- void Disconnect() override;
-
- // Store a profiling context returned from a backend that support profiling.
- void AddBackendProfilingContext(const std::string& backendId,
- std::shared_ptr<IBackendProfilingContext> profilingContext) override;
-
- // Enable the recording of timeline events and entities
- void NotifyBackendsForTimelineReporting() override;
-
- const ICounterDirectory& GetCounterDirectory() const;
- ICounterRegistry& GetCounterRegistry() override;
- ProfilingState GetCurrentState() const override;
- bool IsCounterRegistered(uint16_t counterUid) const override;
- uint32_t GetAbsoluteCounterValue(uint16_t counterUid) const override;
- uint32_t GetDeltaCounterValue(uint16_t counterUid) override;
- uint16_t GetCounterCount() const override;
- // counter global/backend mapping functions
- const ICounterMappings& GetCounterMappings() const override;
- IRegisterCounterMapping& GetCounterMappingRegistry() override;
- bool IsCategoryRegistered(const std::string& categoryName) const override;
- bool IsCounterRegistered(const std::string& counterName) const override;
-
- // Getters for the profiling service state
- bool IsProfilingEnabled() const override;
-
- CaptureData GetCaptureData() override;
- void SetCaptureData(uint32_t capturePeriod,
- const std::vector<uint16_t>& counterIds,
- const std::set<std::string>& activeBackends);
-
- // Setters for the profiling service state
- void SetCounterValue(uint16_t counterUid, uint32_t value) override;
- uint32_t AddCounterValue(uint16_t counterUid, uint32_t value) override;
- uint32_t SubtractCounterValue(uint16_t counterUid, uint32_t value) override;
- uint32_t IncrementCounterValue(uint16_t counterUid) override;
-
- void InitializeCounterValue(uint16_t counterUid) override;
-
- std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() const override;
-
- ISendCounterPacket& GetSendCounterPacket() override
- {
- return m_SendCounterPacket;
- }
-
- bool IsTimelineReportingEnabled() const override
- {
- return m_TimelineReporting;
- }
-
- void AddLocalPacketHandler(ILocalPacketHandlerSharedPtr localPacketHandler);
-
- void NotifyProfilingServiceActive() override; // IProfilingServiceStatus
- void WaitForProfilingServiceActivation(unsigned int timeout) override; // IProfilingServiceStatus
-
-private:
- //Copy/move constructors/destructors and copy/move assignment operators are deleted
- ProfilingService(const ProfilingService&) = delete;
- ProfilingService(ProfilingService&&) = delete;
- ProfilingService& operator=(const ProfilingService&) = delete;
- ProfilingService& operator=(ProfilingService&&) = delete;
-
- // Initialization/reset functions
- void Initialize();
- void Reset();
- void Stop();
-
- // Helper function
- void CheckCounterUid(uint16_t counterUid) const;
-
- // Profiling service components
- ProfilingOptions m_Options;
- std::atomic<bool> m_TimelineReporting;
- CounterDirectory m_CounterDirectory;
- CounterIdMap m_CounterIdMap;
- IProfilingConnectionFactoryPtr m_ProfilingConnectionFactory;
- IProfilingConnectionPtr m_ProfilingConnection;
- ProfilingStateMachine m_StateMachine;
- CounterIndices m_CounterIndex;
- CounterValues m_CounterValues;
- arm::pipe::CommandHandlerRegistry m_CommandHandlerRegistry;
- arm::pipe::PacketVersionResolver m_PacketVersionResolver;
- CommandHandler m_CommandHandler;
- BufferManager m_BufferManager;
- SendCounterPacket m_SendCounterPacket;
- SendThread m_SendThread;
- SendTimelinePacket m_SendTimelinePacket;
-
- Holder m_Holder;
-
- PeriodicCounterCapture m_PeriodicCounterCapture;
-
- ConnectionAcknowledgedCommandHandler m_ConnectionAcknowledgedCommandHandler;
- RequestCounterDirectoryCommandHandler m_RequestCounterDirectoryCommandHandler;
- PeriodicCounterSelectionCommandHandler m_PeriodicCounterSelectionCommandHandler;
- PerJobCounterSelectionCommandHandler m_PerJobCounterSelectionCommandHandler;
- ActivateTimelineReportingCommandHandler m_ActivateTimelineReportingCommandHandler;
- DeactivateTimelineReportingCommandHandler m_DeactivateTimelineReportingCommandHandler;
-
- TimelinePacketWriterFactory m_TimelinePacketWriterFactory;
- BackendProfilingContext m_BackendProfilingContexts;
- uint16_t m_MaxGlobalCounterId;
-
- // Signalling to let external actors know when service is active or not
- std::mutex m_ServiceActiveMutex;
- std::condition_variable m_ServiceActiveConditionVariable;
- bool m_ServiceActive;
-
- IInitialiseProfilingService& m_Initialiser;
-
-protected:
-
- // Protected methods for testing
- void SwapProfilingConnectionFactory(ProfilingService& instance,
- IProfilingConnectionFactory* other,
- IProfilingConnectionFactory*& backup)
- {
- ARM_PIPE_ASSERT(instance.m_ProfilingConnectionFactory);
- ARM_PIPE_ASSERT(other);
-
- backup = instance.m_ProfilingConnectionFactory.release();
- instance.m_ProfilingConnectionFactory.reset(other);
- }
- IProfilingConnection* GetProfilingConnection(ProfilingService& instance)
- {
- return instance.m_ProfilingConnection.get();
- }
- void TransitionToState(ProfilingService& instance, ProfilingState newState)
- {
- instance.m_StateMachine.TransitionToState(newState);
- }
- bool WaitForPacketSent(ProfilingService& instance, uint32_t timeout = 1000)
- {
- return instance.m_SendThread.WaitForPacketSent(timeout);
- }
-
- BufferManager& GetBufferManager(ProfilingService& instance)
- {
- return instance.m_BufferManager;
- }
-};
-
-} // namespace pipe
-
-} // namespace arm