xref: /aosp_15_r20/external/armnn/tests/profiling/gatordmock/CounterDirectory.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 
9 #include "GatordMockService.hpp"
10 #include "MockUtils.hpp"
11 
12 #include <common/include/Packet.hpp>
13 #include <common/include/CommandHandlerFunctor.hpp>
14 
15 #include "SendCounterPacket.hpp"
16 #include "IPeriodicCounterCapture.hpp"
17 
18 #include <vector>
19 #include <thread>
20 #include <atomic>
21 #include <iostream>
22 #include <functional>
23 
24 namespace armnn
25 {
26 
27 namespace gatordmock
28 {
29 
30 struct EventRecord
31 {
32     uint16_t m_CounterUid;
33     uint16_t m_MaxCounterUid;
34     uint16_t m_DeviceUid;
35     uint16_t m_CounterSetUid;
36     uint16_t m_CounterClass;
37     uint16_t m_CounterInterpolation;
38     double m_CounterMultiplier;
39     std::string m_CounterName;
40     std::string m_CounterDescription;
41     std::string m_CounterUnits;
42 
printHeaderarmnn::gatordmock::EventRecord43     static void printHeader(std::string categoryName)
44     {
45         std::string header;
46 
47         header.append(gatordmock::CentreAlignFormatting("Counter Name", 20));
48         header.append(" | ");
49         header.append(gatordmock::CentreAlignFormatting("Description", 50));
50         header.append(" | ");
51         header.append(gatordmock::CentreAlignFormatting("Units", 14));
52         header.append(" | ");
53         header.append(gatordmock::CentreAlignFormatting("UID", 6));
54         header.append(" | ");
55         header.append(gatordmock::CentreAlignFormatting("Max UID",10));
56         header.append(" | ");
57         header.append(gatordmock::CentreAlignFormatting("Class", 8));
58         header.append(" | ");
59         header.append(gatordmock::CentreAlignFormatting("Interpolation", 14));
60         header.append(" | ");
61         header.append(gatordmock::CentreAlignFormatting("Multiplier", 20));
62         header.append(" | ");
63         header.append(gatordmock::CentreAlignFormatting("Counter set UID", 16));
64         header.append(" | ");
65         header.append(gatordmock::CentreAlignFormatting("Device UID", 14));
66         header.append("\n");
67 
68         std::cout << "\n" << "\n";
69         std::cout << gatordmock::CentreAlignFormatting("EVENTS IN CATEGORY: " + categoryName,
70                                                        static_cast<int>(header.size()));
71         std::cout << "\n";
72         std::cout << std::string(header.size(), '=') << "\n";
73         std::cout << header;
74     }
75 
printContentsarmnn::gatordmock::EventRecord76     void printContents() const
77     {
78         std::string body;
79 
80         body.append(gatordmock::CentreAlignFormatting(m_CounterName, 20));
81         body.append(" | ");
82         body.append(gatordmock::CentreAlignFormatting(m_CounterDescription, 50));
83         body.append(" | ");
84         body.append(gatordmock::CentreAlignFormatting(m_CounterUnits, 14));
85         body.append(" | ");
86         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterUid), 6));
87         body.append(" | ");
88         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_MaxCounterUid), 10));
89         body.append(" | ");
90         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterClass), 8));
91         body.append(" | ");
92         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterInterpolation), 14));
93         body.append(" | ");
94         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterMultiplier), 20));
95         body.append(" | ");
96         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetUid), 16));
97         body.append(" | ");
98         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceUid), 14));
99 
100         body.append("\n");
101 
102         std::cout << std::string(body.size(), '-') << "\n";
103 
104         std::cout << body;
105     }
106 };
107 
108 struct CategoryRecord
109 {
110     uint16_t m_EventCount;
111     std::string m_CategoryName;
112     std::vector<EventRecord> m_EventRecords;
113 
printarmnn::gatordmock::CategoryRecord114     void print() const
115     {
116         std::string body;
117         std::string header;
118 
119         header.append(gatordmock::CentreAlignFormatting("Name", 20));
120         header.append(" | ");
121         header.append(gatordmock::CentreAlignFormatting("Event Count", 14));
122         header.append("\n");
123 
124         body.append(gatordmock::CentreAlignFormatting(m_CategoryName, 20));
125         body.append(" | ");
126         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_EventCount), 14));
127 
128         std::cout << "\n" << "\n";
129         std::cout << gatordmock::CentreAlignFormatting("CATEGORY", static_cast<int>(header.size()));
130         std::cout << "\n";
131         std::cout << std::string(header.size(), '=') << "\n";
132 
133         std::cout<< header;
134 
135         std::cout << std::string(body.size(), '-') << "\n";
136 
137         std::cout<< body;
138 
139         if(m_EventRecords.size() > 0)
140         {
141             EventRecord::printHeader(m_CategoryName);
142 
143             std::for_each(m_EventRecords.begin(), m_EventRecords.end(), std::mem_fun_ref(&EventRecord::printContents));
144         }
145     }
146 };
147 
148 struct CounterSetRecord
149 {
150     uint16_t m_CounterSetUid;
151     uint16_t m_CounterSetCount;
152     std::string m_CounterSetName;
153 
printHeaderarmnn::gatordmock::CounterSetRecord154     static void printHeader()
155     {
156         std::string header;
157 
158         header.append(gatordmock::CentreAlignFormatting("Counter set name", 20));
159         header.append(" | ");
160         header.append(gatordmock::CentreAlignFormatting("UID",13));
161         header.append(" | ");
162         header.append(gatordmock::CentreAlignFormatting("Count",10));
163         header.append("\n");
164 
165         std::cout << "\n" << "\n";
166         std::cout << gatordmock::CentreAlignFormatting("COUNTER SETS", static_cast<int>(header.size()));
167         std::cout << "\n";
168         std::cout << std::string(header.size(), '=') << "\n";
169 
170         std::cout<< header;
171     }
172 
printContentsarmnn::gatordmock::CounterSetRecord173     void printContents() const
174     {
175         std::string body;
176 
177         body.append(gatordmock::CentreAlignFormatting(m_CounterSetName, 20));
178         body.append(" | ");
179         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetUid), 13));
180         body.append(" | ");
181         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetCount), 10));
182         body.append("\n");
183 
184         std::cout << std::string(body.size(), '-') << "\n";
185 
186         std::cout<< body;
187     }
188 };
189 
190 struct DeviceRecord
191 {
192     uint16_t m_DeviceUid;
193     uint16_t m_DeviceCores;
194     std::string m_DeviceName;
195 
printHeaderarmnn::gatordmock::DeviceRecord196     static void printHeader()
197     {
198         std::string header;
199 
200         header.append(gatordmock::CentreAlignFormatting("Device name", 20));
201         header.append(" | ");
202         header.append(gatordmock::CentreAlignFormatting("UID",13));
203         header.append(" | ");
204         header.append(gatordmock::CentreAlignFormatting("Cores",10));
205         header.append("\n");
206 
207         std::cout << "\n" << "\n";
208         std::cout << gatordmock::CentreAlignFormatting("DEVICES", static_cast<int>(header.size()));
209         std::cout << "\n";
210         std::cout << std::string(header.size(), '=') << "\n";
211         std::cout<< header;
212     }
213 
printContentsarmnn::gatordmock::DeviceRecord214     void printContents() const
215     {
216         std::string body;
217 
218         body.append(gatordmock::CentreAlignFormatting(m_DeviceName, 20));
219         body.append(" | ");
220         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceUid), 13));
221         body.append(" | ");
222         body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceCores), 10));
223         body.append("\n");
224 
225         std::cout << std::string(body.size(), '-') << "\n";
226         std::cout<< body;
227     }
228 };
229 
230 struct CounterDirectory
231 {
232     std::vector<CategoryRecord> m_Categories;
233     std::vector<CounterSetRecord> m_CounterSets;
234     std::vector<DeviceRecord> m_DeviceRecords;
235 
printarmnn::gatordmock::CounterDirectory236     void print() const
237     {
238         DeviceRecord::printHeader();
239         std::for_each(m_DeviceRecords.begin(), m_DeviceRecords.end(),
240                       std::mem_fun_ref(&DeviceRecord::printContents));
241 
242         CounterSetRecord::printHeader();
243         std::for_each(m_CounterSets.begin(), m_CounterSets.end(),
244                       std::mem_fun_ref(&CounterSetRecord::printContents));
245 
246         std::for_each(m_Categories.begin(), m_Categories.end(),
247                       std::mem_fun_ref(&CategoryRecord::print));
248         std::cout << "\n";
249     }
250 };
251 
252 } // namespace gatordmock
253 
254 } // namespace armnn