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