diff --git a/Porting/bench.pl b/Porting/bench.pl index b8d6755ff965..1d730f6cd04d 100755 --- a/Porting/bench.pl +++ b/Porting/bench.pl @@ -1219,8 +1219,9 @@ sub grind_run { my %fds; # map fds to jobs my $select = IO::Select->new(); - my $njobs = scalar @jobs; - my $donejobs = 0; + my $njobs = scalar @jobs; + my $donejobs = 0; + my $starttime = time(); while (@jobs or $running) { @@ -1237,8 +1238,21 @@ sub grind_run { my ($in, $out, $pid); $donejobs++; - warn sprintf "Starting %s (%d of %d, %.2f%%)\n", - $id, $donejobs, $njobs, 100 * $donejobs / $njobs if $OPTS{verbose}; + if($OPTS{verbose}) { + my $donefrac = $donejobs / $njobs; + my $eta = ""; + # Once we've done at least 20% we'll have a good estimate of + # the total runtime, hence ETA + if($donefrac >= 0.2) { + my $now = time(); + my $duration = ($now - $starttime) / $donefrac; + my $remaining = ($starttime + $duration) - $now; + $eta = sprintf ", remaining %d:%02d", + $remaining / 60, $remaining % 60; + } + warn sprintf "Starting %s (%d of %d, %.2f%%%s)\n", + $id, $donejobs, $njobs, 100 * $donefrac, $eta; + } eval { $pid = IPC::Open2::open2($out, $in, $cmd); 1; } or die "Error: while starting cachegrind subprocess" ." for $id:\n$@";