// // Copyright © 2019 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "ProfilingService.hpp" #include "armnn/profiling/ISendTimelinePacket.hpp" #include namespace armnn { namespace profiling { class TimelineUtilityMethods { public: // static factory method which will return a pointer to a timelie utility methods // object if profiling is enabled. Otherwise will return a null unique_ptr static std::unique_ptr GetTimelineUtils(ProfilingService& profilingService); TimelineUtilityMethods( std::unique_ptr& sendTimelinePacket) : m_SendTimelinePacket(std::move(sendTimelinePacket)) {} TimelineUtilityMethods(TimelineUtilityMethods&& other) : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)) {} TimelineUtilityMethods(const TimelineUtilityMethods& other) = delete; TimelineUtilityMethods& operator=(const TimelineUtilityMethods& other) = delete; TimelineUtilityMethods& operator=(TimelineUtilityMethods&& other) = default; ~TimelineUtilityMethods() = default; static void SendWellKnownLabelsAndEventClasses(ISendTimelinePacket& timelinePacket); ProfilingDynamicGuid CreateNamedTypedEntity(const std::string& name, const std::string& type); void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, const std::string& type); void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, ProfilingStaticGuid typeGuid); void MarkEntityWithLabel(ProfilingGuid entityGuid, const std::string &labelName, ProfilingStaticGuid labelLinkGuid); ProfilingStaticGuid DeclareLabel(const std::string& labelName); void NameEntity(ProfilingGuid entityGuid, const std::string& name); void TypeEntity(ProfilingGuid entityGuid, const std::string& type); ProfilingDynamicGuid CreateNamedTypedChildEntity(ProfilingGuid parentEntityGuid, const std::string& entityName, const std::string& entityType); void CreateNamedTypedChildEntity(ProfilingGuid entityGuid, ProfilingGuid parentEntityGuid, const std::string& entityName, const std::string& entityType); void CreateNamedTypedChildEntity(ProfilingGuid entityGuid, ProfilingGuid parentEntityGuid, const std::string& entityName, ProfilingStaticGuid typeGuid); ProfilingDynamicGuid CreateRelationship(ProfilingRelationshipType relationshipType, ProfilingGuid headGuid, ProfilingGuid tailGuid, ProfilingGuid relationshipCategory); ProfilingDynamicGuid CreateConnectionRelationship(ProfilingRelationshipType relationshipType, ProfilingGuid headGuid, ProfilingGuid tailGuid); void CreateTypedEntity(ProfilingGuid entityGuid, ProfilingStaticGuid typeGuid); void MarkEntityWithType(ProfilingGuid entityGuid, ProfilingStaticGuid typeNameGuid); ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid); ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid, ProfilingGuid inferenceGuid); void RecordEndOfLifeEvent(ProfilingGuid entityGuid); void Commit() { m_SendTimelinePacket->Commit(); } private: std::unique_ptr m_SendTimelinePacket; }; } // namespace profiling } // namespace armnn