blob: c33dd921934e772315671ebc89245b26b3ca8d03 [file] [log] [blame]
Matteo Martincigh830101c2019-10-22 11:07:45 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Colm Donelan5ccb33d2020-01-24 16:27:02 +00008#include "armnn/profiling/ISendTimelinePacket.hpp"
janeil01c4946c72019-11-07 09:32:28 +00009#include <armnn/Types.hpp>
Matteo Martincigh830101c2019-10-22 11:07:45 +010010
11namespace armnn
12{
13
14namespace profiling
15{
16
17class TimelineUtilityMethods
18{
19public:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000020
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();
24
25 TimelineUtilityMethods(std::unique_ptr<ISendTimelinePacket>& sendTimelinePacket)
26 : m_SendTimelinePacket(std::move(sendTimelinePacket)) {}
27
28 TimelineUtilityMethods(TimelineUtilityMethods&& other)
29 : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)) {}
30
31 TimelineUtilityMethods(const TimelineUtilityMethods& other) = delete;
32
33 TimelineUtilityMethods& operator=(const TimelineUtilityMethods& other) = delete;
34
35 TimelineUtilityMethods& operator=(TimelineUtilityMethods&& other) = default;
36
Matteo Martincigh830101c2019-10-22 11:07:45 +010037 ~TimelineUtilityMethods() = default;
38
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000039 void SendWellKnownLabelsAndEventClasses();
40
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000041 ProfilingDynamicGuid CreateNamedTypedEntity(const std::string& name, const std::string& type);
42
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000043 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, const std::string& type);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000044
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000045 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, ProfilingStaticGuid typeGuid);
46
47 void MarkEntityWithLabel(ProfilingGuid entityGuid, const std::string &labelName, ProfilingStaticGuid labelLinkGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +010048
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000049 ProfilingStaticGuid DeclareLabel(const std::string& labelName);
50
51 void NameEntity(ProfilingGuid entityGuid, const std::string& name);
52
53 void TypeEntity(ProfilingGuid entityGuid, const std::string& type);
54
Narumol Prangnawarat94a30882019-10-30 12:48:31 +000055 ProfilingDynamicGuid CreateNamedTypedChildEntity(ProfilingGuid parentEntityGuid,
56 const std::string& entityName,
57 const std::string& entityType);
58
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000059 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid,
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000060 ProfilingGuid parentEntityGuid,
61 const std::string& entityName,
62 const std::string& entityType);
63
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000064 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid,
65 ProfilingGuid parentEntityGuid,
66 const std::string& entityName,
67 ProfilingStaticGuid typeGuid);
68
69 ProfilingDynamicGuid CreateRelationship(ProfilingRelationshipType relationshipType,
70 ProfilingGuid headGuid,
71 ProfilingGuid tailGuid);
72
73 ProfilingDynamicGuid CreateConnectionRelationship(ProfilingRelationshipType relationshipType,
74 ProfilingGuid headGuid,
75 ProfilingGuid tailGuid);
76
77 void CreateTypedEntity(ProfilingGuid entityGuid, ProfilingStaticGuid typeGuid);
78
79 void MarkEntityWithType(ProfilingGuid entityGuid, ProfilingStaticGuid typeNameGuid);
80
Matteo Martincigh5dc816e2019-11-04 14:05:28 +000081 ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid);
82
David Monahan6198fe02019-12-02 08:35:43 +000083 ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid,
84 ProfilingGuid inferenceGuid);
85
86 void RecordEndOfLifeEvent(ProfilingGuid entityGuid);
87
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000088 void Commit() { m_SendTimelinePacket->Commit(); }
89
Matteo Martincigh830101c2019-10-22 11:07:45 +010090private:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 std::unique_ptr<ISendTimelinePacket> m_SendTimelinePacket;
Matteo Martincigh830101c2019-10-22 11:07:45 +010092};
93
94} // namespace profiling
95
96} // namespace armnn