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