This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Display the completion ETA once we've done at least 20%
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>
Sun, 22 Aug 2021 16:39:26 +0000 (17:39 +0100)
committerPaul Evans <leonerd@leonerd.org.uk>
Tue, 24 Aug 2021 11:31:02 +0000 (12:31 +0100)
Porting/bench.pl

index b8d6755..1d730f6 100755 (executable)
@@ -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$@";