blob: cbe3b797a39a5b44e8c1523578068aaa9f5735c8 [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
9#include <SendTimelinePacket.hpp>
10#include <TimelineUtilityMethods.hpp>
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000011#include <LabelsAndEventClasses.hpp>
Matteo Martincighc0401992019-10-28 15:24:34 +000012#include <ProfilingService.hpp>
Matteo Martincigh830101c2019-10-22 11:07:45 +010013
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000014#include <memory>
15
Matteo Martincigh830101c2019-10-22 11:07:45 +010016#include <boost/test/unit_test.hpp>
17
18using namespace armnn;
19using namespace armnn::profiling;
20
21BOOST_AUTO_TEST_SUITE(TimelineUtilityMethodsTests)
22
Matteo Martincighc0401992019-10-28 15:24:34 +000023BOOST_AUTO_TEST_CASE(CreateTypedLabelTest)
24{
25 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +000026 ProfilingService profilingService;
27
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000028 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +000029 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Matteo Martincighc0401992019-10-28 15:24:34 +000030
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000031 // 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 +000032 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +000033
Matteo Martincighc0401992019-10-28 15:24:34 +000034 ProfilingGuid entityGuid(123);
35 const std::string entityName = "some entity";
36 ProfilingStaticGuid labelTypeGuid(456);
37
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000038 BOOST_CHECK_NO_THROW(timelineUtilityMethods.MarkEntityWithLabel(entityGuid, entityName, labelTypeGuid));
Matteo Martincighc0401992019-10-28 15:24:34 +000039
40 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000041 timelineUtilityMethods.Commit();
Matteo Martincighc0401992019-10-28 15:24:34 +000042
43 // Get the readable buffer
44 auto readableBuffer = mockBufferManager.GetReadableBuffer();
45 BOOST_CHECK(readableBuffer != nullptr);
46 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +010047 BOOST_CHECK(size == 76);
Matteo Martincighc0401992019-10-28 15:24:34 +000048 const unsigned char* readableData = readableBuffer->GetReadableData();
49 BOOST_CHECK(readableData != nullptr);
50
51 // Utils
52 unsigned int offset = 0;
53
Keith Davis97da5e22020-03-05 16:25:28 +000054 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +010055 VerifyTimelineHeaderBinary(readableData, offset, 68);
Matteo Martincighc0401992019-10-28 15:24:34 +000056
Keith Davis97da5e22020-03-05 16:25:28 +000057 // First dataset sent: TimelineLabelBinaryPacket
58 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
Matteo Martincighc0401992019-10-28 15:24:34 +000059
Keith Davis97da5e22020-03-05 16:25:28 +000060 // Second dataset sent: TimelineRelationshipBinaryPacket
61 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
62 EmptyOptional(),
63 entityGuid,
64 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +000065 labelTypeGuid,
66 readableData,
67 offset);
Matteo Martincighc0401992019-10-28 15:24:34 +000068
69 // Mark the buffer as read
70 mockBufferManager.MarkRead(readableBuffer);
71}
72
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000073BOOST_AUTO_TEST_CASE(SendWellKnownLabelsAndEventClassesTest)
74{
75 MockBufferManager mockBufferManager(1024);
Finn Williamscf2ad552020-03-20 15:10:59 +000076 ProfilingService profilingService;
77 SendTimelinePacket sendTimelinePacket(mockBufferManager);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000078
Finn Williamscf2ad552020-03-20 15:10:59 +000079 BOOST_CHECK_NO_THROW(TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(sendTimelinePacket));
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000080
81 // Get the readable buffer
82 auto readableBuffer = mockBufferManager.GetReadableBuffer();
83 BOOST_CHECK(readableBuffer != nullptr);
84 unsigned int size = readableBuffer->GetSize();
Jim Flynnf7713212020-07-14 09:50:59 +010085 BOOST_TEST(size == 460);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000086 const unsigned char* readableData = readableBuffer->GetReadableData();
87 BOOST_CHECK(readableData != nullptr);
88
89 // Utils
90 unsigned int offset = 0;
91
Keith Davis97da5e22020-03-05 16:25:28 +000092 // Verify Header
Jim Flynnf7713212020-07-14 09:50:59 +010093 VerifyTimelineHeaderBinary(readableData, offset, 452);
Keith Davis97da5e22020-03-05 16:25:28 +000094
Matteo Martincigh102cdbd2019-10-28 11:42:50 +000095 // First "well-known" label: NAME
Keith Davis97da5e22020-03-05 16:25:28 +000096 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NAME_GUID,
97 LabelsAndEventClasses::NAME_LABEL,
98 readableData,
99 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000100
101 // Second "well-known" label: TYPE
Keith Davis97da5e22020-03-05 16:25:28 +0000102 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::TYPE_GUID,
103 LabelsAndEventClasses::TYPE_LABEL,
104 readableData,
105 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000106
107 // Third "well-known" label: INDEX
Keith Davis97da5e22020-03-05 16:25:28 +0000108 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INDEX_GUID,
109 LabelsAndEventClasses::INDEX_LABEL,
110 readableData,
111 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000112
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000113 // Forth "well-known" label: BACKENDID
Keith Davis97da5e22020-03-05 16:25:28 +0000114 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::BACKENDID_GUID,
115 LabelsAndEventClasses::BACKENDID_LABEL,
116 readableData,
117 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000118
Jim Flynn6398a982020-05-27 17:05:21 +0100119 // Fifth "well-known" label: CHILD
120 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CHILD_GUID,
121 LabelsAndEventClasses::CHILD_LABEL,
122 readableData,
123 offset);
124
125 // Sixth "well-known" label: EXECUTION_OF
126 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::EXECUTION_OF_GUID,
127 LabelsAndEventClasses::EXECUTION_OF_LABEL,
128 readableData,
129 offset);
130
Jim Flynnf7713212020-07-14 09:50:59 +0100131 // Seventh "well-known" label: PROCESS_ID_LABEL
132 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::PROCESS_ID_GUID,
133 LabelsAndEventClasses::PROCESS_ID_LABEL,
134 readableData,
135 offset);
136
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000137 // Well-known types
138 // Layer
Keith Davis97da5e22020-03-05 16:25:28 +0000139 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::LAYER_GUID,
140 LabelsAndEventClasses::LAYER,
141 readableData,
142 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000143
144 // Workload
Keith Davis97da5e22020-03-05 16:25:28 +0000145 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_GUID,
146 LabelsAndEventClasses::WORKLOAD,
147 readableData,
148 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000149
150 // Network
Keith Davis97da5e22020-03-05 16:25:28 +0000151 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NETWORK_GUID,
152 LabelsAndEventClasses::NETWORK,
153 readableData,
154 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000155
156 // Connection
Keith Davis97da5e22020-03-05 16:25:28 +0000157 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CONNECTION_GUID,
158 LabelsAndEventClasses::CONNECTION,
159 readableData,
160 offset);
161
David Monahan6198fe02019-12-02 08:35:43 +0000162 // Inference
Keith Davis97da5e22020-03-05 16:25:28 +0000163 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INFERENCE_GUID,
164 LabelsAndEventClasses::INFERENCE,
165 readableData,
166 offset);
167
David Monahan6198fe02019-12-02 08:35:43 +0000168 // Workload Execution
Keith Davis97da5e22020-03-05 16:25:28 +0000169 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
170 LabelsAndEventClasses::WORKLOAD_EXECUTION,
171 readableData,
172 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000173
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000174 // First "well-known" event class: START OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100175 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
176 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME,
177 readableData,
178 offset);
179
Keith Davis97da5e22020-03-05 16:25:28 +0000180 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100181 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000182 readableData,
183 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000184
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000185 // Second "well-known" event class: END OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100186 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
187 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME,
188 readableData,
189 offset);
190
Keith Davis97da5e22020-03-05 16:25:28 +0000191 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100192 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000193 readableData,
194 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000195
196 // Mark the buffer as read
197 mockBufferManager.MarkRead(readableBuffer);
198}
199
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000200BOOST_AUTO_TEST_CASE(CreateNamedTypedChildEntityTest)
201{
202 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000203 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000204 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000205 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000206
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000207 ProfilingDynamicGuid childEntityGuid(0);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000208 ProfilingGuid parentEntityGuid(123);
209 const std::string entityName = "some entity";
210 const std::string entityType = "some type";
211
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000212 // 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 +0000213 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000214
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000215 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, "", entityType),
216 InvalidArgumentException);
217 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, entityName, ""),
218 InvalidArgumentException);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000219 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
220 childEntityGuid, parentEntityGuid, "", entityType), InvalidArgumentException);
221 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
222 childEntityGuid, parentEntityGuid, entityName, ""), InvalidArgumentException);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000223
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000224 BOOST_CHECK_NO_THROW(childEntityGuid = timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid,
225 entityName,
226 entityType));
227 BOOST_CHECK(childEntityGuid != ProfilingGuid(0));
228
229 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000230 timelineUtilityMethods.Commit();
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000231
232 // Get the readable buffer
233 auto readableBuffer = mockBufferManager.GetReadableBuffer();
234 BOOST_CHECK(readableBuffer != nullptr);
235 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100236 BOOST_CHECK(size == 196);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000237 const unsigned char* readableData = readableBuffer->GetReadableData();
238 BOOST_CHECK(readableData != nullptr);
239
240 // Utils
241 unsigned int offset = 0;
242
Keith Davis97da5e22020-03-05 16:25:28 +0000243 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100244 VerifyTimelineHeaderBinary(readableData, offset, 188);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000245
Keith Davis97da5e22020-03-05 16:25:28 +0000246 // First dataset sent: TimelineEntityBinaryPacket
247 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000248
Keith Davis97da5e22020-03-05 16:25:28 +0000249 // Second dataset sent: TimelineLabelBinaryPacket
250 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000251
Keith Davis97da5e22020-03-05 16:25:28 +0000252 // Third dataset sent: TimelineRelationshipBinaryPacket
253 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
254 EmptyOptional(),
255 EmptyOptional(),
256 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000257 LabelsAndEventClasses::NAME_GUID,
258 readableData,
259 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000260
Keith Davis97da5e22020-03-05 16:25:28 +0000261 // Fifth dataset sent: TimelineLabelBinaryPacket
262 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000263
Keith Davis97da5e22020-03-05 16:25:28 +0000264 // Sixth dataset sent: TimelineRelationshipBinaryPacket
265 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
266 EmptyOptional(),
267 EmptyOptional(),
268 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000269 LabelsAndEventClasses::TYPE_GUID,
270 readableData,
271 offset);
272
Finn Williams0a336dc2020-05-11 15:39:58 +0100273
Keith Davis97da5e22020-03-05 16:25:28 +0000274 // Eighth dataset sent: TimelineRelationshipBinaryPacket
275 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
276 EmptyOptional(),
277 parentEntityGuid,
278 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100279 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000280 readableData,
281 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000282
283 // Mark the buffer as read
284 mockBufferManager.MarkRead(readableBuffer);
285}
286
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000287BOOST_AUTO_TEST_CASE(DeclareLabelTest)
Matteo Martincigh830101c2019-10-22 11:07:45 +0100288{
289 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000290 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000291 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000292 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100293
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000294 // 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 +0000295 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000296
Matteo Martincigh830101c2019-10-22 11:07:45 +0100297 // Try declaring an invalid (empty) label
298 BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel(""), InvalidArgumentException);
299
300 // Try declaring an invalid (wrong SWTrace format) label
301 BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel("inv@lid lab€l"), RuntimeException);
302
303 // Declare a valid label
304 const std::string labelName = "valid label";
305 ProfilingGuid labelGuid = 0;
306 BOOST_CHECK_NO_THROW(labelGuid = timelineUtilityMethods.DeclareLabel(labelName));
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000307 BOOST_CHECK(labelGuid != ProfilingGuid(0));
Matteo Martincigh830101c2019-10-22 11:07:45 +0100308
Matteo Martincigh830101c2019-10-22 11:07:45 +0100309 // Try adding the same label as before
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000310 ProfilingGuid newLabelGuid = 0;
311 BOOST_CHECK_NO_THROW(newLabelGuid = timelineUtilityMethods.DeclareLabel(labelName));
312 BOOST_CHECK(newLabelGuid != ProfilingGuid(0));
313 BOOST_CHECK(newLabelGuid == labelGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100314}
315
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000316BOOST_AUTO_TEST_CASE(CreateNameTypeEntityInvalidTest)
317{
318 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000319 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000320 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000321 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000322
323 // Invalid name
324 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("", "Type"), InvalidArgumentException);
325
326 // Invalid type
327 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("Name", ""), InvalidArgumentException);
328
Sadik Armagan3184c902020-03-18 10:57:30 +0000329 ProfilingDynamicGuid guid = profilingService.NextGuid();
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000330
331 // CreatedNamedTypedEntity with Guid - Invalid name
332 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "", "Type"),
333 InvalidArgumentException);
334
335 // CreatedNamedTypedEntity with Guid - Invalid type
336 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "Name", ""),
337 InvalidArgumentException);
338
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000339}
340
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000341BOOST_AUTO_TEST_CASE(CreateNameTypeEntityTest)
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000342{
343 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000344 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000345 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000346 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000347
348 const std::string entityName = "Entity0";
349 const std::string entityType = "Type0";
350
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000351 // 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 +0000352 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000353
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000354 ProfilingDynamicGuid guid = timelineUtilityMethods.CreateNamedTypedEntity(entityName, entityType);
355 BOOST_CHECK(guid != ProfilingGuid(0));
356
357 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000358 timelineUtilityMethods.Commit();
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000359
360 // Get the readable buffer
361 auto readableBuffer = mockBufferManager.GetReadableBuffer();
362 BOOST_CHECK(readableBuffer != nullptr);
363 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100364 BOOST_CHECK(size == 148);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000365 const unsigned char* readableData = readableBuffer->GetReadableData();
366 BOOST_CHECK(readableData != nullptr);
367
368 // Utils
369 unsigned int offset = 0;
370
Keith Davis97da5e22020-03-05 16:25:28 +0000371 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100372 VerifyTimelineHeaderBinary(readableData, offset, 140);
Keith Davis97da5e22020-03-05 16:25:28 +0000373
374 // First dataset sent: TimelineEntityBinaryPacket
375 VerifyTimelineEntityBinaryPacketData(guid, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000376
377 // Packets for Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000378 // First dataset sent: TimelineLabelBinaryPacket
379 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000380
Keith Davis97da5e22020-03-05 16:25:28 +0000381 // Second dataset sent: TimelineRelationshipBinaryPacket
382 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
383 EmptyOptional(),
384 EmptyOptional(),
385 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000386 LabelsAndEventClasses::NAME_GUID,
387 readableData,
388 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000389
390 // Packets for Type Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000391 // First dataset sent: TimelineLabelBinaryPacket
392 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000393
Keith Davis97da5e22020-03-05 16:25:28 +0000394 // Second dataset sent: TimelineRelationshipBinaryPacket
395 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
396 EmptyOptional(),
397 EmptyOptional(),
398 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000399 LabelsAndEventClasses::TYPE_GUID,
400 readableData,
401 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000402
Finn Williams0a336dc2020-05-11 15:39:58 +0100403
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000404 // Mark the buffer as read
405 mockBufferManager.MarkRead(readableBuffer);
406}
407
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000408BOOST_AUTO_TEST_CASE(RecordEventTest)
409{
410 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000411 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000412 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000413 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000414 // 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 +0000415 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000416
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000417 ProfilingGuid entityGuid(123);
418 ProfilingStaticGuid eventClassGuid(456);
419 ProfilingDynamicGuid eventGuid(0);
420 BOOST_CHECK_NO_THROW(eventGuid = timelineUtilityMethods.RecordEvent(entityGuid, eventClassGuid));
421 BOOST_CHECK(eventGuid != ProfilingGuid(0));
422
423 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000424 timelineUtilityMethods.Commit();
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000425
426 // Get the readable buffer
427 auto readableBuffer = mockBufferManager.GetReadableBuffer();
428 BOOST_CHECK(readableBuffer != nullptr);
429 unsigned int size = readableBuffer->GetSize();
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100430
Finn Williams0a336dc2020-05-11 15:39:58 +0100431 BOOST_CHECK(size == 68 + ThreadIdSize);
Jan Eilersa10e2a22020-03-26 12:04:54 +0000432
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000433 const unsigned char* readableData = readableBuffer->GetReadableData();
434 BOOST_CHECK(readableData != nullptr);
435
436 // Utils
437 unsigned int offset = 0;
438
Keith Davis97da5e22020-03-05 16:25:28 +0000439 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100440 VerifyTimelineHeaderBinary(readableData, offset, 60 + ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000441
442 // First dataset sent: TimelineEntityBinaryPacket
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000443 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
444
Keith Davis97da5e22020-03-05 16:25:28 +0000445 // Second dataset sent: TimelineRelationshipBinaryPacket
446 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
447 EmptyOptional(),
448 entityGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000449 eventGuid,
450 eventClassGuid,
451 readableData,
452 offset);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000453
454 // Mark the buffer as read
455 mockBufferManager.MarkRead(readableBuffer);
456}
457
Matteo Martincigh830101c2019-10-22 11:07:45 +0100458BOOST_AUTO_TEST_SUITE_END()