@@ -182,6 +182,44 @@ std::vector<std::vector<Event>> DisableProfiler() {
182
182
void ParseEvents (std::vector<std::vector<Event>>& events,
183
183
EventSortingKey sorted_by) {
184
184
if (g_profiler_place == " " ) return ;
185
+
186
+ std::string sorted_domain;
187
+ std::function<bool (EventItem&, EventItem&)> sorted_func;
188
+ switch (sorted_by) {
189
+ case EventSortingKey::kCalls :
190
+ sorted_domain = " number of calls" ;
191
+ sorted_func = [](EventItem& a, EventItem& b) {
192
+ return a.calls > b.calls ;
193
+ };
194
+ break ;
195
+ case EventSortingKey::kTotal :
196
+ sorted_domain = " total time" ;
197
+ sorted_func = [](EventItem& a, EventItem& b) {
198
+ return a.total_time > b.total_time ;
199
+ };
200
+ break ;
201
+ case EventSortingKey::kMin :
202
+ sorted_domain = " minimum time" ;
203
+ sorted_func = [](EventItem& a, EventItem& b) {
204
+ return a.min_time > b.min_time ;
205
+ };
206
+ break ;
207
+ case EventSortingKey::kMax :
208
+ sorted_domain = " maximum time" ;
209
+ sorted_func = [](EventItem& a, EventItem& b) {
210
+ return a.max_time > b.max_time ;
211
+ };
212
+ break ;
213
+ case EventSortingKey::kAve :
214
+ sorted_domain = " average time" ;
215
+ sorted_func = [](EventItem& a, EventItem& b) {
216
+ return a.ave_time > b.ave_time ;
217
+ };
218
+ break ;
219
+ default :
220
+ sorted_domain = " event end time" ;
221
+ }
222
+
185
223
std::vector<std::vector<EventItem>> events_table;
186
224
size_t max_name_width = 0 ;
187
225
for (size_t i = 0 ; i < events.size (); i++) {
@@ -240,21 +278,7 @@ void ParseEvents(std::vector<std::vector<Event>>& events,
240
278
}
241
279
// sort
242
280
if (sorted_by != EventSortingKey::kDefault ) {
243
- std::sort (event_items.begin (), event_items.end (),
244
- [&](EventItem& a, EventItem& b) {
245
- switch (sorted_by) {
246
- case EventSortingKey::kCalls :
247
- return a.calls > b.calls ;
248
- case EventSortingKey::kTotal :
249
- return a.total_time > b.total_time ;
250
- case EventSortingKey::kMin :
251
- return a.min_time > b.min_time ;
252
- case EventSortingKey::kMax :
253
- return a.max_time > b.max_time ;
254
- default :
255
- return a.ave_time > b.ave_time ;
256
- }
257
- });
281
+ std::sort (event_items.begin (), event_items.end (), sorted_func);
258
282
}
259
283
260
284
events_table.push_back (event_items);
@@ -268,39 +292,19 @@ void ParseEvents(std::vector<std::vector<Event>>& events,
268
292
}
269
293
270
294
// Print report
271
- PrintProfilingReport (events_table, sorted_by , max_name_width + 4 , 12 );
295
+ PrintProfilingReport (events_table, sorted_domain , max_name_width + 4 , 12 );
272
296
}
273
297
274
298
void PrintProfilingReport (std::vector<std::vector<EventItem>>& events_table,
275
- EventSortingKey sorted_by , const size_t name_width,
299
+ std::string& sorted_domain , const size_t name_width,
276
300
const size_t data_width) {
277
301
// Output header information
278
302
std::cout << " \n ------------------------->"
279
303
<< " Profiling Report "
280
304
<< " <-------------------------\n\n " ;
281
305
std::cout << " Place: " << g_profiler_place << std::endl;
282
306
std::cout << " Time unit: ms" << std::endl;
283
- std::string sort_domain = " event end time" ;
284
- switch (sorted_by) {
285
- case EventSortingKey::kCalls :
286
- sort_domain = " number of calls" ;
287
- break ;
288
- case EventSortingKey::kTotal :
289
- sort_domain = " total time" ;
290
- break ;
291
- case EventSortingKey::kMin :
292
- sort_domain = " minimum time" ;
293
- break ;
294
- case EventSortingKey::kMax :
295
- sort_domain = " maximum time" ;
296
- break ;
297
- case EventSortingKey::kAve :
298
- sort_domain = " average time" ;
299
- break ;
300
- default :
301
- break ;
302
- }
303
- std::cout << " Sorted by " << sort_domain
307
+ std::cout << " Sorted by " << sorted_domain
304
308
<< " in descending order in the same thread\n\n " ;
305
309
// Output events table
306
310
std::cout.setf (std::ios::left);
0 commit comments