1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #pragma once 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include <server/include/timelineDecoder/ITimelineDecoder.hpp> 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker #include <armnnUtils/Filesystem.hpp> 11*89c4ff92SAndroid Build Coastguard Worker 12*89c4ff92SAndroid Build Coastguard Worker #include <map> 13*89c4ff92SAndroid Build Coastguard Worker #include <vector> 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker namespace armnn 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker namespace timelinedecoder 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker class JSONTimelineDecoder : public arm::pipe::ITimelineDecoder 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker public: 22*89c4ff92SAndroid Build Coastguard Worker struct JSONEntity 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker public: 25*89c4ff92SAndroid Build Coastguard Worker std::vector<uint64_t> connected_entities; 26*89c4ff92SAndroid Build Coastguard Worker std::vector<uint64_t> childEntities; 27*89c4ff92SAndroid Build Coastguard Worker JSONEntityarmnn::timelinedecoder::JSONTimelineDecoder::JSONEntity28*89c4ff92SAndroid Build Coastguard Worker JSONEntity(uint64_t guid): m_Guid(guid){} 29*89c4ff92SAndroid Build Coastguard Worker uint64_t GetGuid(); 30*89c4ff92SAndroid Build Coastguard Worker std::string GetName(); 31*89c4ff92SAndroid Build Coastguard Worker std::string GetType(); 32*89c4ff92SAndroid Build Coastguard Worker void SetName(std::string entityName); 33*89c4ff92SAndroid Build Coastguard Worker void SetType(std::string entityType); 34*89c4ff92SAndroid Build Coastguard Worker void SetParent(JSONEntity& parent); 35*89c4ff92SAndroid Build Coastguard Worker void AddConnection(JSONEntity& headEntity, JSONEntity& connectedEntity); 36*89c4ff92SAndroid Build Coastguard Worker std::map<std::string, std::string> extendedData; 37*89c4ff92SAndroid Build Coastguard Worker 38*89c4ff92SAndroid Build Coastguard Worker private: 39*89c4ff92SAndroid Build Coastguard Worker uint64_t m_Guid; 40*89c4ff92SAndroid Build Coastguard Worker std::string name; 41*89c4ff92SAndroid Build Coastguard Worker std::string type; 42*89c4ff92SAndroid Build Coastguard Worker }; 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker struct Model 45*89c4ff92SAndroid Build Coastguard Worker { 46*89c4ff92SAndroid Build Coastguard Worker std::map<uint64_t, JSONEntity> jsonEntities; 47*89c4ff92SAndroid Build Coastguard Worker std::map<uint64_t, Relationship> relationships; 48*89c4ff92SAndroid Build Coastguard Worker std::map<uint64_t, Label> labels; 49*89c4ff92SAndroid Build Coastguard Worker std::map<uint64_t, Event> events; 50*89c4ff92SAndroid Build Coastguard Worker std::map<uint64_t, EventClass> eventClasses; 51*89c4ff92SAndroid Build Coastguard Worker }; 52*89c4ff92SAndroid Build Coastguard Worker 53*89c4ff92SAndroid Build Coastguard Worker void PrintJSON(JSONEntity& entity, std::ostream& os); 54*89c4ff92SAndroid Build Coastguard Worker std::string GetJSONString(JSONEntity& rootEntity); 55*89c4ff92SAndroid Build Coastguard Worker std::string GetJSONEntityString(JSONEntity& entity, int& counter); 56*89c4ff92SAndroid Build Coastguard Worker 57*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEntity(const Entity&) override; 58*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEventClass(const EventClass&) override; 59*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateEvent(const Event&) override; 60*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateLabel(const Label&) override; 61*89c4ff92SAndroid Build Coastguard Worker virtual TimelineStatus CreateRelationship(const Relationship&) override; 62*89c4ff92SAndroid Build Coastguard Worker 63*89c4ff92SAndroid Build Coastguard Worker const Model& GetModel(); 64*89c4ff92SAndroid Build Coastguard Worker 65*89c4ff92SAndroid Build Coastguard Worker private: 66*89c4ff92SAndroid Build Coastguard Worker Model m_Model; 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker void HandleRetentionLink(const Relationship& relationship); 69*89c4ff92SAndroid Build Coastguard Worker void HandleLabelLink(const Relationship& relationship); 70*89c4ff92SAndroid Build Coastguard Worker void HandleExecutionLink(const Relationship& relationship); 71*89c4ff92SAndroid Build Coastguard Worker void HandleConnectionLabel(const Relationship& relationship); 72*89c4ff92SAndroid Build Coastguard Worker void HandleBackendIdLabel(const Relationship& relationship); 73*89c4ff92SAndroid Build Coastguard Worker void HandleNameLabel(const Relationship& relationship); 74*89c4ff92SAndroid Build Coastguard Worker void HandleTypeLabel(const Relationship& relationship); 75*89c4ff92SAndroid Build Coastguard Worker 76*89c4ff92SAndroid Build Coastguard Worker std::string GetLayerJSONString(JSONEntity& entity, int& counter, std::string& jsonEntityString); 77*89c4ff92SAndroid Build Coastguard Worker std::string GetWorkloadJSONString(const JSONEntity& entity, int& counter, std::string& jsonEntityString); 78*89c4ff92SAndroid Build Coastguard Worker std::string GetWorkloadExecutionJSONString(const JSONEntity& entity, std::string& jsonEntityString) const; 79*89c4ff92SAndroid Build Coastguard Worker }; 80*89c4ff92SAndroid Build Coastguard Worker 81*89c4ff92SAndroid Build Coastguard Worker } 82*89c4ff92SAndroid Build Coastguard Worker } 83