blob: 89b5926da739ed18fd668cb761c3dcf72545f086 [file] [log] [blame]
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ProfilingTestUtils.hpp"
7#include "ProfilingUtils.hpp"
8
9#include <armnn/Descriptors.hpp>
10#include <LabelsAndEventClasses.hpp>
11#include <ProfilingService.hpp>
12
13#include <boost/test/unit_test.hpp>
14
15inline unsigned int OffsetToNextWord(unsigned int numberOfBytes)
16{
17 unsigned int uint32_t_size = sizeof(uint32_t);
18
19 unsigned int remainder = numberOfBytes % uint32_t_size;
20 if (remainder == 0)
21 {
22 return numberOfBytes;
23 }
24
25 return numberOfBytes + uint32_t_size - remainder;
26}
27
Keith Davis97da5e22020-03-05 16:25:28 +000028void VerifyTimelineHeaderBinary(const unsigned char* readableData,
29 unsigned int& offset,
30 uint32_t packetDataLength)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000031{
32 BOOST_ASSERT(readableData);
33
34 // Utils
35 unsigned int uint32_t_size = sizeof(uint32_t);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000036
Keith Davis97da5e22020-03-05 16:25:28 +000037 // Check the TimelineEventClassBinaryPacket header
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000038 uint32_t entityBinaryPacketHeaderWord0 = ReadUint32(readableData, offset);
39 uint32_t entityBinaryPacketFamily = (entityBinaryPacketHeaderWord0 >> 26) & 0x0000003F;
40 uint32_t entityBinaryPacketClass = (entityBinaryPacketHeaderWord0 >> 19) & 0x0000007F;
41 uint32_t entityBinaryPacketType = (entityBinaryPacketHeaderWord0 >> 16) & 0x00000007;
42 uint32_t entityBinaryPacketStreamId = (entityBinaryPacketHeaderWord0 >> 0) & 0x00000007;
43 BOOST_CHECK(entityBinaryPacketFamily == 1);
44 BOOST_CHECK(entityBinaryPacketClass == 0);
45 BOOST_CHECK(entityBinaryPacketType == 1);
46 BOOST_CHECK(entityBinaryPacketStreamId == 0);
47 offset += uint32_t_size;
48 uint32_t entityBinaryPacketHeaderWord1 = ReadUint32(readableData, offset);
49 uint32_t eventBinaryPacketSequenceNumber = (entityBinaryPacketHeaderWord1 >> 24) & 0x00000001;
50 uint32_t eventBinaryPacketDataLength = (entityBinaryPacketHeaderWord1 >> 0) & 0x00FFFFFF;
51 BOOST_CHECK(eventBinaryPacketSequenceNumber == 0);
Keith Davis97da5e22020-03-05 16:25:28 +000052 BOOST_CHECK(eventBinaryPacketDataLength == packetDataLength);
53 offset += uint32_t_size;
54}
55
56void VerifyTimelineLabelBinaryPacketData(Optional<ProfilingGuid> guid,
57 const std::string& label,
58 const unsigned char* readableData,
59 unsigned int& offset)
60{
61 BOOST_ASSERT(readableData);
62
63 // Utils
64 unsigned int uint32_t_size = sizeof(uint32_t);
65 unsigned int uint64_t_size = sizeof(uint64_t);
66 unsigned int label_size = boost::numeric_cast<unsigned int>(label.size());
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000067
68 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000069 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
70 BOOST_CHECK(eventClassDeclId == 0);
71
72 // Check the profiling GUID
73 offset += uint32_t_size;
74 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
75 if (guid.has_value())
76 {
77 BOOST_CHECK(readProfilingGuid == guid.value());
78 }
79 else
80 {
81 BOOST_CHECK(readProfilingGuid == ProfilingService::Instance().GenerateStaticId(label));
82 }
83
84 // Check the SWTrace label
85 offset += uint64_t_size;
86 uint32_t swTraceLabelLength = ReadUint32(readableData, offset);
Keith Davis97da5e22020-03-05 16:25:28 +000087 BOOST_CHECK(swTraceLabelLength == label_size + 1); // Label length including the null-terminator
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000088 offset += uint32_t_size;
89 BOOST_CHECK(std::memcmp(readableData + offset, // Offset to the label in the buffer
Keith Davis97da5e22020-03-05 16:25:28 +000090 label.data(), // The original label
91 swTraceLabelLength - 1) == 0); // The length of the label
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +000092
93 // SWTrace strings are written in blocks of words, so the offset has to be updated to the next whole word
94 offset += OffsetToNextWord(swTraceLabelLength);
95}
96
Keith Davis97da5e22020-03-05 16:25:28 +000097void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid,
98 const unsigned char* readableData,
99 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000100{
101 BOOST_ASSERT(readableData);
102
103 // Utils
104 unsigned int uint32_t_size = sizeof(uint32_t);
105 unsigned int uint64_t_size = sizeof(uint64_t);
106
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000107 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000108 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
109 BOOST_CHECK(eventClassDeclId == 2);
110
111 // Check the profiling GUID
112 offset += uint32_t_size;
113 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
114 BOOST_CHECK(readProfilingGuid == guid);
115
116 // Update the offset to allow parsing to be continued after this function returns
117 offset += uint64_t_size;
118}
119
Keith Davis97da5e22020-03-05 16:25:28 +0000120void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000121 Optional<ProfilingGuid> relationshipGuid,
122 Optional<ProfilingGuid> headGuid,
123 Optional<ProfilingGuid> tailGuid,
124 const unsigned char* readableData,
125 unsigned int& offset)
126{
127 BOOST_ASSERT(readableData);
128
129 uint32_t relationshipTypeUint = 0;
130 switch (relationshipType)
131 {
132 case ProfilingRelationshipType::RetentionLink:
133 relationshipTypeUint = 0;
134 break;
135 case ProfilingRelationshipType::ExecutionLink:
136 relationshipTypeUint = 1;
137 break;
138 case ProfilingRelationshipType::DataLink:
139 relationshipTypeUint = 2;
140 break;
141 case ProfilingRelationshipType::LabelLink:
142 relationshipTypeUint = 3;
143 break;
144 default:
145 BOOST_ERROR("Unknown relationship type");
146 }
147
148 // Utils
149 unsigned int uint32_t_size = sizeof(uint32_t);
150 unsigned int uint64_t_size = sizeof(uint64_t);
151
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000152 // Check the decl id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000153 uint32_t eventClassDeclId = ReadUint32(readableData, offset);
154 BOOST_CHECK(eventClassDeclId == 3);
155
156 // Check the relationship type
157 offset += uint32_t_size;
158 uint32_t readRelationshipTypeUint = ReadUint32(readableData, offset);
159 BOOST_CHECK(readRelationshipTypeUint == relationshipTypeUint);
160
161 // Check the relationship GUID
162 offset += uint32_t_size;
163 uint64_t readRelationshipGuid = ReadUint64(readableData, offset);
164 if (relationshipGuid.has_value())
165 {
166 BOOST_CHECK(readRelationshipGuid == relationshipGuid.value());
167 }
168 else
169 {
170 BOOST_CHECK(readRelationshipGuid != ProfilingGuid(0));
171 }
172
173 // Check the head of relationship GUID
174 offset += uint64_t_size;
175 uint64_t readHeadRelationshipGuid = ReadUint64(readableData, offset);
176 if (headGuid.has_value())
177 {
178 BOOST_CHECK(readHeadRelationshipGuid == headGuid.value());
179 }
180 else
181 {
182 BOOST_CHECK(readHeadRelationshipGuid != ProfilingGuid(0));
183 }
184
185 // Check the tail of relationship GUID
186 offset += uint64_t_size;
187 uint64_t readTailRelationshipGuid = ReadUint64(readableData, offset);
188 if (tailGuid.has_value())
189 {
190 BOOST_CHECK(readTailRelationshipGuid == tailGuid.value());
191 }
192 else
193 {
194 BOOST_CHECK(readTailRelationshipGuid != ProfilingGuid(0));
195 }
196
197 // Update the offset to allow parsing to be continued after this function returns
198 offset += uint64_t_size;
199}
200
Keith Davis97da5e22020-03-05 16:25:28 +0000201void VerifyTimelineEntityBinaryPacketData(Optional<ProfilingGuid> guid,
202 const unsigned char* readableData,
203 unsigned int& offset)
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000204{
205 BOOST_ASSERT(readableData);
206
207 // Utils
208 unsigned int uint32_t_size = sizeof(uint32_t);
209 unsigned int uint64_t_size = sizeof(uint64_t);
210
211 // Reading TimelineEntityClassBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000212 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000213 uint32_t entityDeclId = ReadUint32(readableData, offset);
214 BOOST_CHECK(entityDeclId == 1);
215
216 // Check the profiling GUID
217 offset += uint32_t_size;
218 uint64_t readProfilingGuid = ReadUint64(readableData, offset);
219
220 if (guid.has_value())
221 {
222 BOOST_CHECK(readProfilingGuid == guid.value());
223 }
224 else
225 {
226 BOOST_CHECK(readProfilingGuid != ProfilingGuid(0));
227 }
228
229 offset += uint64_t_size;
230}
231
232void VerifyTimelineEventBinaryPacket(Optional<uint64_t> timestamp,
233 Optional<std::thread::id> threadId,
234 Optional<ProfilingGuid> eventGuid,
235 const unsigned char* readableData,
236 unsigned int& offset)
237{
238 BOOST_ASSERT(readableData);
239
240 // Utils
241 unsigned int uint32_t_size = sizeof(uint32_t);
242 unsigned int uint64_t_size = sizeof(uint64_t);
243 unsigned int threadId_size = sizeof(std::thread::id);
244
245 // Reading TimelineEventBinaryPacket
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000246 // Check the decl_id
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000247 uint32_t entityDeclId = ReadUint32(readableData, offset);
248 BOOST_CHECK(entityDeclId == 4);
249
250 // Check the timestamp
251 offset += uint32_t_size;
252 uint64_t readTimestamp = ReadUint64(readableData, offset);
253 if (timestamp.has_value())
254 {
255 BOOST_CHECK(readTimestamp == timestamp.value());
256 }
257 else
258 {
259 BOOST_CHECK(readTimestamp != 0);
260 }
261
262 // Check the thread id
263 offset += uint64_t_size;
264 std::vector<uint8_t> readThreadId(threadId_size, 0);
265 ReadBytes(readableData, offset, threadId_size, readThreadId.data());
266 if (threadId.has_value())
267 {
268 BOOST_CHECK(readThreadId == threadId.value());
269 }
270 else
271 {
272 BOOST_CHECK(readThreadId == std::this_thread::get_id());
273 }
274
275 // Check the event GUID
276 offset += threadId_size;
277 uint64_t readEventGuid = ReadUint64(readableData, offset);
278 if (eventGuid.has_value())
279 {
280 BOOST_CHECK(readEventGuid == eventGuid.value());
281 }
282 else
283 {
284 BOOST_CHECK(readEventGuid != ProfilingGuid(0));
285 }
286
287 offset += uint64_t_size;
288}
289
290void VerifyPostOptimisationStructureTestImpl(armnn::BackendId backendId)
291{
292 using namespace armnn;
293
294 // Create runtime in which test will run
295 armnn::IRuntime::CreationOptions options;
296 options.m_ProfilingOptions.m_EnableProfiling = true;
David Monahanc1536d62020-02-12 15:52:35 +0000297 armnn::profiling::ProfilingService& profilingService = armnn::profiling::ProfilingService::Instance();
298 profilingService.ConfigureProfilingService(options.m_ProfilingOptions, true);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000299 armnn::IRuntimePtr runtime(armnn::IRuntime::Create(options));
300
301 // build up the structure of the network
302 INetworkPtr net(INetwork::Create());
303
304 // Convolution details
305 TensorInfo inputInfo({ 1, 2, 5, 1 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000306 TensorInfo weightInfo({ 3, 2, 3, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000307 TensorInfo biasInfo({ 3 }, DataType::Float32);
Keith Davis97da5e22020-03-05 16:25:28 +0000308 TensorInfo outputInfo({ 1, 3, 7, 1 }, DataType::Float32);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000309 std::vector<float> weightsData{
Keith Davis97da5e22020-03-05 16:25:28 +0000310 1.0f, 0.0f, 0.0f,
311 0.0f, 2.0f, -1.5f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000312
Keith Davis97da5e22020-03-05 16:25:28 +0000313 0.0f, 0.0f, 0.0f,
314 0.2f, 0.2f, 0.2f,
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000315
Keith Davis97da5e22020-03-05 16:25:28 +0000316 0.5f, 0.0f, 0.5f,
317 0.0f, -1.0f, 0.0f
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000318 };
319 ConstTensor weights(weightInfo, weightsData);
320
321 Optional<ConstTensor> optionalBiases;
322 std::vector<float> biasesData{ 1.0f, 0.0f, 0.0f };
323 ConstTensor biases(biasInfo, biasesData);
324 optionalBiases = Optional<ConstTensor>(biases);
325
326 // Input layer
327 IConnectableLayer* input = net->AddInputLayer(0, "input");
328
329 // Convolution2d layer
330 Convolution2dDescriptor conv2dDesc;
Keith Davis97da5e22020-03-05 16:25:28 +0000331 conv2dDesc.m_StrideX = 1;
332 conv2dDesc.m_StrideY = 1;
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000333 conv2dDesc.m_PadLeft = 0;
334 conv2dDesc.m_PadRight = 0;
335 conv2dDesc.m_PadTop = 2;
336 conv2dDesc.m_PadBottom = 2;
337 conv2dDesc.m_BiasEnabled = true;
338 IConnectableLayer* conv2d = net->AddConvolution2dLayer(conv2dDesc, weights, optionalBiases);
339
340 // Activation layer
341 armnn::ActivationDescriptor activationDesc;
342 armnn::IConnectableLayer* const activation = net->AddActivationLayer(activationDesc, "activation");
343
344 // Output layer
345 IConnectableLayer* output = net->AddOutputLayer(0, "output");
346
347 input->GetOutputSlot(0).Connect(conv2d->GetInputSlot(0));
348 conv2d->GetOutputSlot(0).Connect(activation->GetInputSlot(0));
349 activation->GetOutputSlot(0).Connect(output->GetInputSlot(0));
350
351 input->GetOutputSlot(0).SetTensorInfo(inputInfo);
352 conv2d->GetOutputSlot(0).SetTensorInfo(outputInfo);
353 activation->GetOutputSlot(0).SetTensorInfo(outputInfo);
354
355 // optimize the network
356 std::vector<armnn::BackendId> backends = { backendId };
357 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
358
359 ProfilingGuid optNetGuid = optNet->GetGuid();
360
361 // Load it into the runtime. It should success.
362 armnn::NetworkId netId;
363 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
364
365 profiling::ProfilingServiceRuntimeHelper profilingServiceHelper;
366 profiling::BufferManager& bufferManager = profilingServiceHelper.GetProfilingBufferManager();
367 auto readableBuffer = bufferManager.GetReadableBuffer();
368
369 // Profiling is enable, the post-optimisation structure should be created
370 BOOST_CHECK(readableBuffer != nullptr);
371
372 unsigned int size = readableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000373 BOOST_CHECK(size == 1556);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000374
375 const unsigned char* readableData = readableBuffer->GetReadableData();
376 BOOST_CHECK(readableData != nullptr);
377
378 unsigned int offset = 0;
379
Keith Davis97da5e22020-03-05 16:25:28 +0000380 // Verify Header
381 VerifyTimelineHeaderBinary(readableData, offset, 1548);
382
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000383 // Post-optimisation network
384 // Network entity
Keith Davis97da5e22020-03-05 16:25:28 +0000385 VerifyTimelineEntityBinaryPacketData(optNetGuid, readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000386
387 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000388 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
389 EmptyOptional(),
390 optNetGuid,
391 EmptyOptional(),
392 readableData,
393 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000394
395 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000396 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
397 EmptyOptional(),
398 EmptyOptional(),
399 LabelsAndEventClasses::TYPE_GUID,
400 readableData,
401 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000402
403 // Input layer
404 // Input layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000405 VerifyTimelineEntityBinaryPacketData(input->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000406
407 // Name Entity
Keith Davis97da5e22020-03-05 16:25:28 +0000408 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "input", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000409
410 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000411 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
412 EmptyOptional(),
413 input->GetGuid(),
414 EmptyOptional(),
415 readableData,
416 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000417
418 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000419 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
420 EmptyOptional(),
421 EmptyOptional(),
422 LabelsAndEventClasses::NAME_GUID,
423 readableData,
424 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000425
426 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000427 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
428 EmptyOptional(),
429 input->GetGuid(),
430 EmptyOptional(),
431 readableData,
432 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000433
434 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000435 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
436 EmptyOptional(),
437 EmptyOptional(),
438 LabelsAndEventClasses::TYPE_GUID,
439 readableData,
440 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000441
442 // Network - Input layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000443 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
444 EmptyOptional(),
445 optNetGuid,
446 input->GetGuid(),
447 readableData,
448 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000449
450 // Conv2d layer
451 // Conv2d layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000452 VerifyTimelineEntityBinaryPacketData(conv2d->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000453
454 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000455 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "<Unnamed>", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000456
457 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000458 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
459 EmptyOptional(),
460 conv2d->GetGuid(),
461 EmptyOptional(),
462 readableData,
463 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000464
465 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000466 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
467 EmptyOptional(),
468 EmptyOptional(),
469 LabelsAndEventClasses::NAME_GUID,
470 readableData,
471 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000472
473 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000474 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
475 EmptyOptional(),
476 conv2d->GetGuid(),
477 EmptyOptional(),
478 readableData,
479 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000480
481 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000482 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
483 EmptyOptional(),
484 EmptyOptional(),
485 LabelsAndEventClasses::TYPE_GUID,
486 readableData,
487 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000488
489 // Network - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000490 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
491 EmptyOptional(),
492 optNetGuid,
493 conv2d->GetGuid(),
494 readableData,
495 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000496
497 // Input layer - Conv2d layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000498 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
499 EmptyOptional(),
500 input->GetGuid(),
501 conv2d->GetGuid(),
502 readableData,
503 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000504
505 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000506 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
507 EmptyOptional(),
508 EmptyOptional(),
509 LabelsAndEventClasses::CONNECTION_GUID,
510 readableData,
511 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000512
513 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000514 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
515 EmptyOptional(),
516 EmptyOptional(),
517 LabelsAndEventClasses::TYPE_GUID,
518 readableData,
519 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000520
521 // Conv2d workload
522 // Conv2d workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000523 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000524
525 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000526 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
527 EmptyOptional(),
528 EmptyOptional(),
529 EmptyOptional(),
530 readableData,
531 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000532
533 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000534 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
535 EmptyOptional(),
536 EmptyOptional(),
537 LabelsAndEventClasses::TYPE_GUID,
538 readableData,
539 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000540
541 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000542 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000543
544 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000545 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
546 EmptyOptional(),
547 EmptyOptional(),
548 EmptyOptional(),
549 readableData,
550 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000551
552 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000553 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
554 EmptyOptional(),
555 EmptyOptional(),
556 LabelsAndEventClasses::BACKENDID_GUID,
557 readableData,
558 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000559
560 // Conv2d layer - Conv2d workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000561 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
562 EmptyOptional(),
563 conv2d->GetGuid(),
564 EmptyOptional(),
565 readableData,
566 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000567
568 // Activation layer
569 // Activation layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000570 VerifyTimelineEntityBinaryPacketData(activation->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000571
572 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000573 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "activation", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000574
575 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000576 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
577 EmptyOptional(),
578 activation->GetGuid(),
579 EmptyOptional(),
580 readableData,
581 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000582
583 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000584 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
585 EmptyOptional(),
586 EmptyOptional(),
587 LabelsAndEventClasses::NAME_GUID,
588 readableData,
589 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000590
591 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000592 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
593 EmptyOptional(),
594 activation->GetGuid(),
595 EmptyOptional(),
596 readableData,
597 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000598
599 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000600 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
601 EmptyOptional(),
602 EmptyOptional(),
603 LabelsAndEventClasses::TYPE_GUID,
604 readableData,
605 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000606
607 // Network - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000608 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
609 EmptyOptional(),
610 optNetGuid,
611 activation->GetGuid(),
612 readableData,
613 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000614
615 // Conv2d layer - Activation layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000616 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
617 EmptyOptional(),
618 conv2d->GetGuid(),
619 activation->GetGuid(),
620 readableData,
621 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000622
623 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000624 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
625 EmptyOptional(),
626 EmptyOptional(),
627 LabelsAndEventClasses::CONNECTION_GUID,
628 readableData,
629 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000630
631 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000632 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
633 EmptyOptional(),
634 EmptyOptional(),
635 LabelsAndEventClasses::TYPE_GUID,
636 readableData,
637 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000638
639 // Activation workload
640 // Activation workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000641 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000642
643 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000644 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
645 EmptyOptional(),
646 EmptyOptional(),
647 EmptyOptional(),
648 readableData,
649 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000650
651 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000652 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
653 EmptyOptional(),
654 EmptyOptional(),
655 LabelsAndEventClasses::TYPE_GUID,
656 readableData,
657 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000658
659 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000660 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000661
662 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000663 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
664 EmptyOptional(),
665 EmptyOptional(),
666 EmptyOptional(),
667 readableData,
668 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000669
670 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000671 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
672 EmptyOptional(),
673 EmptyOptional(),
674 LabelsAndEventClasses::BACKENDID_GUID,
675 readableData,
676 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000677
678 // Activation layer - Activation workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000679 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
680 EmptyOptional(),
681 activation->GetGuid(),
682 EmptyOptional(),
683 readableData,
684 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000685
686 // Output layer
687 // Output layer entity
Keith Davis97da5e22020-03-05 16:25:28 +0000688 VerifyTimelineEntityBinaryPacketData(output->GetGuid(), readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000689
690 // Name entity
Keith Davis97da5e22020-03-05 16:25:28 +0000691 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), "output", readableData, offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000692
693 // Entity - Name relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000694 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
695 EmptyOptional(),
696 output->GetGuid(),
697 EmptyOptional(),
698 readableData,
699 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000700
701 // Name label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000702 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
703 EmptyOptional(),
704 EmptyOptional(),
705 LabelsAndEventClasses::NAME_GUID,
706 readableData,
707 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000708
709 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000710 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
711 EmptyOptional(),
712 output->GetGuid(),
713 EmptyOptional(),
714 readableData,
715 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000716
717 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000718 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
719 EmptyOptional(),
720 EmptyOptional(),
721 LabelsAndEventClasses::TYPE_GUID,
722 readableData,
723 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000724
725 // Network - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000726 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
727 EmptyOptional(),
728 optNetGuid,
729 output->GetGuid(),
730 readableData,
731 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000732
733 // Activation layer - Output layer relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000734 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
735 EmptyOptional(),
736 activation->GetGuid(),
737 output->GetGuid(),
738 readableData,
739 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000740
741 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000742 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
743 EmptyOptional(),
744 EmptyOptional(),
745 LabelsAndEventClasses::CONNECTION_GUID,
746 readableData,
747 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000748
749 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000750 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
751 EmptyOptional(),
752 EmptyOptional(),
753 LabelsAndEventClasses::TYPE_GUID,
754 readableData,
755 offset);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +0000756
757 bufferManager.MarkRead(readableBuffer);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000758
759 // Creates structures for input & output.
760 std::vector<float> inputData(inputInfo.GetNumElements());
761 std::vector<float> outputData(outputInfo.GetNumElements());
762
763 InputTensors inputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000764 {
765 { 0, ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data()) }
766 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000767 OutputTensors outputTensors
Keith Davis97da5e22020-03-05 16:25:28 +0000768 {
769 { 0, Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data()) }
770 };
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000771
772 // Does the inference.
773 runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
774
David Monahan6198fe02019-12-02 08:35:43 +0000775 // Get readable buffer for inference timeline
776 auto inferenceReadableBuffer = bufferManager.GetReadableBuffer();
777 BOOST_CHECK(inferenceReadableBuffer != nullptr);
778
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000779 // Get readable buffer for output workload
780 auto outputReadableBuffer = bufferManager.GetReadableBuffer();
781 BOOST_CHECK(outputReadableBuffer != nullptr);
782
783 // Get readable buffer for input workload
784 auto inputReadableBuffer = bufferManager.GetReadableBuffer();
785 BOOST_CHECK(inputReadableBuffer != nullptr);
786
787 // Validate input workload data
788 size = inputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000789 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000790
791 readableData = inputReadableBuffer->GetReadableData();
792 BOOST_CHECK(readableData != nullptr);
793
794 offset = 0;
795
Keith Davis97da5e22020-03-05 16:25:28 +0000796 // Verify Header
797 VerifyTimelineHeaderBinary(readableData, offset, 196);
798
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000799 // Input workload
800 // Input workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000801 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000802
803 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000804 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
805 EmptyOptional(),
806 EmptyOptional(),
807 EmptyOptional(),
808 readableData,
809 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000810
811 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000812 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
813 EmptyOptional(),
814 EmptyOptional(),
815 LabelsAndEventClasses::TYPE_GUID,
816 readableData,
817 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000818
819 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000820 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000821
822 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000823 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
824 EmptyOptional(),
825 EmptyOptional(),
826 EmptyOptional(),
827 readableData,
828 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000829
830 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000831 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
832 EmptyOptional(),
833 EmptyOptional(),
834 LabelsAndEventClasses::BACKENDID_GUID,
835 readableData,
836 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000837
838 // Input layer - Input workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000839 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
840 EmptyOptional(),
841 input->GetGuid(),
842 EmptyOptional(),
843 readableData,
844 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000845
846 bufferManager.MarkRead(inputReadableBuffer);
847
848 // Validate output workload data
849 size = outputReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000850 BOOST_CHECK(size == 204);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000851
852 readableData = outputReadableBuffer->GetReadableData();
853 BOOST_CHECK(readableData != nullptr);
854
855 offset = 0;
856
Keith Davis97da5e22020-03-05 16:25:28 +0000857 // Verify Header
858 VerifyTimelineHeaderBinary(readableData, offset, 196);
859
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000860 // Output workload
861 // Output workload entity
Keith Davis97da5e22020-03-05 16:25:28 +0000862 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000863
864 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000865 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
866 EmptyOptional(),
867 EmptyOptional(),
868 EmptyOptional(),
869 readableData,
870 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000871
872 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000873 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
874 EmptyOptional(),
875 EmptyOptional(),
876 LabelsAndEventClasses::TYPE_GUID,
877 readableData,
878 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000879
880 // BackendId entity
Keith Davis97da5e22020-03-05 16:25:28 +0000881 VerifyTimelineLabelBinaryPacketData(EmptyOptional(), backendId.Get(), readableData, offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000882
883 // Entity - BackendId relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000884 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
885 EmptyOptional(),
886 EmptyOptional(),
887 EmptyOptional(),
888 readableData,
889 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000890
891 // BackendId label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000892 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
893 EmptyOptional(),
894 EmptyOptional(),
895 LabelsAndEventClasses::BACKENDID_GUID,
896 readableData,
897 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000898
899 // Output layer - Output workload relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000900 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
901 EmptyOptional(),
902 output->GetGuid(),
903 EmptyOptional(),
904 readableData,
905 offset);
Narumol Prangnawarataa68e012019-11-29 17:17:43 +0000906
907 bufferManager.MarkRead(outputReadableBuffer);
David Monahan6198fe02019-12-02 08:35:43 +0000908
909 // Validate inference data
910 size = inferenceReadableBuffer->GetSize();
Keith Davis97da5e22020-03-05 16:25:28 +0000911 BOOST_CHECK(size == 1596);
David Monahan6198fe02019-12-02 08:35:43 +0000912
913 readableData = inferenceReadableBuffer->GetReadableData();
914 BOOST_CHECK(readableData != nullptr);
915
916 offset = 0;
917
Keith Davis97da5e22020-03-05 16:25:28 +0000918 // Verify Header
919 VerifyTimelineHeaderBinary(readableData, offset, 1588);
920
David Monahan6198fe02019-12-02 08:35:43 +0000921 // Inference timeline trace
922 // Inference entity
Keith Davis97da5e22020-03-05 16:25:28 +0000923 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000924
925 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000926 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
927 EmptyOptional(),
928 EmptyOptional(),
929 LabelsAndEventClasses::INFERENCE_GUID,
930 readableData,
931 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000932
933 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000934 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
935 EmptyOptional(),
936 EmptyOptional(),
937 LabelsAndEventClasses::TYPE_GUID,
938 readableData,
939 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000940
941 // Network - Inference relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000942 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
943 EmptyOptional(),
944 optNetGuid,
945 EmptyOptional(),
946 readableData,
947 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000948
949 // Start Inference life
950 // Event packet - timeline, threadId, eventGuid
951 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
952
953 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000954 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
955 EmptyOptional(),
956 EmptyOptional(),
957 EmptyOptional(),
958 readableData,
959 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000960
961 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000962 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
963 EmptyOptional(),
964 EmptyOptional(),
965 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
966 readableData,
967 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000968
969 // Execution
970 // Input workload execution
971 // Input workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +0000972 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +0000973
974 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000975 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
976 EmptyOptional(),
977 EmptyOptional(),
978 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
979 readableData,
980 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000981
982 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000983 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
984 EmptyOptional(),
985 EmptyOptional(),
986 LabelsAndEventClasses::TYPE_GUID,
987 readableData,
988 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000989
990 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000991 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
992 EmptyOptional(),
993 EmptyOptional(),
994 EmptyOptional(),
995 readableData,
996 offset);
David Monahan6198fe02019-12-02 08:35:43 +0000997
998 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +0000999 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1000 EmptyOptional(),
1001 EmptyOptional(),
1002 EmptyOptional(),
1003 readableData,
1004 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001005
1006 // Start Input workload execution life
1007 // Event packet - timeline, threadId, eventGuid
1008 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1009
1010 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001011 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1012 EmptyOptional(),
1013 EmptyOptional(),
1014 EmptyOptional(),
1015 readableData,
1016 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001017
1018 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001019 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1020 EmptyOptional(),
1021 EmptyOptional(),
1022 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1023 readableData,
1024 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001025
1026 // End of Input workload execution life
1027 // Event packet - timeline, threadId, eventGuid
1028 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1029
1030 // Input workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001031 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1032 EmptyOptional(),
1033 EmptyOptional(),
1034 EmptyOptional(),
1035 readableData,
1036 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001037
1038 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001039 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1040 EmptyOptional(),
1041 EmptyOptional(),
1042 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1043 readableData,
1044 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001045
1046 // Conv2d workload execution
1047 // Conv2d workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001048 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001049
1050 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001051 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1052 EmptyOptional(),
1053 EmptyOptional(),
1054 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1055 readableData,
1056 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001057
1058 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001059 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1060 EmptyOptional(),
1061 EmptyOptional(),
1062 LabelsAndEventClasses::TYPE_GUID,
1063 readableData,
1064 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001065
1066 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001067 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1068 EmptyOptional(),
1069 EmptyOptional(),
1070 EmptyOptional(),
1071 readableData,
1072 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001073
1074 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001075 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1076 EmptyOptional(),
1077 EmptyOptional(),
1078 EmptyOptional(),
1079 readableData,
1080 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001081
1082 // Start Conv2d workload execution life
1083 // Event packet - timeline, threadId, eventGuid
1084 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1085
1086 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001087 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1088 EmptyOptional(),
1089 EmptyOptional(),
1090 EmptyOptional(),
1091 readableData,
1092 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001093
1094 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001095 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1096 EmptyOptional(),
1097 EmptyOptional(),
1098 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1099 readableData,
1100 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001101
1102 // End of Conv2d workload execution life
1103 // Event packet - timeline, threadId, eventGuid
1104 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1105
1106 // Conv2d workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001107 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1108 EmptyOptional(),
1109 EmptyOptional(),
1110 EmptyOptional(),
1111 readableData,
1112 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001113
1114 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001115 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1116 EmptyOptional(),
1117 EmptyOptional(),
1118 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1119 readableData,
1120 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001121
1122 // Activation workload execution
1123 // Activation workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001124 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001125
1126 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001127 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1128 EmptyOptional(),
1129 EmptyOptional(),
1130 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1131 readableData,
1132 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001133
1134 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001135 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1136 EmptyOptional(),
1137 EmptyOptional(),
1138 LabelsAndEventClasses::TYPE_GUID,
1139 readableData,
1140 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001141
1142 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001143 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1144 EmptyOptional(),
1145 EmptyOptional(),
1146 EmptyOptional(),
1147 readableData,
1148 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001149
1150 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001151 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1152 EmptyOptional(),
1153 EmptyOptional(),
1154 EmptyOptional(),
1155 readableData,
1156 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001157
1158 // Start Activation workload execution life
1159 // Event packet - timeline, threadId, eventGuid
1160 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1161
1162 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001163 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1164 EmptyOptional(),
1165 EmptyOptional(),
1166 EmptyOptional(),
1167 readableData,
1168 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001169
1170 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001171 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1172 EmptyOptional(),
1173 EmptyOptional(),
1174 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1175 readableData,
1176 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001177
1178 // End of Activation workload execution life
1179 // Event packet - timeline, threadId, eventGuid
1180 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1181
1182 // Activation workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001183 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1184 EmptyOptional(),
1185 EmptyOptional(),
1186 EmptyOptional(),
1187 readableData,
1188 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001189
1190 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001191 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1192 EmptyOptional(),
1193 EmptyOptional(),
1194 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1195 readableData,
1196 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001197
1198 // Output workload execution
1199 // Output workload execution entity
Keith Davis97da5e22020-03-05 16:25:28 +00001200 VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
David Monahan6198fe02019-12-02 08:35:43 +00001201
1202 // Entity - Type relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001203 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1204 EmptyOptional(),
1205 EmptyOptional(),
1206 LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
1207 readableData,
1208 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001209
1210 // Type label relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001211 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
1212 EmptyOptional(),
1213 EmptyOptional(),
1214 LabelsAndEventClasses::TYPE_GUID,
1215 readableData,
1216 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001217
1218 // Inference - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001219 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1220 EmptyOptional(),
1221 EmptyOptional(),
1222 EmptyOptional(),
1223 readableData,
1224 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001225
1226 // Workload - Workload execution relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001227 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
1228 EmptyOptional(),
1229 EmptyOptional(),
1230 EmptyOptional(),
1231 readableData,
1232 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001233
1234 // Start Output workload execution life
1235 // Event packet - timeline, threadId, eventGuid
1236 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1237
1238 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001239 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1240 EmptyOptional(),
1241 EmptyOptional(),
1242 EmptyOptional(),
1243 readableData,
1244 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001245
1246 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001247 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1248 EmptyOptional(),
1249 EmptyOptional(),
1250 LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
1251 readableData,
1252 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001253
1254 // End of Normalize workload execution life
1255 // Event packet - timeline, threadId, eventGuid
1256 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1257
1258 // Output workload execution - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001259 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1260 EmptyOptional(),
1261 EmptyOptional(),
1262 EmptyOptional(),
1263 readableData,
1264 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001265
1266 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001267 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1268 EmptyOptional(),
1269 EmptyOptional(),
1270 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1271 readableData,
1272 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001273
1274 // End of Inference life
1275 // Event packet - timeline, threadId, eventGuid
1276 VerifyTimelineEventBinaryPacket(EmptyOptional(), EmptyOptional(), EmptyOptional(), readableData, offset);
1277
1278 // Inference - event relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001279 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
1280 EmptyOptional(),
1281 EmptyOptional(),
1282 EmptyOptional(),
1283 readableData,
1284 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001285
1286 // Event - event class relationship
Keith Davis97da5e22020-03-05 16:25:28 +00001287 VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::DataLink,
1288 EmptyOptional(),
1289 EmptyOptional(),
1290 LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
1291 readableData,
1292 offset);
David Monahan6198fe02019-12-02 08:35:43 +00001293
1294 bufferManager.MarkRead(inferenceReadableBuffer);
Narumol Prangnawaratdf31cfe2019-11-22 11:26:06 +00001295}