xref: /aosp_15_r20/external/armnn/src/timelineDecoder/tests/JSONTimelineDecoderTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <JSONTimelineDecoder.hpp>
7 #include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
8 #include <server/include/timelineDecoder/TimelineDecoder.hpp>
9 #include <armnnUtils/Filesystem.hpp>
10 
11 #include <doctest/doctest.h>
12 
13 #include <fstream>
14 
15 TEST_SUITE("JSONTimelineDecoderTests")
16 {
17 using namespace armnn;
18 using namespace timelinedecoder;
19 
RunSimpleModelThroughDecoder(JSONTimelineDecoder & timelineDecoder)20 void RunSimpleModelThroughDecoder(JSONTimelineDecoder& timelineDecoder)
21 {
22     /*
23     * Building Simple model structure to test
24     */
25     arm::pipe::ITimelineDecoder::Label name;
26     name.m_Guid = uint64_t(10420554295983197538U);
27     name.m_Name = "name";
28     timelineDecoder.CreateLabel(name);
29 
30     arm::pipe::ITimelineDecoder::Label type;
31     type.m_Guid = uint64_t(14196220359693045352U);
32     type.m_Name = "type";
33     timelineDecoder.CreateLabel(type);
34 
35     arm::pipe::ITimelineDecoder::Label index;
36     index.m_Guid = uint64_t(13922236767355949814U);
37     index.m_Name = "index";
38     timelineDecoder.CreateLabel(index);
39 
40     arm::pipe::ITimelineDecoder::Label backendId;
41     backendId.m_Guid = uint64_t(10874037804557439415U);
42     backendId.m_Name = "backendId";
43     timelineDecoder.CreateLabel(backendId);
44 
45     arm::pipe::ITimelineDecoder::Label layer;
46     layer.m_Guid = uint64_t(14761340794127440397U);
47     layer.m_Name = "layer";
48     timelineDecoder.CreateLabel(layer);
49 
50     arm::pipe::ITimelineDecoder::Label workload;
51     workload.m_Guid = uint64_t(15704252740552608110U);
52     workload.m_Name = "workload";
53     timelineDecoder.CreateLabel(workload);
54 
55     arm::pipe::ITimelineDecoder::Label network;
56     network.m_Guid = uint64_t(16862199137063532871U);
57     network.m_Name = "network";
58     timelineDecoder.CreateLabel(network);
59 
60     arm::pipe::ITimelineDecoder::Label connection;
61     connection.m_Guid = uint64_t(15733717748792475675U);
62     connection.m_Name = "connection";
63     timelineDecoder.CreateLabel(connection);
64 
65     arm::pipe::ITimelineDecoder::Label inference;
66     inference.m_Guid = uint64_t(15026600058430441282U);
67     inference.m_Name = "inference";
68     timelineDecoder.CreateLabel(inference);
69 
70     arm::pipe::ITimelineDecoder::Label workload_execution;
71     workload_execution.m_Guid = uint64_t(10172155312650606003U);
72     workload_execution.m_Name = "workload_execution";
73     timelineDecoder.CreateLabel(workload_execution);
74 
75     arm::pipe::ITimelineDecoder::EventClass eventClass1;
76     eventClass1.m_Guid = uint64_t(17170418158534996719U);
77     timelineDecoder.CreateEventClass(eventClass1);
78 
79     arm::pipe::ITimelineDecoder::EventClass eventClass2;
80     eventClass2.m_Guid = uint64_t(10812061579584851344U);
81     timelineDecoder.CreateEventClass(eventClass2);
82 
83     arm::pipe::ITimelineDecoder::Entity entity6;
84     entity6.m_Guid = uint64_t(6);
85     timelineDecoder.CreateEntity(entity6);
86 
87     arm::pipe::ITimelineDecoder::Relationship relationship7;
88     relationship7.m_Guid = uint64_t(7);
89     relationship7.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
90     relationship7.m_HeadGuid = uint64_t(6);
91     relationship7.m_TailGuid = uint64_t(16862199137063532871U);
92     timelineDecoder.CreateRelationship(relationship7);
93 
94     arm::pipe::ITimelineDecoder::Relationship relationship8;
95     relationship8.m_Guid = uint64_t(8);
96     relationship8.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
97     relationship8.m_HeadGuid = uint64_t(7);
98     relationship8.m_TailGuid = uint64_t(14196220359693045352U);
99     timelineDecoder.CreateRelationship(relationship8);
100 
101     // Adding normalization layer
102     arm::pipe::ITimelineDecoder::Entity entity0;
103     entity0.m_Guid = uint64_t(0);
104     timelineDecoder.CreateEntity(entity0);
105 
106     arm::pipe::ITimelineDecoder::Label input;
107     input.m_Guid = uint64_t(18179123836411086572U);
108     input.m_Name = "input";
109     timelineDecoder.CreateLabel(input);
110 
111     arm::pipe::ITimelineDecoder::Relationship relationship9;
112     relationship9.m_Guid = uint64_t(9);
113     relationship9.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
114     relationship9.m_HeadGuid = uint64_t(0);
115     relationship9.m_TailGuid = uint64_t(18179123836411086572U);
116     timelineDecoder.CreateRelationship(relationship9);
117 
118     arm::pipe::ITimelineDecoder::Relationship relationship10;
119     relationship10.m_Guid = uint64_t(10);
120     relationship10.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
121     relationship10.m_HeadGuid = uint64_t(9);
122     relationship10.m_TailGuid = uint64_t(10420554295983197538U);
123     timelineDecoder.CreateRelationship(relationship10);
124 
125     arm::pipe::ITimelineDecoder::Relationship relationship11;
126     relationship11.m_Guid = uint64_t(11);
127     relationship11.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
128     relationship11.m_HeadGuid = uint64_t(0);
129     relationship11.m_TailGuid = uint64_t(14761340794127440397U);
130     timelineDecoder.CreateRelationship(relationship11);
131 
132     arm::pipe::ITimelineDecoder::Relationship relationship12;
133     relationship12.m_Guid = uint64_t(12);
134     relationship12.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
135     relationship12.m_HeadGuid = uint64_t(11);
136     relationship12.m_TailGuid = uint64_t(14196220359693045352U);
137     timelineDecoder.CreateRelationship(relationship12);
138 
139     arm::pipe::ITimelineDecoder::Relationship relationship13;
140     relationship13.m_Guid = uint64_t(13);
141     relationship13.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
142     relationship13.m_HeadGuid = uint64_t(6);
143     relationship13.m_TailGuid = uint64_t(0);
144     timelineDecoder.CreateRelationship(relationship13);
145 
146 
147     // Adding normalization layer
148     arm::pipe::ITimelineDecoder::Entity entity1;
149     entity1.m_Guid = uint64_t(1);
150     timelineDecoder.CreateEntity(entity1);
151 
152     arm::pipe::ITimelineDecoder::Label normalization;
153     normalization.m_Guid = uint64_t(15955949569988957863U);
154     normalization.m_Name = "normalization";
155     timelineDecoder.CreateLabel(normalization);
156 
157     arm::pipe::ITimelineDecoder::Relationship relationship14;
158     relationship14.m_Guid = uint64_t(14);
159     relationship14.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
160     relationship14.m_HeadGuid = uint64_t(1);
161     relationship14.m_TailGuid = uint64_t(15955949569988957863U);
162     timelineDecoder.CreateRelationship(relationship14);
163 
164     arm::pipe::ITimelineDecoder::Relationship relationship15;
165     relationship15.m_Guid = uint64_t(15);
166     relationship15.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
167     relationship15.m_HeadGuid = uint64_t(14);
168     relationship15.m_TailGuid = uint64_t(10420554295983197538U);
169     timelineDecoder.CreateRelationship(relationship15);
170 
171     arm::pipe::ITimelineDecoder::Relationship relationship16;
172     relationship16.m_Guid = uint64_t(16);
173     relationship16.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
174     relationship16.m_HeadGuid = uint64_t(1);
175     relationship16.m_TailGuid = uint64_t(14761340794127440397U);
176     timelineDecoder.CreateRelationship(relationship16);
177 
178     arm::pipe::ITimelineDecoder::Relationship relationship17;
179     relationship17.m_Guid = uint64_t(17);
180     relationship17.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
181     relationship17.m_HeadGuid = uint64_t(16);
182     relationship17.m_TailGuid = uint64_t(14196220359693045352U);
183     timelineDecoder.CreateRelationship(relationship17);
184 
185     arm::pipe::ITimelineDecoder::Relationship relationship18;
186     relationship18.m_Guid = uint64_t(18);
187     relationship18.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
188     relationship18.m_HeadGuid = uint64_t(6);
189     relationship18.m_TailGuid = uint64_t(1);
190     timelineDecoder.CreateRelationship(relationship18);
191 
192     arm::pipe::ITimelineDecoder::Relationship relationship19;
193     relationship19.m_Guid = uint64_t(19);
194     relationship19.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
195     relationship19.m_HeadGuid = uint64_t(0);
196     relationship19.m_TailGuid = uint64_t(1);
197     timelineDecoder.CreateRelationship(relationship19);
198 
199     arm::pipe::ITimelineDecoder::Relationship relationship20;
200     relationship20.m_Guid = uint64_t(20);
201     relationship20.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
202     relationship20.m_HeadGuid = uint64_t(19);
203     relationship20.m_TailGuid = uint64_t(15733717748792475675U);
204     timelineDecoder.CreateRelationship(relationship20);
205 
206     arm::pipe::ITimelineDecoder::Relationship relationship21;
207     relationship21.m_Guid = uint64_t(21);
208     relationship21.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
209     relationship21.m_HeadGuid = uint64_t(20);
210     relationship21.m_TailGuid = uint64_t(14196220359693045352U);
211     timelineDecoder.CreateRelationship(relationship21);
212 
213 
214     arm::pipe::ITimelineDecoder::Entity entity22;
215     entity22.m_Guid = uint64_t(22);
216     timelineDecoder.CreateEntity(entity22);
217 
218     arm::pipe::ITimelineDecoder::Relationship relationship23;
219     relationship23.m_Guid = uint64_t(23);
220     relationship23.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
221     relationship23.m_HeadGuid = uint64_t(22);
222     relationship23.m_TailGuid = uint64_t(15704252740552608110U);
223     timelineDecoder.CreateRelationship(relationship23);
224 
225     arm::pipe::ITimelineDecoder::Relationship relationship24;
226     relationship24.m_Guid = uint64_t(24);
227     relationship24.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
228     relationship24.m_HeadGuid = uint64_t(23);
229     relationship24.m_TailGuid = uint64_t(14196220359693045352U);
230     timelineDecoder.CreateRelationship(relationship24);
231 
232 
233     arm::pipe::ITimelineDecoder::Label CpuRef;
234     CpuRef.m_Guid = uint64_t(9690680943817437852U);
235     CpuRef.m_Name = "CpuRef";
236     timelineDecoder.CreateLabel(CpuRef);
237 
238 
239     arm::pipe::ITimelineDecoder::Relationship relationship25;
240     relationship25.m_Guid = uint64_t(25);
241     relationship25.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
242     relationship25.m_HeadGuid = uint64_t(22);
243     relationship25.m_TailGuid = uint64_t(9690680943817437852U);
244     timelineDecoder.CreateRelationship(relationship25);
245 
246     arm::pipe::ITimelineDecoder::Relationship relationship26;
247     relationship26.m_Guid = uint64_t(26);
248     relationship26.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
249     relationship26.m_HeadGuid = uint64_t(25);
250     relationship26.m_TailGuid = uint64_t(10874037804557439415U);
251     timelineDecoder.CreateRelationship(relationship26);
252 
253     arm::pipe::ITimelineDecoder::Relationship relationship27;
254     relationship27.m_Guid = uint64_t(27);
255     relationship27.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink   ;
256     relationship27.m_HeadGuid = uint64_t(1);
257     relationship27.m_TailGuid = uint64_t(22);
258     timelineDecoder.CreateRelationship(relationship27);
259 
260     // Adding output layer
261     arm::pipe::ITimelineDecoder::Entity entity2;
262     entity2.m_Guid = uint64_t(2);
263     timelineDecoder.CreateEntity(entity2);
264 
265     arm::pipe::ITimelineDecoder::Label output;
266     output.m_Guid = uint64_t(18419179028513879730U);
267     output.m_Name = "output";
268     timelineDecoder.CreateLabel(output);
269 
270     arm::pipe::ITimelineDecoder::Relationship relationship28;
271     relationship28.m_Guid = uint64_t(28);
272     relationship28.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
273     relationship28.m_HeadGuid = uint64_t(2);
274     relationship28.m_TailGuid = uint64_t(18419179028513879730U);
275     timelineDecoder.CreateRelationship(relationship28);
276 
277     arm::pipe::ITimelineDecoder::Relationship relationship29;
278     relationship29.m_Guid = uint64_t(29);
279     relationship29.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
280     relationship29.m_HeadGuid = uint64_t(28);
281     relationship29.m_TailGuid = uint64_t(10420554295983197538U);
282     timelineDecoder.CreateRelationship(relationship29);
283 
284     arm::pipe::ITimelineDecoder::Relationship relationship30;
285     relationship30.m_Guid = uint64_t(30);
286     relationship30.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
287     relationship30.m_HeadGuid = uint64_t(2);
288     relationship30.m_TailGuid = uint64_t(14761340794127440397U);
289     timelineDecoder.CreateRelationship(relationship30);
290 
291     arm::pipe::ITimelineDecoder::Relationship relationship31;
292     relationship31.m_Guid = uint64_t(31);
293     relationship31.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
294     relationship31.m_HeadGuid = uint64_t(30);
295     relationship31.m_TailGuid = uint64_t(14196220359693045352U);
296     timelineDecoder.CreateRelationship(relationship31);
297 
298     arm::pipe::ITimelineDecoder::Relationship relationship32;
299     relationship32.m_Guid = uint64_t(32);
300     relationship32.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
301     relationship32.m_HeadGuid = uint64_t(6);
302     relationship32.m_TailGuid = uint64_t(2);
303     timelineDecoder.CreateRelationship(relationship32);
304 
305     arm::pipe::ITimelineDecoder::Relationship relationship33;
306     relationship33.m_Guid = uint64_t(33);
307     relationship33.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
308     relationship33.m_HeadGuid = uint64_t(1);
309     relationship33.m_TailGuid = uint64_t(2);
310     timelineDecoder.CreateRelationship(relationship33);
311 
312     arm::pipe::ITimelineDecoder::Relationship relationship34;
313     relationship34.m_Guid = uint64_t(34);
314     relationship34.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
315     relationship34.m_HeadGuid = uint64_t(33);
316     relationship34.m_TailGuid = uint64_t(15733717748792475675U);
317     timelineDecoder.CreateRelationship(relationship34);
318 
319     arm::pipe::ITimelineDecoder::Relationship relationship35;
320     relationship35.m_Guid = uint64_t(35);
321     relationship35.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
322     relationship35.m_HeadGuid = uint64_t(34);
323     relationship35.m_TailGuid = uint64_t(14196220359693045352U);
324     timelineDecoder.CreateRelationship(relationship35);
325 
326 
327     arm::pipe::ITimelineDecoder::Entity entity36;
328     entity36.m_Guid = uint64_t(36);
329     timelineDecoder.CreateEntity(entity36);
330 
331     arm::pipe::ITimelineDecoder::Relationship relationship37;
332     relationship37.m_Guid = uint64_t(37);
333     relationship37.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
334     relationship37.m_HeadGuid = uint64_t(36);
335     relationship37.m_TailGuid = uint64_t(15704252740552608110U);
336     timelineDecoder.CreateRelationship(relationship37);
337 
338     arm::pipe::ITimelineDecoder::Relationship relationship38;
339     relationship38.m_Guid = uint64_t(38);
340     relationship38.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
341     relationship38.m_HeadGuid = uint64_t(37);
342     relationship38.m_TailGuid = uint64_t(14196220359693045352U);
343     timelineDecoder.CreateRelationship(relationship38);
344 
345     arm::pipe::ITimelineDecoder::Relationship relationship39;
346     relationship39.m_Guid = uint64_t(39);
347     relationship39.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
348     relationship39.m_HeadGuid = uint64_t(36);
349     relationship39.m_TailGuid = uint64_t(9690680943817437852U);
350     timelineDecoder.CreateRelationship(relationship39);
351 
352     arm::pipe::ITimelineDecoder::Relationship relationship40;
353     relationship40.m_Guid = uint64_t(40);
354     relationship40.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
355     relationship40.m_HeadGuid = uint64_t(39);
356     relationship40.m_TailGuid = uint64_t(10874037804557439415U);
357     timelineDecoder.CreateRelationship(relationship40);
358 
359     arm::pipe::ITimelineDecoder::Relationship relationship41;
360     relationship41.m_Guid = uint64_t(41);
361     relationship41.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
362     relationship41.m_HeadGuid = uint64_t(0);
363     relationship41.m_TailGuid = uint64_t(36);
364     timelineDecoder.CreateRelationship(relationship41);
365 
366 
367     arm::pipe::ITimelineDecoder::Entity entity42;
368     entity42.m_Guid = uint64_t(42);
369     timelineDecoder.CreateEntity(entity42);
370 
371     arm::pipe::ITimelineDecoder::Relationship relationship43;
372     relationship43.m_Guid = uint64_t(43);
373     relationship43.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
374     relationship43.m_HeadGuid = uint64_t(42);
375     relationship43.m_TailGuid = uint64_t(15704252740552608110U);
376     timelineDecoder.CreateRelationship(relationship43);
377 
378     arm::pipe::ITimelineDecoder::Relationship relationship44;
379     relationship44.m_Guid = uint64_t(44);
380     relationship44.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
381     relationship44.m_HeadGuid = uint64_t(43);
382     relationship44.m_TailGuid = uint64_t(14196220359693045352U);
383     timelineDecoder.CreateRelationship(relationship44);
384 
385     arm::pipe::ITimelineDecoder::Relationship relationship45;
386     relationship45.m_Guid = uint64_t(45);
387     relationship45.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
388     relationship45.m_HeadGuid = uint64_t(42);
389     relationship45.m_TailGuid = uint64_t(9690680943817437852U);
390     timelineDecoder.CreateRelationship(relationship45);
391 
392     arm::pipe::ITimelineDecoder::Relationship relationship46;
393     relationship46.m_Guid = uint64_t(46);
394     relationship46.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
395     relationship46.m_HeadGuid = uint64_t(45);
396     relationship46.m_TailGuid = uint64_t(10874037804557439415U);
397     timelineDecoder.CreateRelationship(relationship46);
398 
399     arm::pipe::ITimelineDecoder::Relationship relationship47;
400     relationship47.m_Guid = uint64_t(47);
401     relationship47.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
402     relationship47.m_HeadGuid = uint64_t(2);
403     relationship47.m_TailGuid = uint64_t(42);
404     timelineDecoder.CreateRelationship(relationship47);
405 
406     arm::pipe::ITimelineDecoder::Entity entity48;
407     entity48.m_Guid = uint64_t(48);
408     timelineDecoder.CreateEntity(entity48);
409 
410     arm::pipe::ITimelineDecoder::Relationship relationship49;
411     relationship49.m_Guid = uint64_t(49);
412     relationship49.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
413     relationship49.m_HeadGuid = uint64_t(48);
414     relationship49.m_TailGuid = uint64_t(15026600058430441282U);
415     timelineDecoder.CreateRelationship(relationship49);
416 
417     arm::pipe::ITimelineDecoder::Relationship relationship50;
418     relationship50.m_Guid = uint64_t(50);
419     relationship50.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
420     relationship50.m_HeadGuid = uint64_t(49);
421     relationship50.m_TailGuid = uint64_t(14196220359693045352U);
422     timelineDecoder.CreateRelationship(relationship50);
423 
424     arm::pipe::ITimelineDecoder::Relationship relationship51;
425     relationship51.m_Guid = uint64_t(51);
426     relationship51.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
427     relationship51.m_HeadGuid = uint64_t(6);
428     relationship51.m_TailGuid = uint64_t(48);
429     timelineDecoder.CreateRelationship(relationship51);
430 
431     arm::pipe::ITimelineDecoder::Relationship relationship53;
432     relationship53.m_Guid = uint64_t(53);
433     relationship53.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
434     relationship53.m_HeadGuid = uint64_t(48);
435     relationship53.m_TailGuid = uint64_t(52);
436     timelineDecoder.CreateRelationship(relationship53);
437 
438     arm::pipe::ITimelineDecoder::Relationship relationship54;
439     relationship54.m_Guid = uint64_t(54);
440     relationship54.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
441     relationship54.m_HeadGuid = uint64_t(52);
442     relationship54.m_TailGuid = uint64_t(17170418158534996719U);
443     timelineDecoder.CreateRelationship(relationship54);
444 
445 
446     arm::pipe::ITimelineDecoder::Entity entity55;
447     entity55.m_Guid = uint64_t(55);
448     timelineDecoder.CreateEntity(entity55);
449 
450     arm::pipe::ITimelineDecoder::Relationship relationship56;
451     relationship56.m_Guid = uint64_t(56);
452     relationship56.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
453     relationship56.m_HeadGuid = uint64_t(55);
454     relationship56.m_TailGuid = uint64_t(10172155312650606003U);
455     timelineDecoder.CreateRelationship(relationship56);
456 
457     arm::pipe::ITimelineDecoder::Relationship relationship57;
458     relationship57.m_Guid = uint64_t(57);
459     relationship57.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
460     relationship57.m_HeadGuid = uint64_t(56);
461     relationship57.m_TailGuid = uint64_t(14196220359693045352U);
462     timelineDecoder.CreateRelationship(relationship57);
463 
464     arm::pipe::ITimelineDecoder::Relationship relationship58;
465     relationship58.m_Guid = uint64_t(58);
466     relationship58.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
467     relationship58.m_HeadGuid = uint64_t(48);
468     relationship58.m_TailGuid = uint64_t(55);
469     timelineDecoder.CreateRelationship(relationship58);
470 
471     arm::pipe::ITimelineDecoder::Relationship relationship59;
472     relationship59.m_Guid = uint64_t(59);
473     relationship59.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
474     relationship59.m_HeadGuid = uint64_t(36);
475     relationship59.m_TailGuid = uint64_t(55);
476     timelineDecoder.CreateRelationship(relationship59);
477 
478     arm::pipe::ITimelineDecoder::Event event60;
479     event60.m_Guid = uint64_t(60);
480     event60.m_TimeStamp = uint64_t(96557081111036);
481     event60.m_ThreadId = uint64_t(140522431862592);
482     timelineDecoder.CreateEvent(event60);
483 
484     arm::pipe::ITimelineDecoder::Relationship relationship61;
485     relationship61.m_Guid = uint64_t(61);
486     relationship61.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
487     relationship61.m_HeadGuid = uint64_t(55);
488     relationship61.m_TailGuid = uint64_t(60);
489     timelineDecoder.CreateRelationship(relationship61);
490 
491     arm::pipe::ITimelineDecoder::Relationship relationship62;
492     relationship62.m_Guid = uint64_t(62);
493     relationship62.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
494     relationship62.m_HeadGuid = uint64_t(60);
495     relationship62.m_TailGuid = uint64_t(17170418158534996719U);
496     timelineDecoder.CreateRelationship(relationship62);
497 
498     arm::pipe::ITimelineDecoder::Event event63;
499     event63.m_Guid = uint64_t(63);
500     event63.m_TimeStamp = uint64_t(96557081149730);
501     event63.m_ThreadId = uint64_t(140522431862592);
502     timelineDecoder.CreateEvent(event63);
503 
504     arm::pipe::ITimelineDecoder::Relationship relationship64;
505     relationship64.m_Guid = uint64_t(61);
506     relationship64.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
507     relationship64.m_HeadGuid = uint64_t(55);
508     relationship64.m_TailGuid = uint64_t(63);
509     timelineDecoder.CreateRelationship(relationship64);
510 
511     arm::pipe::ITimelineDecoder::Relationship relationship65;
512     relationship65.m_Guid = uint64_t(62);
513     relationship65.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
514     relationship65.m_HeadGuid = uint64_t(63);
515     relationship65.m_TailGuid = uint64_t(10812061579584851344U);
516     timelineDecoder.CreateRelationship(relationship65);
517 
518 
519     arm::pipe::ITimelineDecoder::Entity entity66;
520     entity66.m_Guid = uint64_t(66);
521     timelineDecoder.CreateEntity(entity66);
522 
523     arm::pipe::ITimelineDecoder::Relationship relationship67;
524     relationship67.m_Guid = uint64_t(67);
525     relationship67.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
526     relationship67.m_HeadGuid = uint64_t(66);
527     relationship67.m_TailGuid = uint64_t(10172155312650606003U);
528     timelineDecoder.CreateRelationship(relationship67);
529 
530     arm::pipe::ITimelineDecoder::Relationship relationship68;
531     relationship68.m_Guid = uint64_t(68);
532     relationship68.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
533     relationship68.m_HeadGuid = uint64_t(67);
534     relationship68.m_TailGuid = uint64_t(14196220359693045352U);
535     timelineDecoder.CreateRelationship(relationship68);
536 
537     arm::pipe::ITimelineDecoder::Relationship relationship69;
538     relationship69.m_Guid = uint64_t(69);
539     relationship69.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
540     relationship69.m_HeadGuid = uint64_t(48);
541     relationship69.m_TailGuid = uint64_t(66);
542     timelineDecoder.CreateRelationship(relationship69);
543 
544     arm::pipe::ITimelineDecoder::Relationship relationship70;
545     relationship70.m_Guid = uint64_t(70);
546     relationship70.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
547     relationship70.m_HeadGuid = uint64_t(22);
548     relationship70.m_TailGuid = uint64_t(66);
549     timelineDecoder.CreateRelationship(relationship70);
550 
551 
552     arm::pipe::ITimelineDecoder::Event event71;
553     event71.m_Guid = uint64_t(71);
554     event71.m_TimeStamp = uint64_t(96557081156464);
555     event71.m_ThreadId = uint64_t(140522431862592);
556     timelineDecoder.CreateEvent(event71);
557 
558     arm::pipe::ITimelineDecoder::Relationship relationship72;
559     relationship72.m_Guid = uint64_t(72);
560     relationship72.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
561     relationship72.m_HeadGuid = uint64_t(66);
562     relationship72.m_TailGuid = uint64_t(71);
563     timelineDecoder.CreateRelationship(relationship72);
564 
565     arm::pipe::ITimelineDecoder::Relationship relationship73;
566     relationship73.m_Guid = uint64_t(73);
567     relationship73.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
568     relationship73.m_HeadGuid = uint64_t(71);
569     relationship73.m_TailGuid = uint64_t(17170418158534996719U);
570     timelineDecoder.CreateRelationship(relationship73);
571 
572     arm::pipe::ITimelineDecoder::Event event74;
573     event74.m_Guid = uint64_t(74);
574     event74.m_TimeStamp = uint64_t(96557081220825);
575     event74.m_ThreadId = uint64_t(140522431862592);
576     timelineDecoder.CreateEvent(event74);
577 
578     arm::pipe::ITimelineDecoder::Relationship relationship75;
579     relationship75.m_Guid = uint64_t(75);
580     relationship75.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
581     relationship75.m_HeadGuid = uint64_t(66);
582     relationship75.m_TailGuid = uint64_t(74);
583     timelineDecoder.CreateRelationship(relationship75);
584 
585     arm::pipe::ITimelineDecoder::Relationship relationship76;
586     relationship76.m_Guid = uint64_t(76);
587     relationship76.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
588     relationship76.m_HeadGuid = uint64_t(74);
589     relationship76.m_TailGuid = uint64_t(10812061579584851344U);
590     timelineDecoder.CreateRelationship(relationship76);
591 
592     arm::pipe::ITimelineDecoder::Entity entity77;
593     entity77.m_Guid = uint64_t(77);
594     timelineDecoder.CreateEntity(entity77);
595 
596     arm::pipe::ITimelineDecoder::Relationship relationship78;
597     relationship78.m_Guid = uint64_t(78);
598     relationship78.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
599     relationship78.m_HeadGuid = uint64_t(77);
600     relationship78.m_TailGuid = uint64_t(10172155312650606003U);
601     timelineDecoder.CreateRelationship(relationship78);
602 
603     arm::pipe::ITimelineDecoder::Relationship relationship79;
604     relationship79.m_Guid = uint64_t(79);
605     relationship79.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink;
606     relationship79.m_HeadGuid = uint64_t(78);
607     relationship79.m_TailGuid = uint64_t(14196220359693045352U);
608     timelineDecoder.CreateRelationship(relationship79);
609 
610     arm::pipe::ITimelineDecoder::Relationship relationship80;
611     relationship80.m_Guid = uint64_t(80);
612     relationship80.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
613     relationship80.m_HeadGuid = uint64_t(48);
614     relationship80.m_TailGuid = uint64_t(77);
615     timelineDecoder.CreateRelationship(relationship80);
616 
617     arm::pipe::ITimelineDecoder::Relationship relationship81;
618     relationship81.m_Guid = uint64_t(81);
619     relationship81.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink;
620     relationship81.m_HeadGuid = uint64_t(42);
621     relationship81.m_TailGuid = uint64_t(77);
622     timelineDecoder.CreateRelationship(relationship81);
623 
624     arm::pipe::ITimelineDecoder::Event event82;
625     event82.m_Guid = uint64_t(82);
626     event82.m_TimeStamp = uint64_t(96557081227643);
627     event82.m_ThreadId = uint64_t(140522431862592);
628     timelineDecoder.CreateEvent(event82);
629 
630     arm::pipe::ITimelineDecoder::Relationship relationship83;
631     relationship83.m_Guid = uint64_t(83);
632     relationship83.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
633     relationship83.m_HeadGuid = uint64_t(77);
634     relationship83.m_TailGuid = uint64_t(82);
635     timelineDecoder.CreateRelationship(relationship83);
636 
637     arm::pipe::ITimelineDecoder::Relationship relationship84;
638     relationship84.m_Guid = uint64_t(84);
639     relationship84.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
640     relationship84.m_HeadGuid = uint64_t(82);
641     relationship84.m_TailGuid = uint64_t(17170418158534996719U);
642     timelineDecoder.CreateRelationship(relationship84);
643 
644     arm::pipe::ITimelineDecoder::Event event85;
645     event85.m_Guid = uint64_t(85);
646     event85.m_TimeStamp = uint64_t(96557081240332);
647     event85.m_ThreadId = uint64_t(140522431862592);
648     timelineDecoder.CreateEvent(event85);
649 
650     arm::pipe::ITimelineDecoder::Relationship relationship86;
651     relationship86.m_Guid = uint64_t(86);
652     relationship86.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
653     relationship86.m_HeadGuid = uint64_t(77);
654     relationship86.m_TailGuid = uint64_t(85);
655     timelineDecoder.CreateRelationship(relationship86);
656 
657     arm::pipe::ITimelineDecoder::Relationship relationship87;
658     relationship87.m_Guid = uint64_t(87);
659     relationship87.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
660     relationship87.m_HeadGuid = uint64_t(85);
661     relationship87.m_TailGuid = uint64_t(10812061579584851344U);
662     timelineDecoder.CreateRelationship(relationship87);
663 
664     arm::pipe::ITimelineDecoder::Event event88;
665     event88.m_Guid = uint64_t(88);
666     event88.m_TimeStamp = uint64_t(96557081243146);
667     event88.m_ThreadId = uint64_t(140522431862592);
668     timelineDecoder.CreateEvent(event88);
669 
670     arm::pipe::ITimelineDecoder::Relationship relationship89;
671     relationship89.m_Guid = uint64_t(89);
672     relationship89.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink;
673     relationship89.m_HeadGuid = uint64_t(48);
674     relationship89.m_TailGuid = uint64_t(88);
675     timelineDecoder.CreateRelationship(relationship89);
676 
677     arm::pipe::ITimelineDecoder::Relationship relationship90;
678     relationship90.m_Guid = uint64_t(90);
679     relationship90.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink;
680     relationship90.m_HeadGuid = uint64_t(88);
681     relationship90.m_TailGuid = uint64_t(10812061579584851344U);
682     timelineDecoder.CreateRelationship(relationship90);
683 }
684 
685 TEST_CASE("JSONTimelineDecoderTestStructure")
686 {
687     JSONTimelineDecoder timelineDecoder;
688     RunSimpleModelThroughDecoder(timelineDecoder);
689 
690     JSONTimelineDecoder::Model model = timelineDecoder.GetModel();
691     CHECK(model.jsonEntities.size() == 20);
692     JSONTimelineDecoder::JSONEntity rootEntity = model.jsonEntities.at(6);
693     CHECK(rootEntity.childEntities.size() == 4);
694 
695     // Testing input layer model
696     JSONTimelineDecoder::JSONEntity entity0 = model.jsonEntities.at(rootEntity.childEntities[0]);
697     CHECK(entity0.GetName() == "input");
698     CHECK(entity0.GetType() == "layer");
699 
700     CHECK(entity0.childEntities.size() == 1);
701     JSONTimelineDecoder::JSONEntity input_workload_entity = model.jsonEntities.at(entity0.childEntities[0]);
702     CHECK(input_workload_entity.childEntities.size() == 1);
703     CHECK(input_workload_entity.GetType() == "workload");
704     CHECK(input_workload_entity.extendedData.at("backendId") == "CpuRef");
705 
706     JSONTimelineDecoder::JSONEntity input_workload_execution_entity = model.jsonEntities
707             .at(input_workload_entity.childEntities[0]);
708     CHECK(input_workload_execution_entity.childEntities.size() == 2);
709     CHECK(input_workload_execution_entity.GetType() == "workload_execution");
710 
711     JSONTimelineDecoder::JSONEntity input_workload_execution_event0 = model.jsonEntities
712             .at(input_workload_execution_entity.childEntities[0]);
713     CHECK(input_workload_execution_event0.GetType() == "Event");
714     CHECK(input_workload_execution_event0.childEntities.size() == 0);
715     CHECK(model.events.at(input_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0));
716     CHECK(model.events.at(input_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0));
717 
718     JSONTimelineDecoder::JSONEntity input_workload_execution_event1 = model.jsonEntities
719             .at(input_workload_execution_entity.childEntities[1]);
720     CHECK(input_workload_execution_event0.GetType() == "Event");
721     CHECK(input_workload_execution_event1.childEntities.size() == 0);
722     CHECK(model.events.at(input_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0));
723     CHECK(model.events.at(input_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0));
724 
725     // Testing normalization layer model
726     JSONTimelineDecoder::JSONEntity entity1 = model.jsonEntities.at(rootEntity.childEntities[1]);
727     CHECK(entity1.GetName() == "normalization");
728     CHECK(entity1.GetType() == "layer");
729 
730     JSONTimelineDecoder::JSONEntity normalization_workload_entity = model.jsonEntities
731             .at(entity1.childEntities[0]);
732     CHECK(normalization_workload_entity.GetType() == "workload");
733     CHECK(normalization_workload_entity.extendedData.at("backendId") == "CpuRef");
734 
735     JSONTimelineDecoder::JSONEntity normalization_workload_execution_entity = model.jsonEntities
736             .at(normalization_workload_entity.childEntities[0]);
737     CHECK(normalization_workload_execution_entity.GetType() == "workload_execution");
738 
739     JSONTimelineDecoder::JSONEntity normalization_workload_execution_event0 = model.jsonEntities
740             .at(normalization_workload_execution_entity.childEntities[0]);
741     CHECK(normalization_workload_execution_event0.GetType() == "Event");
742     CHECK(model.events.at(normalization_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0));
743     CHECK(model.events.at(normalization_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0));
744 
745     JSONTimelineDecoder::JSONEntity normalization_workload_execution_event1 = model.jsonEntities
746             .at(normalization_workload_execution_entity.childEntities[1]);
747     CHECK(normalization_workload_execution_event1.GetType() == "Event");
748     CHECK(model.events.at(normalization_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0));
749     CHECK(model.events.at(normalization_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0));
750 
751     // Testing output layer model
752     JSONTimelineDecoder::JSONEntity entity2 = model.jsonEntities.at(rootEntity.childEntities[2]);
753     CHECK(entity2.GetName() == "output");
754     CHECK(entity2.GetType() == "layer");
755 
756     JSONTimelineDecoder::JSONEntity output_workload_entity = model.jsonEntities.at(entity2.childEntities[0]);
757     CHECK(output_workload_entity.GetType() == "workload");
758     CHECK(output_workload_entity.extendedData.at("backendId") == "CpuRef");
759 
760     JSONTimelineDecoder::JSONEntity output_workload_execution_entity = model.jsonEntities
761             .at(output_workload_entity.childEntities[0]);
762     CHECK(output_workload_execution_entity.GetType() == "workload_execution");
763 
764     JSONTimelineDecoder::JSONEntity output_workload_execution_event0 = model.jsonEntities
765             .at(output_workload_execution_entity.childEntities[0]);
766     CHECK(output_workload_execution_event0.GetType() == "Event");
767     CHECK(model.events.at(output_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0));
768     CHECK(model.events.at(output_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0));
769 
770     JSONTimelineDecoder::JSONEntity output_workload_execution_event1 = model.jsonEntities
771             .at(output_workload_execution_entity.childEntities[1]);
772     CHECK(output_workload_execution_event1.GetType() == "Event");
773     CHECK(model.events.at(output_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0));
774     CHECK(model.events.at(output_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0));
775 
776     JSONTimelineDecoder::JSONEntity entity48 =  model.jsonEntities.at(rootEntity.childEntities[3]);
777     CHECK(entity48.GetName() == "");
778     CHECK(entity48.GetType() == "inference");
779 }
780 
781 TEST_CASE("JSONTimelineDecoderTestJSON")
782 {
783     JSONTimelineDecoder timelineDecoder;
784     RunSimpleModelThroughDecoder(timelineDecoder);
785 
786     JSONTimelineDecoder::Model model = timelineDecoder.GetModel();
787     JSONTimelineDecoder::JSONEntity rootEntity = model.jsonEntities.at(6);
788 
789     std::string jsonString = timelineDecoder.GetJSONString(rootEntity);
790     CHECK(jsonString != "");
791     CHECK(jsonString.find("input_0: {")!=std::string::npos);
792     CHECK(jsonString.find("type: Measurement,\n"
793                                    "\t\t\tbackendId :CpuRef,")!=std::string::npos);
794     CHECK(jsonString.find("normalization_2: {")!=std::string::npos);
795     CHECK(jsonString.find("output_4: {")!=std::string::npos);
796 
797     // Create a temporary file to write Json output to
798     fs::path tempFile = armnnUtils::Filesystem::NamedTempFile("JSONTimelineDecoderTestJSON.json");
799     // open temp file
800     std::ofstream ofs{tempFile};
801     // tell the timeline decoder to print into our temp file (you could also use std::cout)
802     timelineDecoder.PrintJSON(rootEntity, ofs);
803     // close temp file
804     ofs.close();
805 
806     // Now everything in opposite order
807     fs::ifstream inFile;
808     //reopen the file this time for reading
809     inFile.open(tempFile);
810 
811     std::stringstream strStream;
812     strStream << inFile.rdbuf(); //read the file
813     inFile.close();
814     std::string outfileJson = strStream.str();
815 
816     CHECK(outfileJson != "");
817     CHECK(outfileJson.find("input_0: {")!=std::string::npos);
818     CHECK(outfileJson.find("type: Measurement,\n"
819                                 "\t\t\tbackendId :CpuRef,")!=std::string::npos);
820     CHECK(outfileJson.find("normalization_2: {")!=std::string::npos);
821     CHECK(outfileJson.find("output_4: {")!=std::string::npos);
822 
823     // Remove temporary file
824     fs::remove(tempFile);
825 }
826 }