1 // 2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include "ProfilingService.hpp" 9 #include "armnn/profiling/ISendTimelinePacket.hpp" 10 11 #include <armnn/Types.hpp> 12 13 namespace armnn 14 { 15 16 namespace profiling 17 { 18 19 class TimelineUtilityMethods 20 { 21 public: 22 23 // static factory method which will return a pointer to a timelie utility methods 24 // object if profiling is enabled. Otherwise will return a null unique_ptr 25 static std::unique_ptr<TimelineUtilityMethods> GetTimelineUtils(ProfilingService& profilingService); 26 TimelineUtilityMethods(std::unique_ptr<ISendTimelinePacket> & sendTimelinePacket)27 TimelineUtilityMethods( 28 std::unique_ptr<ISendTimelinePacket>& sendTimelinePacket) 29 : m_SendTimelinePacket(std::move(sendTimelinePacket)) {} 30 TimelineUtilityMethods(TimelineUtilityMethods && other)31 TimelineUtilityMethods(TimelineUtilityMethods&& other) 32 : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)) {} 33 34 TimelineUtilityMethods(const TimelineUtilityMethods& other) = delete; 35 36 TimelineUtilityMethods& operator=(const TimelineUtilityMethods& other) = delete; 37 38 TimelineUtilityMethods& operator=(TimelineUtilityMethods&& other) = default; 39 40 ~TimelineUtilityMethods() = default; 41 42 static void SendWellKnownLabelsAndEventClasses(ISendTimelinePacket& timelinePacket); 43 44 ProfilingDynamicGuid CreateNamedTypedEntity(const std::string& name, const std::string& type); 45 46 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, const std::string& type); 47 48 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, ProfilingStaticGuid typeGuid); 49 50 void MarkEntityWithLabel(ProfilingGuid entityGuid, const std::string& labelName, ProfilingStaticGuid labelLinkGuid); 51 52 ProfilingStaticGuid DeclareLabel(const std::string& labelName); 53 54 void NameEntity(ProfilingGuid entityGuid, const std::string& name); 55 56 void TypeEntity(ProfilingGuid entityGuid, const std::string& type); 57 58 ProfilingDynamicGuid CreateNamedTypedChildEntity(ProfilingGuid parentEntityGuid, 59 const std::string& entityName, 60 const std::string& entityType); 61 62 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid, 63 ProfilingGuid parentEntityGuid, 64 const std::string& entityName, 65 const std::string& entityType); 66 67 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid, 68 ProfilingGuid parentEntityGuid, 69 const std::string& entityName, 70 ProfilingStaticGuid typeGuid); 71 72 ProfilingDynamicGuid CreateRelationship(ProfilingRelationshipType relationshipType, 73 ProfilingGuid headGuid, 74 ProfilingGuid tailGuid, 75 ProfilingGuid relationshipCategory); 76 77 ProfilingDynamicGuid CreateConnectionRelationship(ProfilingRelationshipType relationshipType, 78 ProfilingGuid headGuid, 79 ProfilingGuid tailGuid); 80 81 void CreateTypedEntity(ProfilingGuid entityGuid, ProfilingStaticGuid typeGuid); 82 83 void MarkEntityWithType(ProfilingGuid entityGuid, ProfilingStaticGuid typeNameGuid); 84 85 ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid); 86 87 ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid, 88 ProfilingGuid inferenceGuid); 89 90 void RecordEndOfLifeEvent(ProfilingGuid entityGuid); 91 Commit()92 void Commit() { m_SendTimelinePacket->Commit(); } 93 94 private: 95 std::unique_ptr<ISendTimelinePacket> m_SendTimelinePacket; 96 }; 97 98 } // namespace profiling 99 100 } // namespace armnn 101