32 TEST_CASE(
"SendTimelineMessageDirectoryPackageTest")
35 TimelinePacketWriterFactory timelinePacketWriterFactory(mockBuffer);
36 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
38 sendTimelinePacket->SendTimelineMessageDirectoryPackage();
41 auto packetBuffer = mockBuffer.GetReadableBuffer();
43 unsigned int uint8_t_size =
sizeof(uint8_t);
44 unsigned int uint32_t_size =
sizeof(uint32_t);
45 unsigned int uint64_t_size =
sizeof(uint64_t);
48 unsigned int offset = 0;
49 uint32_t packetHeaderWord0 = ReadUint32(packetBuffer, offset);
50 uint32_t packetFamily = (packetHeaderWord0 >> 26) & 0x0000003F;
51 uint32_t packetClass = (packetHeaderWord0 >> 19) & 0x0000007F;
52 uint32_t packetType = (packetHeaderWord0 >> 16) & 0x00000007;
53 uint32_t streamId = (packetHeaderWord0 >> 0) & 0x00000007;
55 CHECK(packetFamily == 1);
56 CHECK(packetClass == 0);
57 CHECK(packetType == 0);
60 offset += uint32_t_size;
61 uint32_t packetHeaderWord1 = ReadUint32(packetBuffer, offset);
62 uint32_t sequenceNumbered = (packetHeaderWord1 >> 24) & 0x00000001;
63 uint32_t dataLength = (packetHeaderWord1 >> 0) & 0x00FFFFFF;
64 CHECK(sequenceNumbered == 0);
65 CHECK(dataLength == 443);
67 offset += uint32_t_size;
68 uint8_t readStreamVersion = ReadUint8(packetBuffer, offset);
69 CHECK(readStreamVersion == 4);
70 offset += uint8_t_size;
71 uint8_t readPointerBytes = ReadUint8(packetBuffer, offset);
72 CHECK(readPointerBytes == uint64_t_size);
73 offset += uint8_t_size;
74 uint8_t readThreadIdBytes = ReadUint8(packetBuffer, offset);
75 CHECK(readThreadIdBytes == ThreadIdSize);
77 offset += uint8_t_size;
78 uint32_t DeclCount = ReadUint32(packetBuffer, offset);
79 CHECK(DeclCount == 5);
81 offset += uint32_t_size;
82 arm::pipe::SwTraceMessage swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
84 packetBuffer->GetSize());
86 CHECK(swTraceMessage.m_Id == 0);
87 CHECK(swTraceMessage.m_Name ==
"declareLabel");
88 CHECK(swTraceMessage.m_UiName ==
"declare label");
89 CHECK(swTraceMessage.m_ArgTypes.size() == 2);
90 CHECK(swTraceMessage.m_ArgTypes[0] ==
'p');
91 CHECK(swTraceMessage.m_ArgTypes[1] ==
's');
92 CHECK(swTraceMessage.m_ArgNames.size() == 2);
93 CHECK(swTraceMessage.m_ArgNames[0] ==
"guid");
94 CHECK(swTraceMessage.m_ArgNames[1] ==
"value");
96 swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
98 packetBuffer->GetSize());
100 CHECK(swTraceMessage.m_Id == 1);
101 CHECK(swTraceMessage.m_Name ==
"declareEntity");
102 CHECK(swTraceMessage.m_UiName ==
"declare entity");
103 CHECK(swTraceMessage.m_ArgTypes.size() == 1);
104 CHECK(swTraceMessage.m_ArgTypes[0] ==
'p');
105 CHECK(swTraceMessage.m_ArgNames.size() == 1);
106 CHECK(swTraceMessage.m_ArgNames[0] ==
"guid");
108 swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
110 packetBuffer->GetSize());
112 CHECK(swTraceMessage.m_Id == 2);
113 CHECK(swTraceMessage.m_Name ==
"declareEventClass");
114 CHECK(swTraceMessage.m_UiName ==
"declare event class");
115 CHECK(swTraceMessage.m_ArgTypes.size() == 2);
116 CHECK(swTraceMessage.m_ArgTypes[0] ==
'p');
117 CHECK(swTraceMessage.m_ArgTypes[1] ==
'p');
118 CHECK(swTraceMessage.m_ArgNames.size() == 2);
119 CHECK(swTraceMessage.m_ArgNames[0] ==
"guid");
120 CHECK(swTraceMessage.m_ArgNames[1] ==
"nameGuid");
122 swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
124 packetBuffer->GetSize());
126 CHECK(swTraceMessage.m_Id == 3);
127 CHECK(swTraceMessage.m_Name ==
"declareRelationship");
128 CHECK(swTraceMessage.m_UiName ==
"declare relationship");
129 CHECK(swTraceMessage.m_ArgTypes.size() == 5);
130 CHECK(swTraceMessage.m_ArgTypes[0] ==
'I');
131 CHECK(swTraceMessage.m_ArgTypes[1] ==
'p');
132 CHECK(swTraceMessage.m_ArgTypes[2] ==
'p');
133 CHECK(swTraceMessage.m_ArgTypes[3] ==
'p');
134 CHECK(swTraceMessage.m_ArgTypes[4] ==
'p');
135 CHECK(swTraceMessage.m_ArgNames.size() == 5);
136 CHECK(swTraceMessage.m_ArgNames[0] ==
"relationshipType");
137 CHECK(swTraceMessage.m_ArgNames[1] ==
"relationshipGuid");
138 CHECK(swTraceMessage.m_ArgNames[2] ==
"headGuid");
139 CHECK(swTraceMessage.m_ArgNames[3] ==
"tailGuid");
140 CHECK(swTraceMessage.m_ArgNames[4] ==
"attributeGuid");
142 swTraceMessage = arm::pipe::ReadSwTraceMessage(packetBuffer->GetReadableData(),
144 packetBuffer->GetSize());
146 CHECK(swTraceMessage.m_Id == 4);
147 CHECK(swTraceMessage.m_Name ==
"declareEvent");
148 CHECK(swTraceMessage.m_UiName ==
"declare event");
149 CHECK(swTraceMessage.m_ArgTypes.size() == 3);
150 CHECK(swTraceMessage.m_ArgTypes[0] ==
'@');
151 CHECK(swTraceMessage.m_ArgTypes[1] ==
't');
152 CHECK(swTraceMessage.m_ArgTypes[2] ==
'p');
153 CHECK(swTraceMessage.m_ArgNames.size() == 3);
154 CHECK(swTraceMessage.m_ArgNames[0] ==
"timestamp");
155 CHECK(swTraceMessage.m_ArgNames[1] ==
"threadId");
156 CHECK(swTraceMessage.m_ArgNames[2] ==
"eventGuid");
159 TEST_CASE(
"SendTimelineEntityWithEventClassPacketTest")
162 TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
163 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
165 const uint64_t entityBinaryPacketProfilingGuid = 123456u;
166 sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
168 const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
169 const uint64_t eventClassBinaryPacketNameGuid = 8845u;
170 sendTimelinePacket->SendTimelineEventClassBinaryPacket(
171 eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid);
174 sendTimelinePacket->Commit();
177 auto packetBuffer = bufferManager.GetReadableBuffer();
179 unsigned int uint32_t_size =
sizeof(uint32_t);
180 unsigned int uint64_t_size =
sizeof(uint64_t);
183 unsigned int offset = 0;
186 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
187 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
188 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
189 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
190 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
192 CHECK(entityBinaryPacketFamily == 1);
193 CHECK(entityBinaryPacketClass == 0);
194 CHECK(entityBinaryPacketType == 1);
195 CHECK(entityBinaryPacketStreamId == 0);
197 offset += uint32_t_size;
199 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
201 uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
202 uint32_t entityBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
204 CHECK(entityBinaryPacketSequenceNumbered == 0);
205 CHECK(entityBinaryPacketDataLength == 32);
208 offset += uint32_t_size;
209 uint32_t entitytDecId = ReadUint32(packetBuffer, offset);
211 CHECK(entitytDecId == uint32_t(1));
214 offset += uint32_t_size;
215 uint64_t readProfilingGuid = ReadUint64(packetBuffer, offset);
217 CHECK(readProfilingGuid == entityBinaryPacketProfilingGuid);
220 offset += uint64_t_size;
222 uint32_t eventClassDeclId = ReadUint32(packetBuffer, offset);
223 CHECK(eventClassDeclId == uint32_t(2));
226 offset += uint32_t_size;
227 readProfilingGuid = ReadUint64(packetBuffer, offset);
228 CHECK(readProfilingGuid == eventClassBinaryPacketProfilingGuid);
230 offset += uint64_t_size;
231 uint64_t readEventClassNameGuid = ReadUint64(packetBuffer, offset);
232 CHECK(readEventClassNameGuid == eventClassBinaryPacketNameGuid);
234 bufferManager.MarkRead(packetBuffer);
237 TEST_CASE(
"SendEventClassAfterTimelineEntityPacketTest")
239 unsigned int uint32_t_size =
sizeof(uint32_t);
240 unsigned int uint64_t_size =
sizeof(uint64_t);
243 TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
244 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
247 const uint64_t entityBinaryPacketProfilingGuid = 123456u;
248 sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
251 sendTimelinePacket->Commit();
254 auto packetBuffer = bufferManager.GetReadableBuffer();
257 unsigned int offset = 0;
260 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
261 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
262 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
263 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
264 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
266 CHECK(entityBinaryPacketFamily == 1);
267 CHECK(entityBinaryPacketClass == 0);
268 CHECK(entityBinaryPacketType == 1);
269 CHECK(entityBinaryPacketStreamId == 0);
271 offset += uint32_t_size;
272 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
273 uint32_t entityBinaryPacketSequenceNumbered = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
274 uint32_t entityBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
275 CHECK(entityBinaryPacketSequenceNumbered == 0);
276 CHECK(entityBinaryPacketDataLength == 12);
279 offset += uint32_t_size;
280 uint32_t entitytDecId = ReadUint32(packetBuffer, offset);
282 CHECK(entitytDecId == uint32_t(1));
285 offset += uint32_t_size;
286 uint64_t readProfilingGuid = ReadUint64(packetBuffer, offset);
288 CHECK(readProfilingGuid == entityBinaryPacketProfilingGuid);
290 bufferManager.MarkRead(packetBuffer);
293 const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
294 const uint64_t eventClassBinaryPacketNameGuid = 8845u;
295 sendTimelinePacket->SendTimelineEventClassBinaryPacket(
296 eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid);
299 sendTimelinePacket->Commit();
302 packetBuffer = bufferManager.GetReadableBuffer();
308 uint32_t eventClassBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
309 uint32_t eventClassBinaryPacketFamily = (eventClassBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
310 uint32_t eventClassBinaryPacketClass = (eventClassBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
311 uint32_t eventClassBinaryPacketType = (eventClassBinaryPacketHeaderWord0 >> 16) & 0x00000007;
312 uint32_t eventClassBinaryPacketStreamId = (eventClassBinaryPacketHeaderWord0 >> 0) & 0x00000007;
314 CHECK(eventClassBinaryPacketFamily == 1);
315 CHECK(eventClassBinaryPacketClass == 0);
316 CHECK(eventClassBinaryPacketType == 1);
317 CHECK(eventClassBinaryPacketStreamId == 0);
319 offset += uint32_t_size;
320 uint32_t eventClassBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
321 uint32_t eventClassBinaryPacketSequenceNumbered = (eventClassBinaryPacketHeaderWord1 >> 24) & 0x00000001;
322 uint32_t eventClassBinaryPacketDataLength = (eventClassBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
323 CHECK(eventClassBinaryPacketSequenceNumbered == 0);
324 CHECK(eventClassBinaryPacketDataLength == 20);
326 offset += uint32_t_size;
327 uint32_t eventClassDeclId = ReadUint32(packetBuffer, offset);
328 CHECK(eventClassDeclId == uint32_t(2));
331 offset += uint32_t_size;
332 readProfilingGuid = ReadUint64(packetBuffer, offset);
333 CHECK(readProfilingGuid == eventClassBinaryPacketProfilingGuid);
335 offset += uint64_t_size;
336 uint64_t readEventClassNameGuid = ReadUint64(packetBuffer, offset);
337 CHECK(readEventClassNameGuid == eventClassBinaryPacketNameGuid);
339 bufferManager.MarkRead(packetBuffer);
342 const uint64_t timestamp = 456789u;
343 const int threadId = arm::pipe::GetCurrentThreadId();
344 const uint64_t eventProfilingGuid = 123456u;
345 sendTimelinePacket->SendTimelineEventBinaryPacket(timestamp, threadId, eventProfilingGuid);
348 sendTimelinePacket->Commit();
351 packetBuffer = bufferManager.GetReadableBuffer();
357 uint32_t eventBinaryPacketHeaderWord0 = ReadUint32(packetBuffer, offset);
358 uint32_t eventBinaryPacketFamily = (eventBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
359 uint32_t eventBinaryPacketClass = (eventBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
360 uint32_t eventBinaryPacketType = (eventBinaryPacketHeaderWord0 >> 16) & 0x00000007;
361 uint32_t eventBinaryPacketStreamId = (eventBinaryPacketHeaderWord0 >> 0) & 0x00000007;
363 CHECK(eventBinaryPacketFamily == 1);
364 CHECK(eventBinaryPacketClass == 0);
365 CHECK(eventBinaryPacketType == 1);
366 CHECK(eventBinaryPacketStreamId == 0);
368 offset += uint32_t_size;
369 uint32_t eventBinaryPacketHeaderWord1 = ReadUint32(packetBuffer, offset);
370 uint32_t eventBinaryPacketSequenceNumbered = (eventBinaryPacketHeaderWord1 >> 24) & 0x00000001;
371 uint32_t eventBinaryPacketDataLength = (eventBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
372 CHECK(eventBinaryPacketSequenceNumbered == 0);
373 CHECK(eventBinaryPacketDataLength == 20 + ThreadIdSize);
376 offset += uint32_t_size;
377 uint32_t eventDeclId = ReadUint32(packetBuffer, offset);
378 CHECK(eventDeclId == 4);
381 offset += uint32_t_size;
382 uint64_t eventTimestamp = ReadUint64(packetBuffer, offset);
383 CHECK(eventTimestamp == timestamp);
386 offset += uint64_t_size;
387 std::vector<uint8_t> readThreadId(ThreadIdSize, 0);
388 ReadBytes(packetBuffer, offset, ThreadIdSize, readThreadId.data());
389 CHECK(readThreadId == threadId);
392 offset += ThreadIdSize;
393 readProfilingGuid = ReadUint64(packetBuffer, offset);
394 CHECK(readProfilingGuid == eventProfilingGuid);
397 TEST_CASE(
"SendTimelinePacketTests2")
400 TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
401 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
403 CHECK_THROWS_AS(sendTimelinePacket->SendTimelineMessageDirectoryPackage(),
404 arm::pipe::ProfilingException);
407 TEST_CASE(
"SendTimelinePacketTests3")
410 TimelinePacketWriterFactory timelinePacketWriterFactory(bufferManager);
411 std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = timelinePacketWriterFactory.GetSendTimelinePacket();
414 const uint64_t entityBinaryPacketProfilingGuid = 123456u;
415 sendTimelinePacket->SendTimelineEntityBinaryPacket(entityBinaryPacketProfilingGuid);
418 sendTimelinePacket->Commit();
421 auto packetBuffer = bufferManager.GetReadableBuffer();
424 const uint64_t eventClassBinaryPacketProfilingGuid = 789123u;
425 const uint64_t eventClassBinaryPacketNameGuid = 8845u;
426 CHECK_THROWS_AS(sendTimelinePacket->SendTimelineEventClassBinaryPacket(
427 eventClassBinaryPacketProfilingGuid, eventClassBinaryPacketNameGuid),
431 TEST_CASE(
"GetGuidsFromProfilingService")
433 LogLevelSwapper logLevelSwapper(arm::pipe::LogSeverity::Fatal);
439 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
441 arm::pipe::ARMNN_SOFTWARE_INFO,
442 arm::pipe::ARMNN_SOFTWARE_VERSION,
443 arm::pipe::ARMNN_HARDWARE_VERSION,
446 profilingService.ResetExternalProfilingOptions(
448 ProfilingStaticGuid staticGuid = profilingService.GetStaticId(
"dummy");
449 std::hash<std::string> hasher;
450 uint64_t hash =
static_cast<uint64_t
>(hasher(
"dummy"));
451 ProfilingStaticGuid expectedStaticValue(hash | MIN_STATIC_GUID);
452 CHECK(staticGuid == expectedStaticValue);
453 ProfilingDynamicGuid dynamicGuid = profilingService.GetNextGuid();
454 uint64_t dynamicGuidValue =
static_cast<uint64_t
>(dynamicGuid);
456 ProfilingDynamicGuid expectedDynamicValue(dynamicGuidValue);
457 dynamicGuid = profilingService.GetNextGuid();
458 CHECK(dynamicGuid == expectedDynamicValue);
461 TEST_CASE(
"GetTimelinePackerWriterFromProfilingService")
463 LogLevelSwapper logLevelSwapper(arm::pipe::LogSeverity::Fatal);
465 ProfilingOptions options;
466 options.m_EnableProfiling =
true;
468 ProfilingService profilingService(arm::pipe::MAX_ARMNN_COUNTER,
470 arm::pipe::ARMNN_SOFTWARE_INFO,
471 arm::pipe::ARMNN_SOFTWARE_VERSION,
472 arm::pipe::ARMNN_HARDWARE_VERSION);
473 profilingService.ResetExternalProfilingOptions(options,
true);
475 std::unique_ptr<ISendTimelinePacket> writer = profilingService.GetSendTimelinePacket();
476 CHECK(writer !=
nullptr);
479 TEST_CASE(
"CheckStaticGuidsAndEvents")
481 CHECK(
"name" == LabelsAndEventClasses::NAME_LABEL);
482 CHECK(
"type" == LabelsAndEventClasses::TYPE_LABEL);
483 CHECK(
"index" == LabelsAndEventClasses::INDEX_LABEL);
485 std::hash<std::string> hasher;
487 uint64_t hash =
static_cast<uint64_t
>(hasher(LabelsAndEventClasses::NAME_LABEL));
488 ProfilingStaticGuid expectedNameGuid(hash | MIN_STATIC_GUID);
489 CHECK(LabelsAndEventClasses::NAME_GUID == expectedNameGuid);
491 hash =
static_cast<uint64_t
>(hasher(LabelsAndEventClasses::TYPE_LABEL));
492 ProfilingStaticGuid expectedTypeGuid(hash | MIN_STATIC_GUID);
493 CHECK(LabelsAndEventClasses::TYPE_GUID == expectedTypeGuid);
495 hash =
static_cast<uint64_t
>(hasher(LabelsAndEventClasses::INDEX_LABEL));
496 ProfilingStaticGuid expectedIndexGuid(hash | MIN_STATIC_GUID);
497 CHECK(LabelsAndEventClasses::INDEX_GUID == expectedIndexGuid);
499 hash =
static_cast<uint64_t
>(hasher(
"ARMNN_PROFILING_SOL"));
500 ProfilingStaticGuid expectedSol(hash | MIN_STATIC_GUID);
501 CHECK(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS == expectedSol);
503 hash =
static_cast<uint64_t
>(hasher(
"ARMNN_PROFILING_EOL"));
504 ProfilingStaticGuid expectedEol(hash | MIN_STATIC_GUID);
505 CHECK(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS == expectedEol);
bool m_EnableProfiling
Indicates whether external profiling is enabled or not.
ProfilingOptions ConvertExternalProfilingOptions(const armnn::IRuntime::CreationOptions::ExternalProfilingOptions &options)
ExternalProfilingOptions m_ProfilingOptions