xref: /aosp_15_r20/external/armnn/src/timelineDecoder/JSONTimelineDecoder.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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