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