# Collection of statistics on many events
class PerfMap
super HashMap[String, PerfEntry]
redef fun provide_default_value(key)
do
if not key isa String then return super
var ts = new PerfEntry(key)
self[key] = ts
return ts
end
# Number of digits to the right of the decimal points in reports created by `to_s`
#
# Defaults to 4.
var precision = 4 is writable
redef fun to_s
do
var prec = precision
var table = new Map[String, Array[String]]
for event, stats in self do
table[event] = [event,
stats.min.to_precision(prec),
stats.max.to_precision(prec),
stats.avg.to_precision(prec),
stats.sum.to_precision(prec),
stats.count.to_s]
end
var widths = [0] * 6
for event, row in table do
for i in row.length.times do
widths[i] = widths[i].max(row[i].length)
end
end
var s = "# {"Event".justify(widths[0], 0.0)} {"min".justify(widths[1], 0.5)} {"max".justify(widths[2], 0.5)} {"avg".justify(widths[3], 0.5)} {"sum".justify(widths[4], 0.5)} {"count".justify(widths[5], 0.5)}\n"
var sorted_events = table.keys.to_a
alpha_comparator.sort sorted_events
for event in sorted_events do
var row = table[event]
s += "*"
for c in row.length.times do
var cell = row[c]
s += " "
if c == 0 then
s += cell.justify(widths[c], 0.0, '.')
else s += cell.justify(widths[c], 1.0)
end
s += "\n"
end
return s
end
end
lib/performance_analysis/performance_analysis.nit:50,1--107,3