blob: 815a3a0f9539148cff6cd2cef4de05ec608409d4 [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
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 Flynn1892d212020-05-26 21:10:49 +010085 BOOST_TEST(size == 376);
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 Flynn1892d212020-05-26 21:10:49 +010093 VerifyTimelineHeaderBinary(readableData, offset, 368);
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
119 // Well-known types
120 // Layer
Keith Davis97da5e22020-03-05 16:25:28 +0000121 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::LAYER_GUID,
122 LabelsAndEventClasses::LAYER,
123 readableData,
124 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000125
126 // Workload
Keith Davis97da5e22020-03-05 16:25:28 +0000127 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_GUID,
128 LabelsAndEventClasses::WORKLOAD,
129 readableData,
130 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000131
132 // Network
Keith Davis97da5e22020-03-05 16:25:28 +0000133 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NETWORK_GUID,
134 LabelsAndEventClasses::NETWORK,
135 readableData,
136 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000137
138 // Connection
Keith Davis97da5e22020-03-05 16:25:28 +0000139 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CONNECTION_GUID,
140 LabelsAndEventClasses::CONNECTION,
141 readableData,
142 offset);
143
David Monahan6198fe02019-12-02 08:35:43 +0000144 // Inference
Keith Davis97da5e22020-03-05 16:25:28 +0000145 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INFERENCE_GUID,
146 LabelsAndEventClasses::INFERENCE,
147 readableData,
148 offset);
149
David Monahan6198fe02019-12-02 08:35:43 +0000150 // Workload Execution
Keith Davis97da5e22020-03-05 16:25:28 +0000151 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
152 LabelsAndEventClasses::WORKLOAD_EXECUTION,
153 readableData,
154 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000155
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000156 // First "well-known" event class: START OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100157 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
158 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME,
159 readableData,
160 offset);
161
Keith Davis97da5e22020-03-05 16:25:28 +0000162 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100163 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000164 readableData,
165 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000166
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000167 // Second "well-known" event class: END OF LIFE
Jim Flynn1892d212020-05-26 21:10:49 +0100168 VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
169 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME,
170 readableData,
171 offset);
172
Keith Davis97da5e22020-03-05 16:25:28 +0000173 VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
Jim Flynn1892d212020-05-26 21:10:49 +0100174 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
Keith Davis97da5e22020-03-05 16:25:28 +0000175 readableData,
176 offset);
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000177
178 // Mark the buffer as read
179 mockBufferManager.MarkRead(readableBuffer);
180}
181
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000182BOOST_AUTO_TEST_CASE(CreateNamedTypedChildEntityTest)
183{
184 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000185 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000186 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000187 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000188
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000189 ProfilingDynamicGuid childEntityGuid(0);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000190 ProfilingGuid parentEntityGuid(123);
191 const std::string entityName = "some entity";
192 const std::string entityType = "some type";
193
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000194 // 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 +0000195 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000196
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000197 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, "", entityType),
198 InvalidArgumentException);
199 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, entityName, ""),
200 InvalidArgumentException);
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000201 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
202 childEntityGuid, parentEntityGuid, "", entityType), InvalidArgumentException);
203 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
204 childEntityGuid, parentEntityGuid, entityName, ""), InvalidArgumentException);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000205
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000206 BOOST_CHECK_NO_THROW(childEntityGuid = timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid,
207 entityName,
208 entityType));
209 BOOST_CHECK(childEntityGuid != ProfilingGuid(0));
210
211 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000212 timelineUtilityMethods.Commit();
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000213
214 // Get the readable buffer
215 auto readableBuffer = mockBufferManager.GetReadableBuffer();
216 BOOST_CHECK(readableBuffer != nullptr);
217 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100218 BOOST_CHECK(size == 196);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000219 const unsigned char* readableData = readableBuffer->GetReadableData();
220 BOOST_CHECK(readableData != nullptr);
221
222 // Utils
223 unsigned int offset = 0;
224
Keith Davis97da5e22020-03-05 16:25:28 +0000225 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100226 VerifyTimelineHeaderBinary(readableData, offset, 188);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000227
Keith Davis97da5e22020-03-05 16:25:28 +0000228 // First dataset sent: TimelineEntityBinaryPacket
229 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000230
Keith Davis97da5e22020-03-05 16:25:28 +0000231 // Second dataset sent: TimelineLabelBinaryPacket
232 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000233
Keith Davis97da5e22020-03-05 16:25:28 +0000234 // Third dataset sent: TimelineRelationshipBinaryPacket
235 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
236 EmptyOptional(),
237 EmptyOptional(),
238 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000239 LabelsAndEventClasses::NAME_GUID,
240 readableData,
241 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000242
Keith Davis97da5e22020-03-05 16:25:28 +0000243 // Fifth dataset sent: TimelineLabelBinaryPacket
244 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000245
Keith Davis97da5e22020-03-05 16:25:28 +0000246 // Sixth dataset sent: TimelineRelationshipBinaryPacket
247 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
248 EmptyOptional(),
249 EmptyOptional(),
250 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000251 LabelsAndEventClasses::TYPE_GUID,
252 readableData,
253 offset);
254
Finn Williams0a336dc2020-05-11 15:39:58 +0100255
Keith Davis97da5e22020-03-05 16:25:28 +0000256 // Eighth dataset sent: TimelineRelationshipBinaryPacket
257 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
258 EmptyOptional(),
259 parentEntityGuid,
260 EmptyOptional(),
Finn Williams0a336dc2020-05-11 15:39:58 +0100261 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000262 readableData,
263 offset);
Narumol Prangnawarat94a30882019-10-30 12:48:31 +0000264
265 // Mark the buffer as read
266 mockBufferManager.MarkRead(readableBuffer);
267}
268
Matteo Martincigh102cdbd2019-10-28 11:42:50 +0000269BOOST_AUTO_TEST_CASE(DeclareLabelTest)
Matteo Martincigh830101c2019-10-22 11:07:45 +0100270{
271 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000272 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000273 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000274 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100275
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000276 // 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 +0000277 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000278
Matteo Martincigh830101c2019-10-22 11:07:45 +0100279 // Try declaring an invalid (empty) label
280 BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel(""), InvalidArgumentException);
281
282 // Try declaring an invalid (wrong SWTrace format) label
283 BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel("inv@lid lab€l"), RuntimeException);
284
285 // Declare a valid label
286 const std::string labelName = "valid label";
287 ProfilingGuid labelGuid = 0;
288 BOOST_CHECK_NO_THROW(labelGuid = timelineUtilityMethods.DeclareLabel(labelName));
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000289 BOOST_CHECK(labelGuid != ProfilingGuid(0));
Matteo Martincigh830101c2019-10-22 11:07:45 +0100290
Matteo Martincigh830101c2019-10-22 11:07:45 +0100291 // Try adding the same label as before
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000292 ProfilingGuid newLabelGuid = 0;
293 BOOST_CHECK_NO_THROW(newLabelGuid = timelineUtilityMethods.DeclareLabel(labelName));
294 BOOST_CHECK(newLabelGuid != ProfilingGuid(0));
295 BOOST_CHECK(newLabelGuid == labelGuid);
Matteo Martincigh830101c2019-10-22 11:07:45 +0100296}
297
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000298BOOST_AUTO_TEST_CASE(CreateNameTypeEntityInvalidTest)
299{
300 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000301 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000302 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000303 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000304
305 // Invalid name
306 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("", "Type"), InvalidArgumentException);
307
308 // Invalid type
309 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("Name", ""), InvalidArgumentException);
310
Sadik Armagan3184c902020-03-18 10:57:30 +0000311 ProfilingDynamicGuid guid = profilingService.NextGuid();
Narumol Prangnawarat234d5252019-11-19 15:49:18 +0000312
313 // CreatedNamedTypedEntity with Guid - Invalid name
314 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "", "Type"),
315 InvalidArgumentException);
316
317 // CreatedNamedTypedEntity with Guid - Invalid type
318 BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "Name", ""),
319 InvalidArgumentException);
320
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000321}
322
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000323BOOST_AUTO_TEST_CASE(CreateNameTypeEntityTest)
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000324{
325 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000326 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000327 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000328 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000329
330 const std::string entityName = "Entity0";
331 const std::string entityType = "Type0";
332
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000333 // 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 +0000334 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000335
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000336 ProfilingDynamicGuid guid = timelineUtilityMethods.CreateNamedTypedEntity(entityName, entityType);
337 BOOST_CHECK(guid != ProfilingGuid(0));
338
339 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000340 timelineUtilityMethods.Commit();
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000341
342 // Get the readable buffer
343 auto readableBuffer = mockBufferManager.GetReadableBuffer();
344 BOOST_CHECK(readableBuffer != nullptr);
345 unsigned int size = readableBuffer->GetSize();
Finn Williams0a336dc2020-05-11 15:39:58 +0100346 BOOST_CHECK(size == 148);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000347 const unsigned char* readableData = readableBuffer->GetReadableData();
348 BOOST_CHECK(readableData != nullptr);
349
350 // Utils
351 unsigned int offset = 0;
352
Keith Davis97da5e22020-03-05 16:25:28 +0000353 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100354 VerifyTimelineHeaderBinary(readableData, offset, 140);
Keith Davis97da5e22020-03-05 16:25:28 +0000355
356 // First dataset sent: TimelineEntityBinaryPacket
357 VerifyTimelineEntityBinaryPacketData(guid, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000358
359 // Packets for Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000360 // First dataset sent: TimelineLabelBinaryPacket
361 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000362
Keith Davis97da5e22020-03-05 16:25:28 +0000363 // Second dataset sent: TimelineRelationshipBinaryPacket
364 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
365 EmptyOptional(),
366 EmptyOptional(),
367 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000368 LabelsAndEventClasses::NAME_GUID,
369 readableData,
370 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000371
372 // Packets for Type Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000373 // First dataset sent: TimelineLabelBinaryPacket
374 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000375
Keith Davis97da5e22020-03-05 16:25:28 +0000376 // Second dataset sent: TimelineRelationshipBinaryPacket
377 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
378 EmptyOptional(),
379 EmptyOptional(),
380 EmptyOptional(),
Keith Davis97da5e22020-03-05 16:25:28 +0000381 LabelsAndEventClasses::TYPE_GUID,
382 readableData,
383 offset);
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000384
Finn Williams0a336dc2020-05-11 15:39:58 +0100385
Narumol Prangnawaratd034e082019-10-30 12:48:31 +0000386 // Mark the buffer as read
387 mockBufferManager.MarkRead(readableBuffer);
388}
389
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000390BOOST_AUTO_TEST_CASE(RecordEventTest)
391{
392 MockBufferManager mockBufferManager(1024);
Sadik Armagan3184c902020-03-18 10:57:30 +0000393 ProfilingService profilingService;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000394 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
Sadik Armagan0a356672020-03-20 11:11:01 +0000395 TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000396 // 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 +0000397 profilingService.NextGuid();
Narumol Prangnawaratdbdd1b42019-11-15 17:38:44 +0000398
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000399 ProfilingGuid entityGuid(123);
400 ProfilingStaticGuid eventClassGuid(456);
401 ProfilingDynamicGuid eventGuid(0);
402 BOOST_CHECK_NO_THROW(eventGuid = timelineUtilityMethods.RecordEvent(entityGuid, eventClassGuid));
403 BOOST_CHECK(eventGuid != ProfilingGuid(0));
404
405 // Commit all packets at once
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000406 timelineUtilityMethods.Commit();
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000407
408 // Get the readable buffer
409 auto readableBuffer = mockBufferManager.GetReadableBuffer();
410 BOOST_CHECK(readableBuffer != nullptr);
411 unsigned int size = readableBuffer->GetSize();
Colm Donelan5bb3d8a2020-05-12 16:36:46 +0100412
Finn Williams0a336dc2020-05-11 15:39:58 +0100413 BOOST_CHECK(size == 68 + ThreadIdSize);
Jan Eilersa10e2a22020-03-26 12:04:54 +0000414
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000415 const unsigned char* readableData = readableBuffer->GetReadableData();
416 BOOST_CHECK(readableData != nullptr);
417
418 // Utils
419 unsigned int offset = 0;
420
Keith Davis97da5e22020-03-05 16:25:28 +0000421 // Verify Header
Finn Williams0a336dc2020-05-11 15:39:58 +0100422 VerifyTimelineHeaderBinary(readableData, offset, 60 + ThreadIdSize);
Keith Davis97da5e22020-03-05 16:25:28 +0000423
424 // First dataset sent: TimelineEntityBinaryPacket
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000425 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
426
Keith Davis97da5e22020-03-05 16:25:28 +0000427 // Second dataset sent: TimelineRelationshipBinaryPacket
428 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
429 EmptyOptional(),
430 entityGuid,
Keith Davis97da5e22020-03-05 16:25:28 +0000431 eventGuid,
432 eventClassGuid,
433 readableData,
434 offset);
Matteo Martincigh5dc816e2019-11-04 14:05:28 +0000435
436 // Mark the buffer as read
437 mockBufferManager.MarkRead(readableBuffer);
438}
439
Matteo Martincigh830101c2019-10-22 11:07:45 +0100440BOOST_AUTO_TEST_SUITE_END()