From 697d21c3f9bc6243151372f988936662b9993510 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 24 Jul 2019 20:26:40 +0100 Subject: [PATCH] Improve formatting of StateTimer output. --- src/lib/timer.cc | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/lib/timer.cc b/src/lib/timer.cc index 2e138aabf..e4e7bdfdc 100644 --- a/src/lib/timer.cc +++ b/src/lib/timer.cc @@ -22,10 +22,11 @@ * @brief Some timing classes for debugging and profiling. */ -#include -#include #include "timer.h" #include "util.h" +#include "compose.hpp" +#include +#include #include "i18n.h" @@ -97,6 +98,11 @@ StateTimer::unset () set_internal (optional()); } +bool compare (pair a, pair b) +{ + return a.first > b.first; +} + /** Destroy StateTimer and generate a summary of the state timings on cout */ StateTimer::~StateTimer () { @@ -106,8 +112,25 @@ StateTimer::~StateTimer () unset (); - cout << _name << N_(":\n"); + int longest = 0; for (map::iterator i = _counts.begin(); i != _counts.end(); ++i) { - cout << N_("\t") << i->first << " " << i->second.total_time << " " << i->second.number << " " << (i->second.total_time / i->second.number) << N_("\n"); + longest = max (longest, int(i->first.length())); + } + + list > sorted; + + for (map::iterator i = _counts.begin(); i != _counts.end(); ++i) { + string name = i->first + string(longest + 1 - i->first.size(), ' '); + char buffer[64]; + snprintf (buffer, 64, "%.4f", i->second.total_time); + string total_time (buffer); + sorted.push_back (make_pair(i->second.total_time, String::compose("\t%1%2 %3 %4", name, total_time, i->second.number, (i->second.total_time / i->second.number)))); + } + + sorted.sort (compare); + + cout << _name << N_(":\n"); + for (list >::iterator i = sorted.begin(); i != sorted.end(); ++i) { + cout << N_("\t") << i->second << "\n"; } } -- 2.30.2