Add more details to server RPC test cases in static docs
[hiphop-php.git] / hphp / tools / perf-annot
blobed482e8e5aeea9c160cb8e0128ab88ea04976f69
1 #!/usr/bin/perl
3 use strict;
4 use warnings FATAL => qw/all/;
5 use Getopt::Long;
7 my($event,$debug);
9 GetOptions(
10 "event=s" => \$event,
11 "debug=i" => \$debug,
14 $event = "cycles" unless defined $event;
16 die "$0 <options> irdump script" unless @ARGV == 2;
18 my$irdump = shift;
19 my$script = shift;
21 my$addrs = read_irdump($irdump);
22 count_hits($addrs, $script);
23 annotate($irdump, $addrs);
25 sub read_irdump {
26 my($file) = @_;
28 my%addrs;
29 open IRDUMP, $file or die "Error opening irdump $file: $!";
30 while (<IRDUMP>) {
31 if (m/^\s*0x0*([a-f0-9]+):/) {
32 $addrs{$1} = { count => 0 };
35 close IRDUMP or die "Error closing irdump $file: $!";
36 return \%addrs;
39 sub count_hits {
40 my($addrs, $file) = @_;
42 open SCRIPT, $file or die "Error opening script $file: $!";
43 my$cur_event;
44 while (<SCRIPT>) {
45 if (defined $cur_event) {
46 if ($cur_event eq $event) {
47 if (m/^\s+0*([0-9a-fA-F]+)\s+(.*?)\s+\(([^\(\)]*)\)\s*$/) {
48 if (defined $addrs->{$1}) {
49 $addrs->{$1}{count} += 1;
51 undef $cur_event;
54 } elsif (m/^\s*#/) {
55 next;
56 } elsif (m/^\s*(\S+)\s+(\d+)(?:\s+\[\d+\])?\s+(?:(\d+\.\d+):)?\s*(?:\d+\s*)?([-\w]+)(?::p+)?:\s*$/) {
57 $cur_event = $4;
60 close SCRIPT or die "Error closing script $file: $!";
63 sub annotate {
64 my($file, $addrs) = @_;
66 my$total = 0;
67 open IRDUMP, $file or die "Error opening irdump $file: $!";
68 while (<IRDUMP>) {
69 if (m/^\s*0x([a-f0-9]+):/) {
70 if (defined $addrs->{$1}) {
71 my$c = $addrs->{$1}{count};
72 if ($c) {
73 $total += $c;
74 $_ =~ s/^\s+//;
75 $_ = sprintf "Q%6d %s", $c, $_;
79 print;
81 close IRDUMP or die "Error closing irdump $file: $!";
83 print "Total: $total\n";