xref: /aosp_15_r20/external/regex-re2/benchlog/mktable (revision ccdc9c3e24c519bfa4832a66aa2e83a52c19f295)
1*ccdc9c3eSSadaf Ebrahimi#!/usr/bin/perl
2*ccdc9c3eSSadaf Ebrahimi# XXX
3*ccdc9c3eSSadaf Ebrahimi
4*ccdc9c3eSSadaf Ebrahimisub table() {
5*ccdc9c3eSSadaf Ebrahimi	my ($name) = @_;
6*ccdc9c3eSSadaf Ebrahimi	print <<'EOF';
7*ccdc9c3eSSadaf Ebrahimi<table border=0>
8*ccdc9c3eSSadaf Ebrahimi<tr><th>System</th><th>PCRE</th><th>RE2</th></tr>
9*ccdc9c3eSSadaf EbrahimiEOF
10*ccdc9c3eSSadaf Ebrahimi	foreach my $sys (@sys) {
11*ccdc9c3eSSadaf Ebrahimi		my $ns_pcre = $data{$sys}->{sprintf($name, "PCRE")}->{'ns/op'};
12*ccdc9c3eSSadaf Ebrahimi		my $ns_re2 = $data{$sys}->{sprintf($name, "RE2")}->{'ns/op'};
13*ccdc9c3eSSadaf Ebrahimi		printf "<tr><td>%s</td><td>%.1f µs</td><td>%.1f µs</td></tr>\n", $sysname{$sys}, $ns_pcre/1000., $ns_re2/1000.;
14*ccdc9c3eSSadaf Ebrahimi	}
15*ccdc9c3eSSadaf Ebrahimi	print <<'EOF';
16*ccdc9c3eSSadaf Ebrahimi<tr height=5><td colspan=3></td></tr>
17*ccdc9c3eSSadaf Ebrahimi</table>
18*ccdc9c3eSSadaf EbrahimiEOF
19*ccdc9c3eSSadaf Ebrahimi}
20*ccdc9c3eSSadaf Ebrahimi
21*ccdc9c3eSSadaf Ebrahimi@sizes = (
22*ccdc9c3eSSadaf Ebrahimi	"8", "16", "32", "64", "128", "256", "512",
23*ccdc9c3eSSadaf Ebrahimi	"1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", "512K",
24*ccdc9c3eSSadaf Ebrahimi	"1M", "2M", "4M", "8M", "16M"
25*ccdc9c3eSSadaf Ebrahimi);
26*ccdc9c3eSSadaf Ebrahimi
27*ccdc9c3eSSadaf Ebrahimi%color = (
28*ccdc9c3eSSadaf Ebrahimi	"PCRE" => "0.7 0 0",
29*ccdc9c3eSSadaf Ebrahimi	"RE2" => "0 0 1",
30*ccdc9c3eSSadaf Ebrahimi);
31*ccdc9c3eSSadaf Ebrahimi
32*ccdc9c3eSSadaf Ebrahimi$ngraph = 0;
33*ccdc9c3eSSadaf Ebrahimi
34*ccdc9c3eSSadaf Ebrahimisub graph() {
35*ccdc9c3eSSadaf Ebrahimi	my ($name) = @_;
36*ccdc9c3eSSadaf Ebrahimi
37*ccdc9c3eSSadaf Ebrahimi	my $sys = "wreck";
38*ccdc9c3eSSadaf Ebrahimi	my $base = sprintf("regexp3g%d", ++$ngraph);
39*ccdc9c3eSSadaf Ebrahimi
40*ccdc9c3eSSadaf Ebrahimi	open(JGR, ">$base.jgr") || die "open >$base.jgr: $!";
41*ccdc9c3eSSadaf Ebrahimi	printf JGR "bbox -20 -12 392 95\n";
42*ccdc9c3eSSadaf Ebrahimi	printf JGR "newgraph clip x_translate 0.25 y_translate 0.25\n";
43*ccdc9c3eSSadaf Ebrahimi	$ymax = 0;
44*ccdc9c3eSSadaf Ebrahimi	%lastx = ();
45*ccdc9c3eSSadaf Ebrahimi	%lasty = ();
46*ccdc9c3eSSadaf Ebrahimi	foreach my $who ("PCRE", "RE2") {
47*ccdc9c3eSSadaf Ebrahimi		printf JGR "newcurve pts\n";
48*ccdc9c3eSSadaf Ebrahimi		for(my $i=0; $i<@sizes; $i++) {
49*ccdc9c3eSSadaf Ebrahimi			my $key = sprintf("%s%s/%s", $name, $who, $sizes[$i]);
50*ccdc9c3eSSadaf Ebrahimi			my $val = $data{$sys}->{$key}->{'MB/s'};
51*ccdc9c3eSSadaf Ebrahimi			next if !defined($val);
52*ccdc9c3eSSadaf Ebrahimi			if($val > $ymax) {
53*ccdc9c3eSSadaf Ebrahimi				$ymax = $val;
54*ccdc9c3eSSadaf Ebrahimi			}
55*ccdc9c3eSSadaf Ebrahimi			$lastx{$who} = $i;
56*ccdc9c3eSSadaf Ebrahimi			$lasty{$who} = $val;
57*ccdc9c3eSSadaf Ebrahimi			printf JGR "$i %f (* %s *)\n", $val, $key;
58*ccdc9c3eSSadaf Ebrahimi		}
59*ccdc9c3eSSadaf Ebrahimi		my $color = $color{$who};
60*ccdc9c3eSSadaf Ebrahimi		printf JGR "marktype none color $color linethickness 2 linetype solid label : $who\n";
61*ccdc9c3eSSadaf Ebrahimi	}
62*ccdc9c3eSSadaf Ebrahimi	my $n = @sizes;
63*ccdc9c3eSSadaf Ebrahimi	printf JGR "xaxis min -1 max $n size 5 label : text size (bytes)\n";
64*ccdc9c3eSSadaf Ebrahimi	printf JGR "  no_auto_hash_marks hash_labels fontsize 9\n";
65*ccdc9c3eSSadaf Ebrahimi	for($i=0; $i<@sizes; $i+=3) {
66*ccdc9c3eSSadaf Ebrahimi		printf JGR "  hash_at $i hash_label at $i : $sizes[$i]\n";
67*ccdc9c3eSSadaf Ebrahimi	}
68*ccdc9c3eSSadaf Ebrahimi	my $y = 1;
69*ccdc9c3eSSadaf Ebrahimi	while(10*$y <= $ymax) {
70*ccdc9c3eSSadaf Ebrahimi		$y = 10*$y;
71*ccdc9c3eSSadaf Ebrahimi	}
72*ccdc9c3eSSadaf Ebrahimi	for($i=2; $i<=10; $i++) {
73*ccdc9c3eSSadaf Ebrahimi		if($i*$y > $ymax) {
74*ccdc9c3eSSadaf Ebrahimi			$y = $i*$y;
75*ccdc9c3eSSadaf Ebrahimi			last;
76*ccdc9c3eSSadaf Ebrahimi		}
77*ccdc9c3eSSadaf Ebrahimi	}
78*ccdc9c3eSSadaf Ebrahimi	foreach my $who ("PCRE", "RE2") {
79*ccdc9c3eSSadaf Ebrahimi		$x1 = $lastx{$who};
80*ccdc9c3eSSadaf Ebrahimi		$y1 = $lasty{$who};
81*ccdc9c3eSSadaf Ebrahimi		$x1 *= 1.01;
82*ccdc9c3eSSadaf Ebrahimi		my $v = "vjc";
83*ccdc9c3eSSadaf Ebrahimi		if($y1 < 0.05 * $y) {
84*ccdc9c3eSSadaf Ebrahimi			$v = "vjb";
85*ccdc9c3eSSadaf Ebrahimi			$y1 = 0.05 * $y;
86*ccdc9c3eSSadaf Ebrahimi		}
87*ccdc9c3eSSadaf Ebrahimi		printf JGR "newstring x $x1 y $y1 hjl $v : $who\n";
88*ccdc9c3eSSadaf Ebrahimi	}
89*ccdc9c3eSSadaf Ebrahimi	printf JGR "yaxis min 0 max $y size 1 label : speed (MB/s)\n";
90*ccdc9c3eSSadaf Ebrahimi	printf JGR "  hash_labels fontsize 9\n";
91*ccdc9c3eSSadaf Ebrahimi	# printf JGR "legend defaults font Times-Roman fontsize 10 x 0 y $y hjl vjt\n";
92*ccdc9c3eSSadaf Ebrahimi
93*ccdc9c3eSSadaf Ebrahimi	system("jgraph $base.jgr >$base.eps"); # die "system: $!";
94*ccdc9c3eSSadaf Ebrahimi	system("gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dEPSCrop -sDEVICE=png16m -r100 -sOutputFile=$base.png -dBATCH -dQUIT -dQUIET -dNOPAUSE $base.eps");
95*ccdc9c3eSSadaf Ebrahimi
96*ccdc9c3eSSadaf Ebrahimi	printf "<img src=$base.png>\n"
97*ccdc9c3eSSadaf Ebrahimi
98*ccdc9c3eSSadaf Ebrahimi}
99*ccdc9c3eSSadaf Ebrahimi
100*ccdc9c3eSSadaf Ebrahimisub skip() {
101*ccdc9c3eSSadaf Ebrahimi	while(<>) {
102*ccdc9c3eSSadaf Ebrahimi		if(/^<!-- -->/) {
103*ccdc9c3eSSadaf Ebrahimi			print;
104*ccdc9c3eSSadaf Ebrahimi			last;
105*ccdc9c3eSSadaf Ebrahimi		}
106*ccdc9c3eSSadaf Ebrahimi	}
107*ccdc9c3eSSadaf Ebrahimi}
108*ccdc9c3eSSadaf Ebrahimi
109*ccdc9c3eSSadaf Ebrahimi@sys = ("r70", "c2", "wreck", "mini");
110*ccdc9c3eSSadaf Ebrahimi%sysname = (
111*ccdc9c3eSSadaf Ebrahimi	"r70" => "AMD Opteron 8214 HE, 2.2 GHz",
112*ccdc9c3eSSadaf Ebrahimi	"c2" => "Intel Core2 Duo E7200, 2.53 GHz",
113*ccdc9c3eSSadaf Ebrahimi	"wreck" => "Intel Xeon 5150, 2.66 GHz (Mac Pro)",
114*ccdc9c3eSSadaf Ebrahimi	"mini" => "Intel Core2 T5600, 1.83 GHz (Mac Mini)",
115*ccdc9c3eSSadaf Ebrahimi);
116*ccdc9c3eSSadaf Ebrahimi
117*ccdc9c3eSSadaf Ebrahimi%func = (
118*ccdc9c3eSSadaf Ebrahimi	"table" => \&table,
119*ccdc9c3eSSadaf Ebrahimi	"graph" => \&graph,
120*ccdc9c3eSSadaf Ebrahimi
121*ccdc9c3eSSadaf Ebrahimi);
122*ccdc9c3eSSadaf Ebrahimi
123*ccdc9c3eSSadaf Ebrahimiforeach my $sys (@sys) {
124*ccdc9c3eSSadaf Ebrahimi	open(F, "benchlog.$sys") || die "open benchlog.$sys: $!";
125*ccdc9c3eSSadaf Ebrahimi	my %sysdat;
126*ccdc9c3eSSadaf Ebrahimi	while(<F>) {
127*ccdc9c3eSSadaf Ebrahimi		if(/^([A-Za-z0-9_\/]+)\s+(\d+)\s+(\d+) ns\/op/) {
128*ccdc9c3eSSadaf Ebrahimi			my %row;
129*ccdc9c3eSSadaf Ebrahimi			$row{"name"} = $1;
130*ccdc9c3eSSadaf Ebrahimi			$row{"iter"} = $2;
131*ccdc9c3eSSadaf Ebrahimi			$row{"ns/op"} = $3;
132*ccdc9c3eSSadaf Ebrahimi			if(/([\d.]+) MB\/s/){
133*ccdc9c3eSSadaf Ebrahimi				$row{"MB/s"} = $1;
134*ccdc9c3eSSadaf Ebrahimi			}
135*ccdc9c3eSSadaf Ebrahimi			$sysdat{$row{"name"}} = \%row;
136*ccdc9c3eSSadaf Ebrahimi		}
137*ccdc9c3eSSadaf Ebrahimi	}
138*ccdc9c3eSSadaf Ebrahimi	close F;
139*ccdc9c3eSSadaf Ebrahimi	$data{$sys} = \%sysdat;
140*ccdc9c3eSSadaf Ebrahimi}
141*ccdc9c3eSSadaf Ebrahimi
142*ccdc9c3eSSadaf Ebrahimiwhile(<>) {
143*ccdc9c3eSSadaf Ebrahimi	print;
144*ccdc9c3eSSadaf Ebrahimi	if(/^<!-- benchlog (\w+) -->/) {
145*ccdc9c3eSSadaf Ebrahimi		$func{$1}();
146*ccdc9c3eSSadaf Ebrahimi		skip();
147*ccdc9c3eSSadaf Ebrahimi		next;
148*ccdc9c3eSSadaf Ebrahimi	}
149*ccdc9c3eSSadaf Ebrahimi	if(/^<!-- benchlog (\w+) ([%\w]+) -->/) {
150*ccdc9c3eSSadaf Ebrahimi		$func{$1}($2);
151*ccdc9c3eSSadaf Ebrahimi		skip();
152*ccdc9c3eSSadaf Ebrahimi		next;
153*ccdc9c3eSSadaf Ebrahimi	}
154*ccdc9c3eSSadaf Ebrahimi}
155*ccdc9c3eSSadaf Ebrahimi
156