// // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include #include #include #include #include #include TEST_SUITE("JSONTimelineDecoderTests") { using namespace armnn; using namespace timelinedecoder; void RunSimpleModelThroughDecoder(JSONTimelineDecoder& timelineDecoder) { /* * Building Simple model structure to test */ arm::pipe::ITimelineDecoder::Label name; name.m_Guid = uint64_t(10420554295983197538U); name.m_Name = "name"; timelineDecoder.CreateLabel(name); arm::pipe::ITimelineDecoder::Label type; type.m_Guid = uint64_t(14196220359693045352U); type.m_Name = "type"; timelineDecoder.CreateLabel(type); arm::pipe::ITimelineDecoder::Label index; index.m_Guid = uint64_t(13922236767355949814U); index.m_Name = "index"; timelineDecoder.CreateLabel(index); arm::pipe::ITimelineDecoder::Label backendId; backendId.m_Guid = uint64_t(10874037804557439415U); backendId.m_Name = "backendId"; timelineDecoder.CreateLabel(backendId); arm::pipe::ITimelineDecoder::Label layer; layer.m_Guid = uint64_t(14761340794127440397U); layer.m_Name = "layer"; timelineDecoder.CreateLabel(layer); arm::pipe::ITimelineDecoder::Label workload; workload.m_Guid = uint64_t(15704252740552608110U); workload.m_Name = "workload"; timelineDecoder.CreateLabel(workload); arm::pipe::ITimelineDecoder::Label network; network.m_Guid = uint64_t(16862199137063532871U); network.m_Name = "network"; timelineDecoder.CreateLabel(network); arm::pipe::ITimelineDecoder::Label connection; connection.m_Guid = uint64_t(15733717748792475675U); connection.m_Name = "connection"; timelineDecoder.CreateLabel(connection); arm::pipe::ITimelineDecoder::Label inference; inference.m_Guid = uint64_t(15026600058430441282U); inference.m_Name = "inference"; timelineDecoder.CreateLabel(inference); arm::pipe::ITimelineDecoder::Label workload_execution; workload_execution.m_Guid = uint64_t(10172155312650606003U); workload_execution.m_Name = "workload_execution"; timelineDecoder.CreateLabel(workload_execution); arm::pipe::ITimelineDecoder::EventClass eventClass1; eventClass1.m_Guid = uint64_t(17170418158534996719U); timelineDecoder.CreateEventClass(eventClass1); arm::pipe::ITimelineDecoder::EventClass eventClass2; eventClass2.m_Guid = uint64_t(10812061579584851344U); timelineDecoder.CreateEventClass(eventClass2); arm::pipe::ITimelineDecoder::Entity entity6; entity6.m_Guid = uint64_t(6); timelineDecoder.CreateEntity(entity6); arm::pipe::ITimelineDecoder::Relationship relationship7; relationship7.m_Guid = uint64_t(7); relationship7.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship7.m_HeadGuid = uint64_t(6); relationship7.m_TailGuid = uint64_t(16862199137063532871U); timelineDecoder.CreateRelationship(relationship7); arm::pipe::ITimelineDecoder::Relationship relationship8; relationship8.m_Guid = uint64_t(8); relationship8.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship8.m_HeadGuid = uint64_t(7); relationship8.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship8); // Adding normalization layer arm::pipe::ITimelineDecoder::Entity entity0; entity0.m_Guid = uint64_t(0); timelineDecoder.CreateEntity(entity0); arm::pipe::ITimelineDecoder::Label input; input.m_Guid = uint64_t(18179123836411086572U); input.m_Name = "input"; timelineDecoder.CreateLabel(input); arm::pipe::ITimelineDecoder::Relationship relationship9; relationship9.m_Guid = uint64_t(9); relationship9.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship9.m_HeadGuid = uint64_t(0); relationship9.m_TailGuid = uint64_t(18179123836411086572U); timelineDecoder.CreateRelationship(relationship9); arm::pipe::ITimelineDecoder::Relationship relationship10; relationship10.m_Guid = uint64_t(10); relationship10.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship10.m_HeadGuid = uint64_t(9); relationship10.m_TailGuid = uint64_t(10420554295983197538U); timelineDecoder.CreateRelationship(relationship10); arm::pipe::ITimelineDecoder::Relationship relationship11; relationship11.m_Guid = uint64_t(11); relationship11.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship11.m_HeadGuid = uint64_t(0); relationship11.m_TailGuid = uint64_t(14761340794127440397U); timelineDecoder.CreateRelationship(relationship11); arm::pipe::ITimelineDecoder::Relationship relationship12; relationship12.m_Guid = uint64_t(12); relationship12.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship12.m_HeadGuid = uint64_t(11); relationship12.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship12); arm::pipe::ITimelineDecoder::Relationship relationship13; relationship13.m_Guid = uint64_t(13); relationship13.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship13.m_HeadGuid = uint64_t(6); relationship13.m_TailGuid = uint64_t(0); timelineDecoder.CreateRelationship(relationship13); // Adding normalization layer arm::pipe::ITimelineDecoder::Entity entity1; entity1.m_Guid = uint64_t(1); timelineDecoder.CreateEntity(entity1); arm::pipe::ITimelineDecoder::Label normalization; normalization.m_Guid = uint64_t(15955949569988957863U); normalization.m_Name = "normalization"; timelineDecoder.CreateLabel(normalization); arm::pipe::ITimelineDecoder::Relationship relationship14; relationship14.m_Guid = uint64_t(14); relationship14.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship14.m_HeadGuid = uint64_t(1); relationship14.m_TailGuid = uint64_t(15955949569988957863U); timelineDecoder.CreateRelationship(relationship14); arm::pipe::ITimelineDecoder::Relationship relationship15; relationship15.m_Guid = uint64_t(15); relationship15.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship15.m_HeadGuid = uint64_t(14); relationship15.m_TailGuid = uint64_t(10420554295983197538U); timelineDecoder.CreateRelationship(relationship15); arm::pipe::ITimelineDecoder::Relationship relationship16; relationship16.m_Guid = uint64_t(16); relationship16.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship16.m_HeadGuid = uint64_t(1); relationship16.m_TailGuid = uint64_t(14761340794127440397U); timelineDecoder.CreateRelationship(relationship16); arm::pipe::ITimelineDecoder::Relationship relationship17; relationship17.m_Guid = uint64_t(17); relationship17.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship17.m_HeadGuid = uint64_t(16); relationship17.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship17); arm::pipe::ITimelineDecoder::Relationship relationship18; relationship18.m_Guid = uint64_t(18); relationship18.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship18.m_HeadGuid = uint64_t(6); relationship18.m_TailGuid = uint64_t(1); timelineDecoder.CreateRelationship(relationship18); arm::pipe::ITimelineDecoder::Relationship relationship19; relationship19.m_Guid = uint64_t(19); relationship19.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship19.m_HeadGuid = uint64_t(0); relationship19.m_TailGuid = uint64_t(1); timelineDecoder.CreateRelationship(relationship19); arm::pipe::ITimelineDecoder::Relationship relationship20; relationship20.m_Guid = uint64_t(20); relationship20.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship20.m_HeadGuid = uint64_t(19); relationship20.m_TailGuid = uint64_t(15733717748792475675U); timelineDecoder.CreateRelationship(relationship20); arm::pipe::ITimelineDecoder::Relationship relationship21; relationship21.m_Guid = uint64_t(21); relationship21.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship21.m_HeadGuid = uint64_t(20); relationship21.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship21); arm::pipe::ITimelineDecoder::Entity entity22; entity22.m_Guid = uint64_t(22); timelineDecoder.CreateEntity(entity22); arm::pipe::ITimelineDecoder::Relationship relationship23; relationship23.m_Guid = uint64_t(23); relationship23.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship23.m_HeadGuid = uint64_t(22); relationship23.m_TailGuid = uint64_t(15704252740552608110U); timelineDecoder.CreateRelationship(relationship23); arm::pipe::ITimelineDecoder::Relationship relationship24; relationship24.m_Guid = uint64_t(24); relationship24.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship24.m_HeadGuid = uint64_t(23); relationship24.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship24); arm::pipe::ITimelineDecoder::Label CpuRef; CpuRef.m_Guid = uint64_t(9690680943817437852U); CpuRef.m_Name = "CpuRef"; timelineDecoder.CreateLabel(CpuRef); arm::pipe::ITimelineDecoder::Relationship relationship25; relationship25.m_Guid = uint64_t(25); relationship25.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship25.m_HeadGuid = uint64_t(22); relationship25.m_TailGuid = uint64_t(9690680943817437852U); timelineDecoder.CreateRelationship(relationship25); arm::pipe::ITimelineDecoder::Relationship relationship26; relationship26.m_Guid = uint64_t(26); relationship26.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship26.m_HeadGuid = uint64_t(25); relationship26.m_TailGuid = uint64_t(10874037804557439415U); timelineDecoder.CreateRelationship(relationship26); arm::pipe::ITimelineDecoder::Relationship relationship27; relationship27.m_Guid = uint64_t(27); relationship27.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink ; relationship27.m_HeadGuid = uint64_t(1); relationship27.m_TailGuid = uint64_t(22); timelineDecoder.CreateRelationship(relationship27); // Adding output layer arm::pipe::ITimelineDecoder::Entity entity2; entity2.m_Guid = uint64_t(2); timelineDecoder.CreateEntity(entity2); arm::pipe::ITimelineDecoder::Label output; output.m_Guid = uint64_t(18419179028513879730U); output.m_Name = "output"; timelineDecoder.CreateLabel(output); arm::pipe::ITimelineDecoder::Relationship relationship28; relationship28.m_Guid = uint64_t(28); relationship28.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship28.m_HeadGuid = uint64_t(2); relationship28.m_TailGuid = uint64_t(18419179028513879730U); timelineDecoder.CreateRelationship(relationship28); arm::pipe::ITimelineDecoder::Relationship relationship29; relationship29.m_Guid = uint64_t(29); relationship29.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship29.m_HeadGuid = uint64_t(28); relationship29.m_TailGuid = uint64_t(10420554295983197538U); timelineDecoder.CreateRelationship(relationship29); arm::pipe::ITimelineDecoder::Relationship relationship30; relationship30.m_Guid = uint64_t(30); relationship30.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship30.m_HeadGuid = uint64_t(2); relationship30.m_TailGuid = uint64_t(14761340794127440397U); timelineDecoder.CreateRelationship(relationship30); arm::pipe::ITimelineDecoder::Relationship relationship31; relationship31.m_Guid = uint64_t(31); relationship31.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship31.m_HeadGuid = uint64_t(30); relationship31.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship31); arm::pipe::ITimelineDecoder::Relationship relationship32; relationship32.m_Guid = uint64_t(32); relationship32.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship32.m_HeadGuid = uint64_t(6); relationship32.m_TailGuid = uint64_t(2); timelineDecoder.CreateRelationship(relationship32); arm::pipe::ITimelineDecoder::Relationship relationship33; relationship33.m_Guid = uint64_t(33); relationship33.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship33.m_HeadGuid = uint64_t(1); relationship33.m_TailGuid = uint64_t(2); timelineDecoder.CreateRelationship(relationship33); arm::pipe::ITimelineDecoder::Relationship relationship34; relationship34.m_Guid = uint64_t(34); relationship34.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship34.m_HeadGuid = uint64_t(33); relationship34.m_TailGuid = uint64_t(15733717748792475675U); timelineDecoder.CreateRelationship(relationship34); arm::pipe::ITimelineDecoder::Relationship relationship35; relationship35.m_Guid = uint64_t(35); relationship35.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship35.m_HeadGuid = uint64_t(34); relationship35.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship35); arm::pipe::ITimelineDecoder::Entity entity36; entity36.m_Guid = uint64_t(36); timelineDecoder.CreateEntity(entity36); arm::pipe::ITimelineDecoder::Relationship relationship37; relationship37.m_Guid = uint64_t(37); relationship37.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship37.m_HeadGuid = uint64_t(36); relationship37.m_TailGuid = uint64_t(15704252740552608110U); timelineDecoder.CreateRelationship(relationship37); arm::pipe::ITimelineDecoder::Relationship relationship38; relationship38.m_Guid = uint64_t(38); relationship38.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship38.m_HeadGuid = uint64_t(37); relationship38.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship38); arm::pipe::ITimelineDecoder::Relationship relationship39; relationship39.m_Guid = uint64_t(39); relationship39.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship39.m_HeadGuid = uint64_t(36); relationship39.m_TailGuid = uint64_t(9690680943817437852U); timelineDecoder.CreateRelationship(relationship39); arm::pipe::ITimelineDecoder::Relationship relationship40; relationship40.m_Guid = uint64_t(40); relationship40.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship40.m_HeadGuid = uint64_t(39); relationship40.m_TailGuid = uint64_t(10874037804557439415U); timelineDecoder.CreateRelationship(relationship40); arm::pipe::ITimelineDecoder::Relationship relationship41; relationship41.m_Guid = uint64_t(41); relationship41.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship41.m_HeadGuid = uint64_t(0); relationship41.m_TailGuid = uint64_t(36); timelineDecoder.CreateRelationship(relationship41); arm::pipe::ITimelineDecoder::Entity entity42; entity42.m_Guid = uint64_t(42); timelineDecoder.CreateEntity(entity42); arm::pipe::ITimelineDecoder::Relationship relationship43; relationship43.m_Guid = uint64_t(43); relationship43.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship43.m_HeadGuid = uint64_t(42); relationship43.m_TailGuid = uint64_t(15704252740552608110U); timelineDecoder.CreateRelationship(relationship43); arm::pipe::ITimelineDecoder::Relationship relationship44; relationship44.m_Guid = uint64_t(44); relationship44.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship44.m_HeadGuid = uint64_t(43); relationship44.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship44); arm::pipe::ITimelineDecoder::Relationship relationship45; relationship45.m_Guid = uint64_t(45); relationship45.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship45.m_HeadGuid = uint64_t(42); relationship45.m_TailGuid = uint64_t(9690680943817437852U); timelineDecoder.CreateRelationship(relationship45); arm::pipe::ITimelineDecoder::Relationship relationship46; relationship46.m_Guid = uint64_t(46); relationship46.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship46.m_HeadGuid = uint64_t(45); relationship46.m_TailGuid = uint64_t(10874037804557439415U); timelineDecoder.CreateRelationship(relationship46); arm::pipe::ITimelineDecoder::Relationship relationship47; relationship47.m_Guid = uint64_t(47); relationship47.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship47.m_HeadGuid = uint64_t(2); relationship47.m_TailGuid = uint64_t(42); timelineDecoder.CreateRelationship(relationship47); arm::pipe::ITimelineDecoder::Entity entity48; entity48.m_Guid = uint64_t(48); timelineDecoder.CreateEntity(entity48); arm::pipe::ITimelineDecoder::Relationship relationship49; relationship49.m_Guid = uint64_t(49); relationship49.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship49.m_HeadGuid = uint64_t(48); relationship49.m_TailGuid = uint64_t(15026600058430441282U); timelineDecoder.CreateRelationship(relationship49); arm::pipe::ITimelineDecoder::Relationship relationship50; relationship50.m_Guid = uint64_t(50); relationship50.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship50.m_HeadGuid = uint64_t(49); relationship50.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship50); arm::pipe::ITimelineDecoder::Relationship relationship51; relationship51.m_Guid = uint64_t(51); relationship51.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship51.m_HeadGuid = uint64_t(6); relationship51.m_TailGuid = uint64_t(48); timelineDecoder.CreateRelationship(relationship51); arm::pipe::ITimelineDecoder::Relationship relationship53; relationship53.m_Guid = uint64_t(53); relationship53.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship53.m_HeadGuid = uint64_t(48); relationship53.m_TailGuid = uint64_t(52); timelineDecoder.CreateRelationship(relationship53); arm::pipe::ITimelineDecoder::Relationship relationship54; relationship54.m_Guid = uint64_t(54); relationship54.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship54.m_HeadGuid = uint64_t(52); relationship54.m_TailGuid = uint64_t(17170418158534996719U); timelineDecoder.CreateRelationship(relationship54); arm::pipe::ITimelineDecoder::Entity entity55; entity55.m_Guid = uint64_t(55); timelineDecoder.CreateEntity(entity55); arm::pipe::ITimelineDecoder::Relationship relationship56; relationship56.m_Guid = uint64_t(56); relationship56.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship56.m_HeadGuid = uint64_t(55); relationship56.m_TailGuid = uint64_t(10172155312650606003U); timelineDecoder.CreateRelationship(relationship56); arm::pipe::ITimelineDecoder::Relationship relationship57; relationship57.m_Guid = uint64_t(57); relationship57.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship57.m_HeadGuid = uint64_t(56); relationship57.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship57); arm::pipe::ITimelineDecoder::Relationship relationship58; relationship58.m_Guid = uint64_t(58); relationship58.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship58.m_HeadGuid = uint64_t(48); relationship58.m_TailGuid = uint64_t(55); timelineDecoder.CreateRelationship(relationship58); arm::pipe::ITimelineDecoder::Relationship relationship59; relationship59.m_Guid = uint64_t(59); relationship59.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship59.m_HeadGuid = uint64_t(36); relationship59.m_TailGuid = uint64_t(55); timelineDecoder.CreateRelationship(relationship59); arm::pipe::ITimelineDecoder::Event event60; event60.m_Guid = uint64_t(60); event60.m_TimeStamp = uint64_t(96557081111036); event60.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event60); arm::pipe::ITimelineDecoder::Relationship relationship61; relationship61.m_Guid = uint64_t(61); relationship61.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship61.m_HeadGuid = uint64_t(55); relationship61.m_TailGuid = uint64_t(60); timelineDecoder.CreateRelationship(relationship61); arm::pipe::ITimelineDecoder::Relationship relationship62; relationship62.m_Guid = uint64_t(62); relationship62.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship62.m_HeadGuid = uint64_t(60); relationship62.m_TailGuid = uint64_t(17170418158534996719U); timelineDecoder.CreateRelationship(relationship62); arm::pipe::ITimelineDecoder::Event event63; event63.m_Guid = uint64_t(63); event63.m_TimeStamp = uint64_t(96557081149730); event63.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event63); arm::pipe::ITimelineDecoder::Relationship relationship64; relationship64.m_Guid = uint64_t(61); relationship64.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship64.m_HeadGuid = uint64_t(55); relationship64.m_TailGuid = uint64_t(63); timelineDecoder.CreateRelationship(relationship64); arm::pipe::ITimelineDecoder::Relationship relationship65; relationship65.m_Guid = uint64_t(62); relationship65.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship65.m_HeadGuid = uint64_t(63); relationship65.m_TailGuid = uint64_t(10812061579584851344U); timelineDecoder.CreateRelationship(relationship65); arm::pipe::ITimelineDecoder::Entity entity66; entity66.m_Guid = uint64_t(66); timelineDecoder.CreateEntity(entity66); arm::pipe::ITimelineDecoder::Relationship relationship67; relationship67.m_Guid = uint64_t(67); relationship67.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship67.m_HeadGuid = uint64_t(66); relationship67.m_TailGuid = uint64_t(10172155312650606003U); timelineDecoder.CreateRelationship(relationship67); arm::pipe::ITimelineDecoder::Relationship relationship68; relationship68.m_Guid = uint64_t(68); relationship68.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship68.m_HeadGuid = uint64_t(67); relationship68.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship68); arm::pipe::ITimelineDecoder::Relationship relationship69; relationship69.m_Guid = uint64_t(69); relationship69.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship69.m_HeadGuid = uint64_t(48); relationship69.m_TailGuid = uint64_t(66); timelineDecoder.CreateRelationship(relationship69); arm::pipe::ITimelineDecoder::Relationship relationship70; relationship70.m_Guid = uint64_t(70); relationship70.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship70.m_HeadGuid = uint64_t(22); relationship70.m_TailGuid = uint64_t(66); timelineDecoder.CreateRelationship(relationship70); arm::pipe::ITimelineDecoder::Event event71; event71.m_Guid = uint64_t(71); event71.m_TimeStamp = uint64_t(96557081156464); event71.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event71); arm::pipe::ITimelineDecoder::Relationship relationship72; relationship72.m_Guid = uint64_t(72); relationship72.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship72.m_HeadGuid = uint64_t(66); relationship72.m_TailGuid = uint64_t(71); timelineDecoder.CreateRelationship(relationship72); arm::pipe::ITimelineDecoder::Relationship relationship73; relationship73.m_Guid = uint64_t(73); relationship73.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship73.m_HeadGuid = uint64_t(71); relationship73.m_TailGuid = uint64_t(17170418158534996719U); timelineDecoder.CreateRelationship(relationship73); arm::pipe::ITimelineDecoder::Event event74; event74.m_Guid = uint64_t(74); event74.m_TimeStamp = uint64_t(96557081220825); event74.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event74); arm::pipe::ITimelineDecoder::Relationship relationship75; relationship75.m_Guid = uint64_t(75); relationship75.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship75.m_HeadGuid = uint64_t(66); relationship75.m_TailGuid = uint64_t(74); timelineDecoder.CreateRelationship(relationship75); arm::pipe::ITimelineDecoder::Relationship relationship76; relationship76.m_Guid = uint64_t(76); relationship76.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship76.m_HeadGuid = uint64_t(74); relationship76.m_TailGuid = uint64_t(10812061579584851344U); timelineDecoder.CreateRelationship(relationship76); arm::pipe::ITimelineDecoder::Entity entity77; entity77.m_Guid = uint64_t(77); timelineDecoder.CreateEntity(entity77); arm::pipe::ITimelineDecoder::Relationship relationship78; relationship78.m_Guid = uint64_t(78); relationship78.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship78.m_HeadGuid = uint64_t(77); relationship78.m_TailGuid = uint64_t(10172155312650606003U); timelineDecoder.CreateRelationship(relationship78); arm::pipe::ITimelineDecoder::Relationship relationship79; relationship79.m_Guid = uint64_t(79); relationship79.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::LabelLink; relationship79.m_HeadGuid = uint64_t(78); relationship79.m_TailGuid = uint64_t(14196220359693045352U); timelineDecoder.CreateRelationship(relationship79); arm::pipe::ITimelineDecoder::Relationship relationship80; relationship80.m_Guid = uint64_t(80); relationship80.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship80.m_HeadGuid = uint64_t(48); relationship80.m_TailGuid = uint64_t(77); timelineDecoder.CreateRelationship(relationship80); arm::pipe::ITimelineDecoder::Relationship relationship81; relationship81.m_Guid = uint64_t(81); relationship81.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::RetentionLink; relationship81.m_HeadGuid = uint64_t(42); relationship81.m_TailGuid = uint64_t(77); timelineDecoder.CreateRelationship(relationship81); arm::pipe::ITimelineDecoder::Event event82; event82.m_Guid = uint64_t(82); event82.m_TimeStamp = uint64_t(96557081227643); event82.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event82); arm::pipe::ITimelineDecoder::Relationship relationship83; relationship83.m_Guid = uint64_t(83); relationship83.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship83.m_HeadGuid = uint64_t(77); relationship83.m_TailGuid = uint64_t(82); timelineDecoder.CreateRelationship(relationship83); arm::pipe::ITimelineDecoder::Relationship relationship84; relationship84.m_Guid = uint64_t(84); relationship84.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship84.m_HeadGuid = uint64_t(82); relationship84.m_TailGuid = uint64_t(17170418158534996719U); timelineDecoder.CreateRelationship(relationship84); arm::pipe::ITimelineDecoder::Event event85; event85.m_Guid = uint64_t(85); event85.m_TimeStamp = uint64_t(96557081240332); event85.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event85); arm::pipe::ITimelineDecoder::Relationship relationship86; relationship86.m_Guid = uint64_t(86); relationship86.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship86.m_HeadGuid = uint64_t(77); relationship86.m_TailGuid = uint64_t(85); timelineDecoder.CreateRelationship(relationship86); arm::pipe::ITimelineDecoder::Relationship relationship87; relationship87.m_Guid = uint64_t(87); relationship87.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship87.m_HeadGuid = uint64_t(85); relationship87.m_TailGuid = uint64_t(10812061579584851344U); timelineDecoder.CreateRelationship(relationship87); arm::pipe::ITimelineDecoder::Event event88; event88.m_Guid = uint64_t(88); event88.m_TimeStamp = uint64_t(96557081243146); event88.m_ThreadId = uint64_t(140522431862592); timelineDecoder.CreateEvent(event88); arm::pipe::ITimelineDecoder::Relationship relationship89; relationship89.m_Guid = uint64_t(89); relationship89.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::ExecutionLink; relationship89.m_HeadGuid = uint64_t(48); relationship89.m_TailGuid = uint64_t(88); timelineDecoder.CreateRelationship(relationship89); arm::pipe::ITimelineDecoder::Relationship relationship90; relationship90.m_Guid = uint64_t(90); relationship90.m_RelationshipType = arm::pipe::ITimelineDecoder::RelationshipType::DataLink; relationship90.m_HeadGuid = uint64_t(88); relationship90.m_TailGuid = uint64_t(10812061579584851344U); timelineDecoder.CreateRelationship(relationship90); } TEST_CASE("JSONTimelineDecoderTestStructure") { JSONTimelineDecoder timelineDecoder; RunSimpleModelThroughDecoder(timelineDecoder); JSONTimelineDecoder::Model model = timelineDecoder.GetModel(); CHECK(model.jsonEntities.size() == 20); JSONTimelineDecoder::JSONEntity rootEntity = model.jsonEntities.at(6); CHECK(rootEntity.childEntities.size() == 4); // Testing input layer model JSONTimelineDecoder::JSONEntity entity0 = model.jsonEntities.at(rootEntity.childEntities[0]); CHECK(entity0.GetName() == "input"); CHECK(entity0.GetType() == "layer"); CHECK(entity0.childEntities.size() == 1); JSONTimelineDecoder::JSONEntity input_workload_entity = model.jsonEntities.at(entity0.childEntities[0]); CHECK(input_workload_entity.childEntities.size() == 1); CHECK(input_workload_entity.GetType() == "workload"); CHECK(input_workload_entity.extendedData.at("backendId") == "CpuRef"); JSONTimelineDecoder::JSONEntity input_workload_execution_entity = model.jsonEntities .at(input_workload_entity.childEntities[0]); CHECK(input_workload_execution_entity.childEntities.size() == 2); CHECK(input_workload_execution_entity.GetType() == "workload_execution"); JSONTimelineDecoder::JSONEntity input_workload_execution_event0 = model.jsonEntities .at(input_workload_execution_entity.childEntities[0]); CHECK(input_workload_execution_event0.GetType() == "Event"); CHECK(input_workload_execution_event0.childEntities.size() == 0); CHECK(model.events.at(input_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(input_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0)); JSONTimelineDecoder::JSONEntity input_workload_execution_event1 = model.jsonEntities .at(input_workload_execution_entity.childEntities[1]); CHECK(input_workload_execution_event0.GetType() == "Event"); CHECK(input_workload_execution_event1.childEntities.size() == 0); CHECK(model.events.at(input_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(input_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0)); // Testing normalization layer model JSONTimelineDecoder::JSONEntity entity1 = model.jsonEntities.at(rootEntity.childEntities[1]); CHECK(entity1.GetName() == "normalization"); CHECK(entity1.GetType() == "layer"); JSONTimelineDecoder::JSONEntity normalization_workload_entity = model.jsonEntities .at(entity1.childEntities[0]); CHECK(normalization_workload_entity.GetType() == "workload"); CHECK(normalization_workload_entity.extendedData.at("backendId") == "CpuRef"); JSONTimelineDecoder::JSONEntity normalization_workload_execution_entity = model.jsonEntities .at(normalization_workload_entity.childEntities[0]); CHECK(normalization_workload_execution_entity.GetType() == "workload_execution"); JSONTimelineDecoder::JSONEntity normalization_workload_execution_event0 = model.jsonEntities .at(normalization_workload_execution_entity.childEntities[0]); CHECK(normalization_workload_execution_event0.GetType() == "Event"); CHECK(model.events.at(normalization_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(normalization_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0)); JSONTimelineDecoder::JSONEntity normalization_workload_execution_event1 = model.jsonEntities .at(normalization_workload_execution_entity.childEntities[1]); CHECK(normalization_workload_execution_event1.GetType() == "Event"); CHECK(model.events.at(normalization_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(normalization_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0)); // Testing output layer model JSONTimelineDecoder::JSONEntity entity2 = model.jsonEntities.at(rootEntity.childEntities[2]); CHECK(entity2.GetName() == "output"); CHECK(entity2.GetType() == "layer"); JSONTimelineDecoder::JSONEntity output_workload_entity = model.jsonEntities.at(entity2.childEntities[0]); CHECK(output_workload_entity.GetType() == "workload"); CHECK(output_workload_entity.extendedData.at("backendId") == "CpuRef"); JSONTimelineDecoder::JSONEntity output_workload_execution_entity = model.jsonEntities .at(output_workload_entity.childEntities[0]); CHECK(output_workload_execution_entity.GetType() == "workload_execution"); JSONTimelineDecoder::JSONEntity output_workload_execution_event0 = model.jsonEntities .at(output_workload_execution_entity.childEntities[0]); CHECK(output_workload_execution_event0.GetType() == "Event"); CHECK(model.events.at(output_workload_execution_event0.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(output_workload_execution_event0.GetGuid()).m_TimeStamp > uint64_t(0)); JSONTimelineDecoder::JSONEntity output_workload_execution_event1 = model.jsonEntities .at(output_workload_execution_entity.childEntities[1]); CHECK(output_workload_execution_event1.GetType() == "Event"); CHECK(model.events.at(output_workload_execution_event1.GetGuid()).m_ThreadId > uint64_t(0)); CHECK(model.events.at(output_workload_execution_event1.GetGuid()).m_TimeStamp > uint64_t(0)); JSONTimelineDecoder::JSONEntity entity48 = model.jsonEntities.at(rootEntity.childEntities[3]); CHECK(entity48.GetName() == ""); CHECK(entity48.GetType() == "inference"); } TEST_CASE("JSONTimelineDecoderTestJSON") { JSONTimelineDecoder timelineDecoder; RunSimpleModelThroughDecoder(timelineDecoder); JSONTimelineDecoder::Model model = timelineDecoder.GetModel(); JSONTimelineDecoder::JSONEntity rootEntity = model.jsonEntities.at(6); std::string jsonString = timelineDecoder.GetJSONString(rootEntity); CHECK(jsonString != ""); CHECK(jsonString.find("input_0: {")!=std::string::npos); CHECK(jsonString.find("type: Measurement,\n" "\t\t\tbackendId :CpuRef,")!=std::string::npos); CHECK(jsonString.find("normalization_2: {")!=std::string::npos); CHECK(jsonString.find("output_4: {")!=std::string::npos); // Create a temporary file to write Json output to fs::path tempFile = armnnUtils::Filesystem::NamedTempFile("JSONTimelineDecoderTestJSON.json"); // open temp file std::ofstream ofs{tempFile}; // tell the timeline decoder to print into our temp file (you could also use std::cout) timelineDecoder.PrintJSON(rootEntity, ofs); // close temp file ofs.close(); // Now everything in opposite order fs::ifstream inFile; //reopen the file this time for reading inFile.open(tempFile); std::stringstream strStream; strStream << inFile.rdbuf(); //read the file inFile.close(); std::string outfileJson = strStream.str(); CHECK(outfileJson != ""); CHECK(outfileJson.find("input_0: {")!=std::string::npos); CHECK(outfileJson.find("type: Measurement,\n" "\t\t\tbackendId :CpuRef,")!=std::string::npos); CHECK(outfileJson.find("normalization_2: {")!=std::string::npos); CHECK(outfileJson.find("output_4: {")!=std::string::npos); // Remove temporary file fs::remove(tempFile); } }