blob: 31718dd8176b3f4e825ad342a2969f382e41baf5 [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
Finn Williams0c8cb992020-05-07 10:38:15 +010012#include <Packet.hpp>
Finn Williams15db7452019-10-15 14:22:13 +010013#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{
Finn Williams15db7452019-10-15 14:22:13 +0100109 uint16_t m_EventCount;
110 std::string m_CategoryName;
111 std::vector<EventRecord> m_EventRecords;
112
113 void print() const
114 {
115 std::string body;
116 std::string header;
117
118 header.append(gatordmock::CentreAlignFormatting("Name", 20));
119 header.append(" | ");
Finn Williams15db7452019-10-15 14:22:13 +0100120 header.append(gatordmock::CentreAlignFormatting("Event Count", 14));
121 header.append("\n");
122
123 body.append(gatordmock::CentreAlignFormatting(m_CategoryName, 20));
124 body.append(" | ");
Finn Williams15db7452019-10-15 14:22:13 +0100125 body.append(gatordmock::CentreAlignFormatting(std::to_string(m_EventCount), 14));
126
127 std::cout << "\n" << "\n";
128 std::cout << gatordmock::CentreAlignFormatting("CATEGORY", static_cast<int>(header.size()));
129 std::cout << "\n";
130 std::cout << std::string(header.size(), '=') << "\n";
131
132 std::cout<< header;
133
134 std::cout << std::string(body.size(), '-') << "\n";
135
136 std::cout<< body;
137
138 if(m_EventRecords.size() > 0)
139 {
140 EventRecord::printHeader(m_CategoryName);
141
142 std::for_each(m_EventRecords.begin(), m_EventRecords.end(), std::mem_fun_ref(&EventRecord::printContents));
143 }
144 }
145};
146
147struct CounterSetRecord
148{
149 uint16_t m_CounterSetUid;
150 uint16_t m_CounterSetCount;
151 std::string m_CounterSetName;
152
153 static void printHeader()
154 {
155 std::string header;
156
157 header.append(gatordmock::CentreAlignFormatting("Counter set name", 20));
158 header.append(" | ");
159 header.append(gatordmock::CentreAlignFormatting("UID",13));
160 header.append(" | ");
161 header.append(gatordmock::CentreAlignFormatting("Count",10));
162 header.append("\n");
163
164 std::cout << "\n" << "\n";
165 std::cout << gatordmock::CentreAlignFormatting("COUNTER SETS", static_cast<int>(header.size()));
166 std::cout << "\n";
167 std::cout << std::string(header.size(), '=') << "\n";
168
169 std::cout<< header;
170 }
171
172 void printContents() const
173 {
174 std::string body;
175
176 body.append(gatordmock::CentreAlignFormatting(m_CounterSetName, 20));
177 body.append(" | ");
178 body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetUid), 13));
179 body.append(" | ");
180 body.append(gatordmock::CentreAlignFormatting(std::to_string(m_CounterSetCount), 10));
181 body.append("\n");
182
183 std::cout << std::string(body.size(), '-') << "\n";
184
185 std::cout<< body;
186 }
187};
188
189struct DeviceRecord
190{
191 uint16_t m_DeviceUid;
192 uint16_t m_DeviceCores;
193 std::string m_DeviceName;
194
195 static void printHeader()
196 {
197 std::string header;
198
199 header.append(gatordmock::CentreAlignFormatting("Device name", 20));
200 header.append(" | ");
201 header.append(gatordmock::CentreAlignFormatting("UID",13));
202 header.append(" | ");
203 header.append(gatordmock::CentreAlignFormatting("Cores",10));
204 header.append("\n");
205
206 std::cout << "\n" << "\n";
207 std::cout << gatordmock::CentreAlignFormatting("DEVICES", static_cast<int>(header.size()));
208 std::cout << "\n";
209 std::cout << std::string(header.size(), '=') << "\n";
210 std::cout<< header;
211 }
212
213 void printContents() const
214 {
215 std::string body;
216
217 body.append(gatordmock::CentreAlignFormatting(m_DeviceName, 20));
218 body.append(" | ");
219 body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceUid), 13));
220 body.append(" | ");
221 body.append(gatordmock::CentreAlignFormatting(std::to_string(m_DeviceCores), 10));
222 body.append("\n");
223
224 std::cout << std::string(body.size(), '-') << "\n";
225 std::cout<< body;
226 }
227};
228
229struct CounterDirectory
230{
231 std::vector<CategoryRecord> m_Categories;
232 std::vector<CounterSetRecord> m_CounterSets;
233 std::vector<DeviceRecord> m_DeviceRecords;
234
235 void print() const
236 {
237 DeviceRecord::printHeader();
238 std::for_each(m_DeviceRecords.begin(), m_DeviceRecords.end(),
239 std::mem_fun_ref(&DeviceRecord::printContents));
240
241 CounterSetRecord::printHeader();
242 std::for_each(m_CounterSets.begin(), m_CounterSets.end(),
243 std::mem_fun_ref(&CounterSetRecord::printContents));
244
245 std::for_each(m_Categories.begin(), m_Categories.end(),
246 std::mem_fun_ref(&CategoryRecord::print));
247 std::cout << "\n";
248 }
249};
250
251} // namespace gatordmock
252
253} // namespace armnn