• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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