blob: df56cd6f4206a8b6fde04450a998121eceaf7d88 [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
Sadik Armagan3184c902020-03-18 10:57:30 +00008#include "ProfilingService.hpp"
Colm Donelan5ccb33d2020-01-24 16:27:02 +00009#include "armnn/profiling/ISendTimelinePacket.hpp"
Sadik Armagan3184c902020-03-18 10:57:30 +000010
janeil01c4946c72019-11-07 09:32:28 +000011#include <armnn/Types.hpp>
Matteo Martincigh830101c2019-10-22 11:07:45 +010012
13namespace armnn
14{
15
16namespace profiling
17{
18
19class TimelineUtilityMethods
20{
21public:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000022
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
Sadik Armagan3184c902020-03-18 10:57:30 +000025 static std::unique_ptr<TimelineUtilityMethods> GetTimelineUtils(ProfilingService& profilingService);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000026
Sadik Armagan3184c902020-03-18 10:57:30 +000027 TimelineUtilityMethods(
28 std::unique_ptr<ISendTimelinePacket>& sendTimelinePacket, ProfilingService& profilingService)
29 : m_SendTimelinePacket(std::move(sendTimelinePacket)), m_ProfilingService(profilingService) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000030
31 TimelineUtilityMethods(TimelineUtilityMethods&& other)
Sadik Armagan3184c902020-03-18 10:57:30 +000032 : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)), m_ProfilingService(other.m_ProfilingService) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000033
34 TimelineUtilityMethods(const TimelineUtilityMethods& other) = delete;
35
36 TimelineUtilityMethods& operator=(const TimelineUtilityMethods& other) = delete;
37
38 TimelineUtilityMethods& operator=(TimelineUtilityMethods&& other) = default;
39
Matteo Martincigh830101c2019-10-22 11:07:45 +010040 ~TimelineUtilityMethods() = default;
41
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000042 void SendWellKnownLabelsAndEventClasses();
43
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000044 ProfilingDynamicGuid CreateNamedTypedEntity(const std::string& name, const std::string& type);
45
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000046 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, const std::string& type);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000047
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000048 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, ProfilingStaticGuid typeGuid);
49
50 void MarkEntityWithLabel(ProfilingGuid entityGuid, const std::string &labelName, ProfilingStaticGuid labelLinkGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +010051
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000052 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
Narumol Prangnawarat94a30882019-10-30 12:48:31 +000058 ProfilingDynamicGuid CreateNamedTypedChildEntity(ProfilingGuid parentEntityGuid,
59 const std::string& entityName,
60 const std::string& entityType);
61
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000062 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid,
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000063 ProfilingGuid parentEntityGuid,
64 const std::string& entityName,
65 const std::string& entityType);
66
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000067 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
76 ProfilingDynamicGuid CreateConnectionRelationship(ProfilingRelationshipType relationshipType,
77 ProfilingGuid headGuid,
78 ProfilingGuid tailGuid);
79
80 void CreateTypedEntity(ProfilingGuid entityGuid, ProfilingStaticGuid typeGuid);
81
82 void MarkEntityWithType(ProfilingGuid entityGuid, ProfilingStaticGuid typeNameGuid);
83
Matteo Martincigh5dc816e2019-11-04 14:05:28 +000084 ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid);
85
David Monahan6198fe02019-12-02 08:35:43 +000086 ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid,
87 ProfilingGuid inferenceGuid);
88
89 void RecordEndOfLifeEvent(ProfilingGuid entityGuid);
90
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000091 void Commit() { m_SendTimelinePacket->Commit(); }
92
Matteo Martincigh830101c2019-10-22 11:07:45 +010093private:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000094 std::unique_ptr<ISendTimelinePacket> m_SendTimelinePacket;
Sadik Armagan3184c902020-03-18 10:57:30 +000095 profiling::ProfilingService& m_ProfilingService;
Matteo Martincigh830101c2019-10-22 11:07:45 +010096};
97
98} // namespace profiling
99
100} // namespace armnn