1#!/usr/bin/perl
2
3use strict;
4
5my %objects = ();
6my %events = ();
7my $empty_samples = 0;
8my $busy_samples = 0;
9my $ffl_samples = 0;
10while(my $line = <STDIN>) {
11	if(my ($samples) = $line =~ /SAMPLES EMPTY: (\d+)/) {
12		$empty_samples = $samples;
13		next;
14	}
15
16	chomp $line;
17	my ($obj, $event, $mode) = split /:/, $line or die "invalid line: $line";
18
19	++$ffl_samples if $mode eq 'FFL';
20	++$busy_samples;
21
22	$objects{$obj}++;
23	$events{"$obj:$event"}++;
24}
25
26my $total_samples = $empty_samples + $busy_samples;
27print "TOTAL SAMPLES: $total_samples\n";
28my $empty_percent = sprintf "%.1f", (100*$empty_samples/$total_samples);
29my $ffl_percent = sprintf "%.1f", (100*$ffl_samples/$total_samples);
30my $cmd_percent = sprintf "%.1f", (100*($busy_samples - $ffl_samples)/$total_samples);
31
32print "
33$empty_percent% of CPU usage was unrelated to object event handling
34$ffl_percent% of CPU usage was spent evaluating formulas
35$cmd_percent% of CPU usage was spent executing commands returned from formulas
36
37";
38
39sub output_map {
40	my $map = shift @_;
41	my @array = ();
42	foreach my $key (keys %$map) {
43		push @array, [$key, $map->{$key}];
44	}
45
46	@array = sort {$b->[1] <=> $a->[1]} @array;
47	foreach my $item (@array) {
48		my $a = $item->[0];
49		my $b = $item->[1];
50		my $percent = sprintf "%.1f", (100*$b/$busy_samples);
51		print "$percent% $a\n";
52	}
53}
54
55print " == OBJECTS ==\n";
56&output_map(\%objects);
57
58print "\n\n == EVENTS ==\n";
59&output_map(\%events);
60