#!/usr/bin/perl

use strict;
use warnings;

my %sums = ();
my %counts = ();
my $mnl = 0;

while (my $line = <>) {
    if ($line =~ m/^N: Collection script ([^ ]+) for ([^: ]+):.* done \((\d+\.\d+)s\)/) {
        my $t = $2;
        $t = 'binary' if $t eq 'udeb';
        record ("coll/$1 [$t]", $3);
    } elsif ($line =~ m/^N: Finished check: ([^ ]+) \((\d+\.\d+)s\)/) {
        record ("checks/$1", $2);
    }
}


printf "%*s || Count ||  Avg (ms)  || Total (s)\n", $mnl, '';
foreach my $mod (sort {avg($b) <=> avg($a)} keys %sums) {
    printf "%*s || %5d || %10.6f || %6.3f\n", $mnl, $mod,
        $counts{$mod}, avg ($mod) * 1000, $sums{$mod};
}

sub avg {
    my ($entry) = @_;
    return $sums{$entry} / $counts{$entry};
}

sub record {
    my ($entry, $time) = @_;
    $mnl = length $entry if length $entry > $mnl;
    $sums{$entry} += $time;
    $counts{$entry}++;
}
