#!/usr/bin/perl -ws
while(<>) {
    /f=(\d+) t=(\d+) (\S+)/ or next;
    $f = $1;
    $t = $2;
    $name = $3;
    $t0 ||= $t;
    $t1 = $t;
    if($name eq "encode_start") {
        if($app_t) {
            $app_n += $t-$app_t;
            $app_d++;
        }
        $encode_start[$f] = $t;
        $encode_start_last = $t;
    } elsif($name eq "prolog_cp") {
        $prolog_cp_n += $t - $encode_start_last;
        $prolog_cp_last = $t;
    } elsif($name eq "prolog_rc") {
        $prolog_rc_n += $t - $prolog_cp_last;
        $prolog_rc_last = $t;
    } elsif($name eq "thread_create") {
        $prolog_etc_n += $t - $prolog_rc_last;
        $prolog_n += $t - $encode_start_last;
        $prolog_d++;
        $thread_create[$f] = $t;
    } elsif($name eq "slice_start" or $name eq "start") {
        $create_n += $t - ($thread_create[$f] || $encode_start[$f]);
        $create_d++;
        $slice_start[$f] = $t;
    } elsif($name eq "slice_stop" or $name eq "stop") {
        $slice_cpu_n += $t - $slice_start[$f];
        $slice_cpu_d++;
        $slice_stop[$f] = $t;
    } elsif($name eq "join?") {
        $joinp[$f] = $t;
    } elsif($name eq "join.") {
        if($slice_stop[$f] > $joinp[$f]) {
            printf "%d (f=%d)\n", $t - $slice_stop[$f], $f if $v;
            $jf_n += $t - $slice_stop[$f];
            $jf_d++;
        } else {
            $idle_n += $joinp[$f] - $slice_stop[$f];
            $sf_n += $t - $joinp[$f];
            $sf_d++;
        }
        $joined[$f] = $t;
    } elsif($name eq "encode_stop") {
        $app_t = $t;
        $epilog_n += $t - $joined[$f];
        $epilog_d++;
    }
}

printf("avg wallclock per frame: %5d us (%d samples)\n", ($t1-$t0)/$slice_cpu_d, $slice_cpu_d);
printf("avg cpu per slice:       %5d us (%d samples)\n", $slice_cpu_n/$slice_cpu_d, $slice_cpu_d);
printf("avg prolog_cp:           %5d us (%d samples)\n", $prolog_cp_n/$prolog_d, $prolog_d) if $prolog_d;
printf("avg prolog_rc:           %5d us (%d samples)\n", $prolog_rc_n/$prolog_d, $prolog_d) if $prolog_d;
printf("avg prolog_etc:          %5d us (%d samples)\n", $prolog_etc_n/$prolog_d, $prolog_d) if $prolog_d;
printf("avg prolog:              %5d us (%d samples)\n", $prolog_n/$prolog_d, $prolog_d) if $prolog_d;
printf("avg thread create:       %5d us (%d samples)\n", $create_n/$create_d, $create_d);
printf("avg delay (join first):  %5d us (%d samples)\n", $jf_n/($jf_d||1), $jf_d);
printf("avg delay (stop first):  %5d us (%d samples)\n", $sf_n/($sf_d||1), $sf_d);
printf("avg idle before join:    %5d us (%d samples)\n", $idle_n/($sf_d||1), $sf_d);
printf("avg epilog:              %5d us (%d samples)\n", $epilog_n/$epilog_d, $epilog_d);
printf("avg between frames:      %5d us (%d samples)\n", $app_n/$app_d, $app_d);

