blob: 276210bc71aa29986a15610954caf3afca0e808f [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
Jim Flynn64063552020-02-14 10:18:08 +00006#include "ProfilingMocks.hpp"
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00007#include "ProfilingTestUtils.hpp"
Matteo Martincigh830101c2019-10-22 11:07:45 +01008
Jim Flynn34430252022-03-04 15:03:58 +00009#include <ArmNNProfilingServiceInitialiser.hpp>
Matteo Martincigh830101c2019-10-22 11:07:45 +010010
Jim Flynn34430252022-03-04 15:03:58 +000011#include <armnn/profiling/ArmNNProfiling.hpp>
12
Jim Flynn27761832022-03-20 21:52:17 +000013#include <client/include/TimelineUtilityMethods.hpp>
14
Jim Flynn3e9bc192022-03-23 23:01:26 +000015#include <client/src/SendTimelinePacket.hpp>
16#include <client/src/ProfilingService.hpp>
17
Nikhil Raj77fe76b2021-06-09 14:55:32 +010018#include <common/include/LabelsAndEventClasses.hpp>
19
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000020#include <memory>
21
Sadik Armagan1625efc2021-06-10 18:24:34 +010022#include <doctest/doctest.h>
Matteo Martincigh830101c2019-10-22 11:07:45 +010023
24using namespace armnn;
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000025using namespace arm::pipe;
Matteo Martincigh830101c2019-10-22 11:07:45 +010026
Sadik Armagan1625efc2021-06-10 18:24:34 +010027TEST_SUITE("TimelineUtilityMethodsTests")
28{
29TEST_CASE("CreateTypedLabelTest")
Matteo Martincighc0401992019-10-28 15:24:34 +000030{
31 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +000032 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +000033 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
34 initialiser,
35 arm::pipe::ARMNN_SOFTWARE_INFO,
36 arm::pipe::ARMNN_SOFTWARE_VERSION,
37 arm::pipe::ARMNN_HARDWARE_VERSION);
Sadik Armagan3184c902020-03-18 10:57:30 +000038
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000039 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +000040 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Matteo Martincighc0401992019-10-28 15:24:34 +000041
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000042 // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
Sadik Armagan3184c902020-03-18 10:57:30 +000043 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000044
Matteo Martincighc0401992019-10-28 15:24:34 +000045 ProfilingGuid entityGuid(123);
46 const std::string entityName = "some entity";
47 ProfilingStaticGuid labelTypeGuid(456);
48
Sadik Armagan1625efc2021-06-10 18:24:34 +010049 CHECK_NOTHROW(timelineUtilityMethods.MarkEntityWithLabel(entityGuid, entityName, labelTypeGuid));
Matteo Martincighc0401992019-10-28 15:24:34 +000050
51 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000052 timelineUtilityMethods.Commit();
Matteo Martincighc0401992019-10-28 15:24:34 +000053
54 // Get the readable buffer
55 auto readableBuffer = mockBufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +010056 CHECK(readableBuffer != nullptr);
Matteo Martincighc0401992019-10-28 15:24:34 +000057 unsigned int size = readableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +010058 CHECK(size == 76);
Matteo Martincighc0401992019-10-28 15:24:34 +000059 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +010060 CHECK(readableData != nullptr);
Matteo Martincighc0401992019-10-28 15:24:34 +000061
62 // Utils
63 unsigned int offset = 0;
64
Keith Davis97da5e22020-03-05 16:25:28 +000065 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +010066 VerifyTimelineHeaderBinary(readableData, offset, 68);
Matteo Martincighc0401992019-10-28 15:24:34 +000067
Keith Davis97da5e22020-03-05 16:25:28 +000068 // First dataset sent: TimelineLabelBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +000069 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), entityName, readableData, offset);
Matteo Martincighc0401992019-10-28 15:24:34 +000070
Keith Davis97da5e22020-03-05 16:25:28 +000071 // Second dataset sent: TimelineRelationshipBinaryPacket
72 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +000073 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +000074 entityGuid,
Jim Flynndecd08b2022-03-13 22:35:46 +000075 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +000076 labelTypeGuid,
77 readableData,
78 offset);
Matteo Martincighc0401992019-10-28 15:24:34 +000079
80 // Mark the buffer as read
81 mockBufferManager.MarkRead(readableBuffer);
82}
83
Sadik Armagan1625efc2021-06-10 18:24:34 +010084TEST_CASE("SendWellKnownLabelsAndEventClassesTest")
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000085{
86 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +000087 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +000088 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
89 initialiser,
90 arm::pipe::ARMNN_SOFTWARE_INFO,
91 arm::pipe::ARMNN_SOFTWARE_VERSION,
92 arm::pipe::ARMNN_HARDWARE_VERSION);
Finn Williamscf2ad552020-03-20 15:10:59 +000093 SendTimelinePacket sendTimelinePacket(mockBufferManager);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000094
Sadik Armagan1625efc2021-06-10 18:24:34 +010095 CHECK_NOTHROW(TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(sendTimelinePacket));
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000096
97 // Get the readable buffer
98 auto readableBuffer = mockBufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +010099 CHECK(readableBuffer != nullptr);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000100 unsigned int size = readableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100101 CHECK(size == 460);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000102 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100103 CHECK(readableData != nullptr);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000104
105 // Utils
106 unsigned int offset = 0;
107
Keith Davis97da5e22020-03-05 16:25:28 +0000108 // Verify Header
Jim Flynnf7713212020-07-14 09:50:59 +0100109 VerifyTimelineHeaderBinary(readableData, offset, 452);
Keith Davis97da5e22020-03-05 16:25:28 +0000110
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000111 // First "well-known" label: NAME
Keith Davis97da5e22020-03-05 16:25:28 +0000112 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NAME_GUID,
113 LabelsAndEventClasses::NAME_LABEL,
114 readableData,
115 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000116
117 // Second "well-known" label: TYPE
Keith Davis97da5e22020-03-05 16:25:28 +0000118 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::TYPE_GUID,
119 LabelsAndEventClasses::TYPE_LABEL,
120 readableData,
121 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000122
123 // Third "well-known" label: INDEX
Keith Davis97da5e22020-03-05 16:25:28 +0000124 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INDEX_GUID,
125 LabelsAndEventClasses::INDEX_LABEL,
126 readableData,
127 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000128
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000129 // Forth "well-known" label: BACKENDID
Keith Davis97da5e22020-03-05 16:25:28 +0000130 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::BACKENDID_GUID,
131 LabelsAndEventClasses::BACKENDID_LABEL,
132 readableData,
133 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000134
Jim Flynn6398a982020-05-27 17:05:21 +0100135 // Fifth "well-known" label: CHILD
136 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CHILD_GUID,
137 LabelsAndEventClasses::CHILD_LABEL,
138 readableData,
139 offset);
140
141 // Sixth "well-known" label: EXECUTION_OF
142 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::EXECUTION_OF_GUID,
143 LabelsAndEventClasses::EXECUTION_OF_LABEL,
144 readableData,
145 offset);
146
Jim Flynnf7713212020-07-14 09:50:59 +0100147 // Seventh "well-known" label: PROCESS_ID_LABEL
148 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::PROCESS_ID_GUID,
149 LabelsAndEventClasses::PROCESS_ID_LABEL,
150 readableData,
151 offset);
152
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000153 // Well-known types
154 // Layer
Keith Davis97da5e22020-03-05 16:25:28 +0000155 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::LAYER_GUID,
156 LabelsAndEventClasses::LAYER,
157 readableData,
158 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000159
160 // Workload
Keith Davis97da5e22020-03-05 16:25:28 +0000161 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_GUID,
162 LabelsAndEventClasses::WORKLOAD,
163 readableData,
164 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000165
166 // Network
Keith Davis97da5e22020-03-05 16:25:28 +0000167 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NETWORK_GUID,
168 LabelsAndEventClasses::NETWORK,
169 readableData,
170 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000171
172 // Connection
Keith Davis97da5e22020-03-05 16:25:28 +0000173 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CONNECTION_GUID,
174 LabelsAndEventClasses::CONNECTION,
175 readableData,
176 offset);
177
David Monahan6198fe02019-12-02 08:35:43 +0000178 // Inference
Keith Davis97da5e22020-03-05 16:25:28 +0000179 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INFERENCE_GUID,
180 LabelsAndEventClasses::INFERENCE,
181 readableData,
182 offset);
183
David Monahan6198fe02019-12-02 08:35:43 +0000184 // Workload Execution
Keith Davis97da5e22020-03-05 16:25:28 +0000185 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
186 LabelsAndEventClasses::WORKLOAD_EXECUTION,
187 readableData,
188 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000189
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000190 // First "well-known" event class: START OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100191 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
192 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME,
193 readableData,
194 offset);
195
Keith Davis97da5e22020-03-05 16:25:28 +0000196 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100197 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000198 readableData,
199 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000200
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000201 // Second "well-known" event class: END OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100202 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
203 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME,
204 readableData,
205 offset);
206
Keith Davis97da5e22020-03-05 16:25:28 +0000207 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100208 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000209 readableData,
210 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000211
212 // Mark the buffer as read
213 mockBufferManager.MarkRead(readableBuffer);
214}
215
Sadik Armagan1625efc2021-06-10 18:24:34 +0100216TEST_CASE("CreateNamedTypedChildEntityTest")
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000217{
218 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +0000219 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +0000220 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
221 initialiser,
222 arm::pipe::ARMNN_SOFTWARE_INFO,
223 arm::pipe::ARMNN_SOFTWARE_VERSION,
224 arm::pipe::ARMNN_HARDWARE_VERSION);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000225 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000226 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000227
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000228 ProfilingDynamicGuid childEntityGuid(0);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000229 ProfilingGuid parentEntityGuid(123);
230 const std::string entityName = "some entity";
231 const std::string entityType = "some type";
232
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000233 // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
Sadik Armagan3184c902020-03-18 10:57:30 +0000234 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000235
Sadik Armagan1625efc2021-06-10 18:24:34 +0100236 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, "", entityType),
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000237 arm::pipe::InvalidArgumentException);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100238 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, entityName, ""),
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000239 arm::pipe::InvalidArgumentException);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100240 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedChildEntity(
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000241 childEntityGuid, parentEntityGuid, "", entityType), arm::pipe::InvalidArgumentException);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100242 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedChildEntity(
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000243 childEntityGuid, parentEntityGuid, entityName, ""), arm::pipe::InvalidArgumentException);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000244
Sadik Armagan1625efc2021-06-10 18:24:34 +0100245 CHECK_NOTHROW(childEntityGuid = timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid,
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000246 entityName,
247 entityType));
Sadik Armagan1625efc2021-06-10 18:24:34 +0100248 CHECK(childEntityGuid != ProfilingGuid(0));
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000249
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000250 // Commit all packets at onceTimelineUtilityMethodsTests.cpp
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000251 timelineUtilityMethods.Commit();
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000252
253 // Get the readable buffer
254 auto readableBuffer = mockBufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100255 CHECK(readableBuffer != nullptr);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000256 unsigned int size = readableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100257 CHECK(size == 196);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000258 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100259 CHECK(readableData != nullptr);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000260
261 // Utils
262 unsigned int offset = 0;
263
Keith Davis97da5e22020-03-05 16:25:28 +0000264 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100265 VerifyTimelineHeaderBinary(readableData, offset, 188);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000266
Keith Davis97da5e22020-03-05 16:25:28 +0000267 // First dataset sent: TimelineEntityBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000268 VerifyTimelineEntityBinaryPacketData(arm::pipe::EmptyOptional(), readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000269
Keith Davis97da5e22020-03-05 16:25:28 +0000270 // Second dataset sent: TimelineLabelBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000271 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000272
Keith Davis97da5e22020-03-05 16:25:28 +0000273 // Third dataset sent: TimelineRelationshipBinaryPacket
274 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000275 arm::pipe::EmptyOptional(),
276 arm::pipe::EmptyOptional(),
277 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000278 LabelsAndEventClasses::NAME_GUID,
279 readableData,
280 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000281
Keith Davis97da5e22020-03-05 16:25:28 +0000282 // Fifth dataset sent: TimelineLabelBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000283 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000284
Keith Davis97da5e22020-03-05 16:25:28 +0000285 // Sixth dataset sent: TimelineRelationshipBinaryPacket
286 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000287 arm::pipe::EmptyOptional(),
288 arm::pipe::EmptyOptional(),
289 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000290 LabelsAndEventClasses::TYPE_GUID,
291 readableData,
292 offset);
293
Finn Williams0a336dc2020-05-11 15:39:58 +0100294
Keith Davis97da5e22020-03-05 16:25:28 +0000295 // Eighth dataset sent: TimelineRelationshipBinaryPacket
296 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000297 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000298 parentEntityGuid,
Jim Flynndecd08b2022-03-13 22:35:46 +0000299 arm::pipe::EmptyOptional(),
300 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000301 readableData,
302 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000303
304 // Mark the buffer as read
305 mockBufferManager.MarkRead(readableBuffer);
306}
307
Sadik Armagan1625efc2021-06-10 18:24:34 +0100308TEST_CASE("DeclareLabelTest")
Matteo Martincigh830101c2019-10-22 11:07:45 +0100309{
310 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +0000311 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +0000312 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
313 initialiser,
314 arm::pipe::ARMNN_SOFTWARE_INFO,
315 arm::pipe::ARMNN_SOFTWARE_VERSION,
316 arm::pipe::ARMNN_HARDWARE_VERSION);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000317 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000318 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100319
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000320 // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
Sadik Armagan3184c902020-03-18 10:57:30 +0000321 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000322
Matteo Martincigh830101c2019-10-22 11:07:45 +0100323 // Try declaring an invalid (empty) label
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000324 CHECK_THROWS_AS(timelineUtilityMethods.DeclareLabel(""), arm::pipe::InvalidArgumentException);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100325
326 // Try declaring an invalid (wrong SWTrace format) label
Jim Flynnf9db3ef2022-03-08 21:23:44 +0000327 CHECK_THROWS_AS(timelineUtilityMethods.DeclareLabel("inv@lid lab€l"), arm::pipe::ProfilingException);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100328
329 // Declare a valid label
330 const std::string labelName = "valid label";
331 ProfilingGuid labelGuid = 0;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100332 CHECK_NOTHROW(labelGuid = timelineUtilityMethods.DeclareLabel(labelName));
333 CHECK(labelGuid != ProfilingGuid(0));
Matteo Martincigh830101c2019-10-22 11:07:45 +0100334
Matteo Martincigh830101c2019-10-22 11:07:45 +0100335 // Try adding the same label as before
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000336 ProfilingGuid newLabelGuid = 0;
Sadik Armagan1625efc2021-06-10 18:24:34 +0100337 CHECK_NOTHROW(newLabelGuid = timelineUtilityMethods.DeclareLabel(labelName));
338 CHECK(newLabelGuid != ProfilingGuid(0));
339 CHECK(newLabelGuid == labelGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100340}
341
Sadik Armagan1625efc2021-06-10 18:24:34 +0100342TEST_CASE("CreateNameTypeEntityInvalidTest")
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000343{
344 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +0000345 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +0000346 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
347 initialiser,
348 arm::pipe::ARMNN_SOFTWARE_INFO,
349 arm::pipe::ARMNN_SOFTWARE_VERSION,
350 arm::pipe::ARMNN_HARDWARE_VERSION);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000351 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000352 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000353
354 // Invalid name
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000355 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedEntity("", "Type"), arm::pipe::InvalidArgumentException);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000356
357 // Invalid type
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000358 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedEntity("Name", ""), arm::pipe::InvalidArgumentException);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000359
Sadik Armagan3184c902020-03-18 10:57:30 +0000360 ProfilingDynamicGuid guid = profilingService.NextGuid();
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000361
362 // CreatedNamedTypedEntity with Guid - Invalid name
Sadik Armagan1625efc2021-06-10 18:24:34 +0100363 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedEntity(guid, "", "Type"),
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000364 arm::pipe::InvalidArgumentException);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000365
366 // CreatedNamedTypedEntity with Guid - Invalid type
Sadik Armagan1625efc2021-06-10 18:24:34 +0100367 CHECK_THROWS_AS(timelineUtilityMethods.CreateNamedTypedEntity(guid, "Name", ""),
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000368 arm::pipe::InvalidArgumentException);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000369
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000370}
371
Sadik Armagan1625efc2021-06-10 18:24:34 +0100372TEST_CASE("CreateNameTypeEntityTest")
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000373{
374 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +0000375 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +0000376 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
377 initialiser,
378 arm::pipe::ARMNN_SOFTWARE_INFO,
379 arm::pipe::ARMNN_SOFTWARE_VERSION,
380 arm::pipe::ARMNN_HARDWARE_VERSION);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000381 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000382 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000383
384 const std::string entityName = "Entity0";
385 const std::string entityType = "Type0";
386
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000387 // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
Sadik Armagan3184c902020-03-18 10:57:30 +0000388 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000389
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000390 ProfilingDynamicGuid guid = timelineUtilityMethods.CreateNamedTypedEntity(entityName, entityType);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100391 CHECK(guid != ProfilingGuid(0));
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000392
393 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000394 timelineUtilityMethods.Commit();
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000395
396 // Get the readable buffer
397 auto readableBuffer = mockBufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100398 CHECK(readableBuffer != nullptr);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000399 unsigned int size = readableBuffer->GetSize();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100400 CHECK(size == 148);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000401 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100402 CHECK(readableData != nullptr);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000403
404 // Utils
405 unsigned int offset = 0;
406
Keith Davis97da5e22020-03-05 16:25:28 +0000407 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100408 VerifyTimelineHeaderBinary(readableData, offset, 140);
Keith Davis97da5e22020-03-05 16:25:28 +0000409
410 // First dataset sent: TimelineEntityBinaryPacket
411 VerifyTimelineEntityBinaryPacketData(guid, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000412
413 // Packets for Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000414 // First dataset sent: TimelineLabelBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000415 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000416
Keith Davis97da5e22020-03-05 16:25:28 +0000417 // Second dataset sent: TimelineRelationshipBinaryPacket
418 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000419 arm::pipe::EmptyOptional(),
420 arm::pipe::EmptyOptional(),
421 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000422 LabelsAndEventClasses::NAME_GUID,
423 readableData,
424 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000425
426 // Packets for Type Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000427 // First dataset sent: TimelineLabelBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000428 VerifyTimelineLabelBinaryPacketData(arm::pipe::EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000429
Keith Davis97da5e22020-03-05 16:25:28 +0000430 // Second dataset sent: TimelineRelationshipBinaryPacket
431 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000432 arm::pipe::EmptyOptional(),
433 arm::pipe::EmptyOptional(),
434 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000435 LabelsAndEventClasses::TYPE_GUID,
436 readableData,
437 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000438
Finn Williams0a336dc2020-05-11 15:39:58 +0100439
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000440 // Mark the buffer as read
441 mockBufferManager.MarkRead(readableBuffer);
442}
443
Sadik Armagan1625efc2021-06-10 18:24:34 +0100444TEST_CASE("RecordEventTest")
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000445{
446 MockBufferManager mockBufferManager(1024);
Jim Flynn34430252022-03-04 15:03:58 +0000447 armnn::ArmNNProfilingServiceInitialiser initialiser;
Jim Flynn9c85b412022-03-16 00:27:43 +0000448 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
449 initialiser,
450 arm::pipe::ARMNN_SOFTWARE_INFO,
451 arm::pipe::ARMNN_SOFTWARE_VERSION,
452 arm::pipe::ARMNN_HARDWARE_VERSION);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000453 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000454 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000455 // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
Sadik Armagan3184c902020-03-18 10:57:30 +0000456 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000457
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000458 ProfilingGuid entityGuid(123);
459 ProfilingStaticGuid eventClassGuid(456);
460 ProfilingDynamicGuid eventGuid(0);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100461 CHECK_NOTHROW(eventGuid = timelineUtilityMethods.RecordEvent(entityGuid, eventClassGuid));
462 CHECK(eventGuid != ProfilingGuid(0));
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000463
464 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000465 timelineUtilityMethods.Commit();
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000466
467 // Get the readable buffer
468 auto readableBuffer = mockBufferManager.GetReadableBuffer();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100469 CHECK(readableBuffer != nullptr);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000470 unsigned int size = readableBuffer->GetSize();
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100471
Sadik Armagan1625efc2021-06-10 18:24:34 +0100472 CHECK(size == 68 + ThreadIdSize);
Jan Eilersa10e2a22020-03-26 12:04:54 +0000473
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000474 const unsigned char* readableData = readableBuffer->GetReadableData();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100475 CHECK(readableData != nullptr);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000476
477 // Utils
478 unsigned int offset = 0;
479
Keith Davis97da5e22020-03-05 16:25:28 +0000480 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100481 VerifyTimelineHeaderBinary(readableData, offset, 60 + ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000482
483 // First dataset sent: TimelineEntityBinaryPacket
Jim Flynndecd08b2022-03-13 22:35:46 +0000484 VerifyTimelineEventBinaryPacket(
485 arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), arm::pipe::EmptyOptional(), readableData, offset);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000486
Keith Davis97da5e22020-03-05 16:25:28 +0000487 // Second dataset sent: TimelineRelationshipBinaryPacket
488 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
Jim Flynndecd08b2022-03-13 22:35:46 +0000489 arm::pipe::EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000490 entityGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000491 eventGuid,
492 eventClassGuid,
493 readableData,
494 offset);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000495
496 // Mark the buffer as read
497 mockBufferManager.MarkRead(readableBuffer);
498}
499
Sadik Armagan1625efc2021-06-10 18:24:34 +0100500}