PerlBench
view release on metacpan or search on metacpan
perlbench-run view on Meta::CPAN
}
print "\n";
my $test;
for $test (@tests) {
unless (open(T, $test)) {
warn "Can't open $test: $!";
next;
}
my $name = $test;
$name =~ s,^benchmarks/,,;
$name =~ s,\.t$,,;
my $save_file = "$dir/$name/test.txt";
mkpath(dirname($save_file), 0, 0755);
open(SAVE, ">$save_file") || die "Can't create $save_file: $!";
(my $save_file_link = $save_file) =~ s,^\Q$dir\E/,,;
$save_file_link = htmlesc($save_file_link);
my %prop;
while (<T>) {
print SAVE $_;
next unless /^\#\s*(\w+)\s*:\s*(.*)/;
my($k,$v) = (lc($1), $2);
if (defined $prop{$k}) {
$prop{$k} .= "\n$v";
} else {
$prop{$k} = $v;
}
}
close(T);
close(SAVE) || die "Can't write $save_file: $!";
printf "%-20s", $name;
my $overlib_attr = "";
if ($use_overlib && $prop{name}) {
$overlib_attr = qq( onmouseover="return overlib('$prop{name}');" onmouseout="return nd();");
}
print INDEX qq( <tr>\n <th align=left><a href="$save_file_link"$overlib_attr>) . htmlesc($name) . "</a></th>\n";
my $scale;
my $p;
for my $p (@perls) {
if ($p->{version} < $prop{'require'}) {
# Can't run test
printf "%8s", "N/A";
print INDEX " <td>N/A</td>\n";
next;
}
my $res_file = "$dir/$name/" . $p->{label} . ".txt";
mkpath(dirname($res_file), 0, 0755);
open(RES, ">$res_file") || die "Can't create $res_file: $!";
(my $res_file_link = $res_file) =~ s,^\Q$dir\E/,,;
$res_file_link = htmlesc($res_file_link);
my $points;
my $popup_text = "";
$p->run_cmd(*P, $test, $factor, $p->{empty_cycles});
while (<P>) {
print RES $_;
if (/^Bench-Points:\s+(\S+)/) {
$points = $1;
}
if (/^(?:\w+-Time|CPU|Cycles-Per-Sec|Loop-Overhead):/) {
$popup_text .= "<br>" if length($popup_text);
$popup_text .= $_;
chomp($popup_text);
}
}
close(P);
close(RES);
my $overlib_attr = "";
if ($use_overlib) {
$overlib_attr = qq( onmouseover="return overlib('$popup_text');" onmouseout="return nd();");
}
# present results
unless (defined $points) {
printf "%8s", "-";
print INDEX qq( <td><a href="$res_file_link"$overlib_attr>??</a></td>\n);
next;
}
unless ($opt_s) {
unless (defined $scale) {
$scale = 100 / $points;
}
$points *= $scale;
}
printf "%8.0f", $points;
printf INDEX qq( <td align=right><a href="%s"%s>%.0f</a></td>\n), $res_file_link, $overlib_attr, $points;
$p->{point_sum} += $points;
$p->{no_tests}++;
}
print INDEX " </tr>\n";
print "\n";
}
print "\n";
printf "%-20s", "AVERAGE";
for my $p (@perls) {
printf "%8.0f", $p->{point_sum} / $p->{no_tests};
}
print INDEX " <tr>\n";
print INDEX " <th align=left>Average</th>\n";
for my $p (@perls) {
printf INDEX qq( <td align=right>%.0f</td>\n), $p->{point_sum} / $p->{no_tests};
}
print INDEX " </tr>\n";
print INDEX "</table>\n";
print INDEX "<p><small>Higher numbers are better. 200 is twice as fast as 100.</small></p>\n";
print INDEX "<h2>Configuration summary</h2>\n";
print INDEX "<p>Test ran on a $^O machine";
if ($^O ne "MSWin32") {
my $uname = `uname -a`;
if ($uname) {
print INDEX qq( that reports its uname as ") . htmlesc($uname) . qq(");
}
}
print INDEX ".\n";
print INDEX " Test run completed at " . substr(time2iso(), 11) . ".\n";
print INDEX "</p>\n";
print INDEX "<table border=1>\n";
print INDEX " <tr>\n <th> </th>\n";
for my $p (@perls) {
my $h = htmlesc($p->{label});
print INDEX qq( <th><a href="CONFIG-$h.txt">$h</a></th>\n);
}
for my $k ("name", "version", "path") {
print INDEX " <tr>\n <th>$k</th>\n";
for my $p (@perls) {
print INDEX " <td>" . htmlesc($p->{$k}) . "</td>\n";
( run in 1.175 second using v1.01-cache-2.11-cpan-364913b4093 )