File: parse_profile.pl

package info (click to toggle)
librdf-query-perl 2.919-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,580 kB
  • sloc: perl: 30,628; javascript: 131; sh: 13; makefile: 2
file content (30 lines) | stat: -rwxr-xr-x 681 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env perl

use strict;
use warnings;
no warnings 'redefine';

my %times;
my %elapsed;
while (<>) {
	next unless m#([<>]) (\S+) ([.0-9]+)#;
	my $enter	= ($1 eq '>');
	my $sub		= $2;
	my $time	= $3;
	if ($enter) {
		push( @{ $times{ $sub } }, $time );
	} else {
		my $start	= pop( @{ $times{ $sub } } );
		my $elapsed	= $time - $start;
		$elapsed{ $sub }[0]++;
		$elapsed{ $sub }[1]	+= $elapsed;
	}
}

print "Calls\tS\t\tms/C\t\tSub\n";
foreach my $sub (sort { $elapsed{$b}[1] <=> $elapsed{$a}[1] } (keys %elapsed)) {
	my $calls	= $elapsed{$sub}[0];
	my $cum		= $elapsed{$sub}[1];
	my $cumc	= 1000 * $cum / $calls;
	printf("%d\t%f\t%f\t%s\n", $calls, $cum, $cumc, $sub);
}