xref: /aosp_15_r20/external/armnn/src/armnnUtils/DotSerializer.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. 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 <armnn/Types.hpp>
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <ostream>
11*89c4ff92SAndroid Build Coastguard Worker #include <vector>
12*89c4ff92SAndroid Build Coastguard Worker #include <memory>
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker namespace armnn
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker class DotBase
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker public:
DotBase(std::ostream & stream)20*89c4ff92SAndroid Build Coastguard Worker     explicit DotBase(std::ostream& stream)
21*89c4ff92SAndroid Build Coastguard Worker         : m_Stream(stream) {}
22*89c4ff92SAndroid Build Coastguard Worker 
GetStream()23*89c4ff92SAndroid Build Coastguard Worker     std::ostream& GetStream() { return m_Stream; }
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker private:
26*89c4ff92SAndroid Build Coastguard Worker     std::ostream& m_Stream;
27*89c4ff92SAndroid Build Coastguard Worker };
28*89c4ff92SAndroid Build Coastguard Worker 
29*89c4ff92SAndroid Build Coastguard Worker class HtmlSection : public DotBase
30*89c4ff92SAndroid Build Coastguard Worker {
31*89c4ff92SAndroid Build Coastguard Worker public:
HtmlSection(std::ostream & stream)32*89c4ff92SAndroid Build Coastguard Worker     explicit HtmlSection(std::ostream& stream)
33*89c4ff92SAndroid Build Coastguard Worker         : DotBase(stream) { GetStream() << "<";}
~HtmlSection()34*89c4ff92SAndroid Build Coastguard Worker     ~HtmlSection() { GetStream() << ">"; }
35*89c4ff92SAndroid Build Coastguard Worker };
36*89c4ff92SAndroid Build Coastguard Worker 
37*89c4ff92SAndroid Build Coastguard Worker class HtmlSimpleTag : public DotBase
38*89c4ff92SAndroid Build Coastguard Worker {
39*89c4ff92SAndroid Build Coastguard Worker public:
HtmlSimpleTag(std::ostream & stream,const char * name)40*89c4ff92SAndroid Build Coastguard Worker     explicit HtmlSimpleTag(std::ostream& stream, const char* name)
41*89c4ff92SAndroid Build Coastguard Worker         : DotBase(stream)
42*89c4ff92SAndroid Build Coastguard Worker         , m_Name(name){ GetStream() << "<" << m_Name << ">"; }
~HtmlSimpleTag()43*89c4ff92SAndroid Build Coastguard Worker     ~HtmlSimpleTag() { GetStream() << "</" << m_Name << ">"; }
44*89c4ff92SAndroid Build Coastguard Worker 
45*89c4ff92SAndroid Build Coastguard Worker private:
46*89c4ff92SAndroid Build Coastguard Worker     const char* m_Name;
47*89c4ff92SAndroid Build Coastguard Worker };
48*89c4ff92SAndroid Build Coastguard Worker 
49*89c4ff92SAndroid Build Coastguard Worker class HtmlBold : public HtmlSimpleTag
50*89c4ff92SAndroid Build Coastguard Worker {
51*89c4ff92SAndroid Build Coastguard Worker public:
HtmlBold(std::ostream & stream)52*89c4ff92SAndroid Build Coastguard Worker     explicit HtmlBold(std::ostream &stream)
53*89c4ff92SAndroid Build Coastguard Worker         : HtmlSimpleTag(stream, "B") {}
54*89c4ff92SAndroid Build Coastguard Worker };
55*89c4ff92SAndroid Build Coastguard Worker 
56*89c4ff92SAndroid Build Coastguard Worker class HtmlFont : public DotBase
57*89c4ff92SAndroid Build Coastguard Worker {
58*89c4ff92SAndroid Build Coastguard Worker public:
59*89c4ff92SAndroid Build Coastguard Worker     explicit HtmlFont(std::ostream& stream, int fontSize, const char* color, const char* face);
60*89c4ff92SAndroid Build Coastguard Worker     explicit HtmlFont(std::ostream& stream);
61*89c4ff92SAndroid Build Coastguard Worker     ~HtmlFont();
62*89c4ff92SAndroid Build Coastguard Worker };
63*89c4ff92SAndroid Build Coastguard Worker 
64*89c4ff92SAndroid Build Coastguard Worker class DotAttributeSet : public DotBase
65*89c4ff92SAndroid Build Coastguard Worker {
66*89c4ff92SAndroid Build Coastguard Worker public:
67*89c4ff92SAndroid Build Coastguard Worker     explicit DotAttributeSet(std::ostream& stream);
68*89c4ff92SAndroid Build Coastguard Worker     ~DotAttributeSet();
69*89c4ff92SAndroid Build Coastguard Worker 
70*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet & AddAttribute(const std::string& name, const std::stringstream& value);
71*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet & AddAttribute(const std::string& name, int value);
72*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet & AddAttribute(const std::string& name, const std::string& value);
73*89c4ff92SAndroid Build Coastguard Worker private:
74*89c4ff92SAndroid Build Coastguard Worker     std::vector<std::string> m_Attributes;
75*89c4ff92SAndroid Build Coastguard Worker };
76*89c4ff92SAndroid Build Coastguard Worker 
77*89c4ff92SAndroid Build Coastguard Worker class DotEdge : public DotBase
78*89c4ff92SAndroid Build Coastguard Worker {
79*89c4ff92SAndroid Build Coastguard Worker public:
80*89c4ff92SAndroid Build Coastguard Worker     explicit DotEdge(std::ostream& stream, LayerGuid fromNodeId, LayerGuid toNodeId);
81*89c4ff92SAndroid Build Coastguard Worker     ~DotEdge();
82*89c4ff92SAndroid Build Coastguard Worker 
GetAttributeSet()83*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
84*89c4ff92SAndroid Build Coastguard Worker private:
85*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<DotAttributeSet> m_Attributes;
86*89c4ff92SAndroid Build Coastguard Worker };
87*89c4ff92SAndroid Build Coastguard Worker 
88*89c4ff92SAndroid Build Coastguard Worker class NodeContent : public DotBase
89*89c4ff92SAndroid Build Coastguard Worker {
90*89c4ff92SAndroid Build Coastguard Worker public:
91*89c4ff92SAndroid Build Coastguard Worker     explicit NodeContent(std::ostream& stream);
92*89c4ff92SAndroid Build Coastguard Worker     NodeContent & SetName(const std::string & name);
93*89c4ff92SAndroid Build Coastguard Worker     NodeContent & AddContent(const std::string & content);
94*89c4ff92SAndroid Build Coastguard Worker 
95*89c4ff92SAndroid Build Coastguard Worker     ~NodeContent();
96*89c4ff92SAndroid Build Coastguard Worker private:
97*89c4ff92SAndroid Build Coastguard Worker     std::string m_Name;
98*89c4ff92SAndroid Build Coastguard Worker     std::vector<std::string> m_Contents;
99*89c4ff92SAndroid Build Coastguard Worker };
100*89c4ff92SAndroid Build Coastguard Worker 
101*89c4ff92SAndroid Build Coastguard Worker class DotNode : public DotBase
102*89c4ff92SAndroid Build Coastguard Worker {
103*89c4ff92SAndroid Build Coastguard Worker public:
104*89c4ff92SAndroid Build Coastguard Worker     explicit DotNode(std::ostream& stream, LayerGuid nodeId, const char* label);
105*89c4ff92SAndroid Build Coastguard Worker     ~DotNode();
106*89c4ff92SAndroid Build Coastguard Worker 
GetContents()107*89c4ff92SAndroid Build Coastguard Worker     NodeContent& GetContents()         { return *m_Contents.get(); }
GetAttributeSet()108*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
109*89c4ff92SAndroid Build Coastguard Worker private:
110*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<NodeContent>     m_Contents;
111*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<DotAttributeSet> m_Attributes;
112*89c4ff92SAndroid Build Coastguard Worker };
113*89c4ff92SAndroid Build Coastguard Worker 
114*89c4ff92SAndroid Build Coastguard Worker class DotDefaults : public DotBase
115*89c4ff92SAndroid Build Coastguard Worker {
116*89c4ff92SAndroid Build Coastguard Worker public:
117*89c4ff92SAndroid Build Coastguard Worker     explicit DotDefaults(std::ostream& stream, const char* type);
118*89c4ff92SAndroid Build Coastguard Worker     ~DotDefaults();
119*89c4ff92SAndroid Build Coastguard Worker 
GetAttributeSet()120*89c4ff92SAndroid Build Coastguard Worker     DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
121*89c4ff92SAndroid Build Coastguard Worker private:
122*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<DotAttributeSet> m_Attributes;
123*89c4ff92SAndroid Build Coastguard Worker };
124*89c4ff92SAndroid Build Coastguard Worker 
125*89c4ff92SAndroid Build Coastguard Worker class DotGraph : public DotBase
126*89c4ff92SAndroid Build Coastguard Worker {
127*89c4ff92SAndroid Build Coastguard Worker public:
128*89c4ff92SAndroid Build Coastguard Worker     explicit DotGraph(std::ostream& stream, const char* name);
129*89c4ff92SAndroid Build Coastguard Worker     ~DotGraph();
130*89c4ff92SAndroid Build Coastguard Worker private:
131*89c4ff92SAndroid Build Coastguard Worker };
132*89c4ff92SAndroid Build Coastguard Worker 
133*89c4ff92SAndroid Build Coastguard Worker } //namespace armnn
134