blob: d0c96587b481abea6cca841bef74b727c674a905 [file] [log] [blame]
Matteo Martincigh830101c2019-10-22 11:07:45 +01001//
Jim Flynn6398a982020-05-27 17:05:21 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Matteo Martincigh830101c2019-10-22 11:07:45 +01003// 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
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000013namespace arm
Matteo Martincigh830101c2019-10-22 11:07:45 +010014{
15
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000016namespace pipe
Matteo Martincigh830101c2019-10-22 11:07:45 +010017{
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(
Sadik Armagan0a356672020-03-20 11:11:01 +000028 std::unique_ptr<ISendTimelinePacket>& sendTimelinePacket)
29 : m_SendTimelinePacket(std::move(sendTimelinePacket)) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000030
31 TimelineUtilityMethods(TimelineUtilityMethods&& other)
Sadik Armagan0a356672020-03-20 11:11:01 +000032 : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)) {}
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
Finn Williamscf2ad552020-03-20 15:10:59 +000042 static void SendWellKnownLabelsAndEventClasses(ISendTimelinePacket& timelinePacket);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000043
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
Jim Flynnf7713212020-07-14 09:50:59 +010050 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,
Jim Flynn6398a982020-05-27 17:05:21 +010074 ProfilingGuid tailGuid,
75 ProfilingGuid relationshipCategory);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000076
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
Matteo Martincigh5dc816e2019-11-04 14:05:28 +000085 ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid);
86
David Monahan6198fe02019-12-02 08:35:43 +000087 ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid,
88 ProfilingGuid inferenceGuid);
89
90 void RecordEndOfLifeEvent(ProfilingGuid entityGuid);
91
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000092 void Commit() { m_SendTimelinePacket->Commit(); }
93
Matteo Martincigh830101c2019-10-22 11:07:45 +010094private:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000095 std::unique_ptr<ISendTimelinePacket> m_SendTimelinePacket;
Matteo Martincigh830101c2019-10-22 11:07:45 +010096};
97
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000098} // namespace pipe
Matteo Martincigh830101c2019-10-22 11:07:45 +010099
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000100} // namespace arm