blob: 5bb4e5ead01bd20e16452139578a276b8d18e971 [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
Jim Flynn27761832022-03-20 21:52:17 +00008#include <client/include/IProfilingService.hpp>
9#include <client/include/ISendTimelinePacket.hpp>
Sadik Armagan3184c902020-03-18 10:57:30 +000010
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000011namespace arm
Matteo Martincigh830101c2019-10-22 11:07:45 +010012{
13
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000014namespace pipe
Matteo Martincigh830101c2019-10-22 11:07:45 +010015{
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
Jim Flynnaf947722022-03-02 11:04:47 +000023 static std::unique_ptr<TimelineUtilityMethods> GetTimelineUtils(IProfilingService& profilingService);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000024
Sadik Armagan3184c902020-03-18 10:57:30 +000025 TimelineUtilityMethods(
Sadik Armagan0a356672020-03-20 11:11:01 +000026 std::unique_ptr<ISendTimelinePacket>& sendTimelinePacket)
27 : m_SendTimelinePacket(std::move(sendTimelinePacket)) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000028
29 TimelineUtilityMethods(TimelineUtilityMethods&& other)
Sadik Armagan0a356672020-03-20 11:11:01 +000030 : m_SendTimelinePacket(std::move(other.m_SendTimelinePacket)) {}
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000031
32 TimelineUtilityMethods(const TimelineUtilityMethods& other) = delete;
33
34 TimelineUtilityMethods& operator=(const TimelineUtilityMethods& other) = delete;
35
36 TimelineUtilityMethods& operator=(TimelineUtilityMethods&& other) = default;
37
Matteo Martincigh830101c2019-10-22 11:07:45 +010038 ~TimelineUtilityMethods() = default;
39
Finn Williamscf2ad552020-03-20 15:10:59 +000040 static void SendWellKnownLabelsAndEventClasses(ISendTimelinePacket& timelinePacket);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000041
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000042 ProfilingDynamicGuid CreateNamedTypedEntity(const std::string& name, const std::string& type);
43
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000044 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, const std::string& type);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000045
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000046 void CreateNamedTypedEntity(ProfilingGuid entityGuid, const std::string& name, ProfilingStaticGuid typeGuid);
47
Jim Flynnf7713212020-07-14 09:50:59 +010048 void MarkEntityWithLabel(ProfilingGuid entityGuid, const std::string& labelName, ProfilingStaticGuid labelLinkGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +010049
Narumol Prangnawaratd034e082019-10-30 12:48:31 +000050 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
Narumol Prangnawarat94a30882019-10-30 12:48:31 +000056 ProfilingDynamicGuid CreateNamedTypedChildEntity(ProfilingGuid parentEntityGuid,
57 const std::string& entityName,
58 const std::string& entityType);
59
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000060 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid,
Narumol Prangnawarat234d5252019-11-19 15:49:18 +000061 ProfilingGuid parentEntityGuid,
62 const std::string& entityName,
63 const std::string& entityType);
64
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000065 void CreateNamedTypedChildEntity(ProfilingGuid entityGuid,
66 ProfilingGuid parentEntityGuid,
67 const std::string& entityName,
68 ProfilingStaticGuid typeGuid);
69
70 ProfilingDynamicGuid CreateRelationship(ProfilingRelationshipType relationshipType,
71 ProfilingGuid headGuid,
Jim Flynn6398a982020-05-27 17:05:21 +010072 ProfilingGuid tailGuid,
73 ProfilingGuid relationshipCategory);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000074
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
Matteo Martincigh5dc816e2019-11-04 14:05:28 +000083 ProfilingDynamicGuid RecordEvent(ProfilingGuid entityGuid, ProfilingStaticGuid eventClassGuid);
84
David Monahan6198fe02019-12-02 08:35:43 +000085 ProfilingDynamicGuid RecordWorkloadInferenceAndStartOfLifeEvent(ProfilingGuid workloadGuid,
86 ProfilingGuid inferenceGuid);
87
88 void RecordEndOfLifeEvent(ProfilingGuid entityGuid);
89
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000090 void Commit() { m_SendTimelinePacket->Commit(); }
91
Matteo Martincigh830101c2019-10-22 11:07:45 +010092private:
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000093 std::unique_ptr<ISendTimelinePacket> m_SendTimelinePacket;
Matteo Martincigh830101c2019-10-22 11:07:45 +010094};
95
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000096} // namespace pipe
Matteo Martincigh830101c2019-10-22 11:07:45 +010097
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000098} // namespace arm