? sites/default/modules
? sites/default/settings.php
Index: includes/batch.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/batch.inc,v
retrieving revision 1.27
diff -u -p -r1.27 batch.inc
--- includes/batch.inc	1 Nov 2008 18:32:22 -0000	1.27
+++ includes/batch.inc	5 Nov 2008 03:34:22 -0000
@@ -224,7 +224,9 @@ function _batch_process() {
     // or all sets have been completed.
 
     // If we're in progressive mode, stop after 1 second.
-    if ($batch['progressive'] && timer_read('batch_processing') > 1000) {
+    if ($batch['progressive'] && ($timer = timer_read('batch_processing')) > 1000) {
+      // Accumulate total elapsed time.
+      $current_set['elapsed'] = $current_set['elapsed'] + $timer;
       break;
     }
   }
@@ -250,11 +252,17 @@ function _batch_process() {
 
     $current    = $total - $remaining + $finished;
     $percentage = $total ? floor($current / $total * 100) : 100;
+    $elapsed    = $current_set['elapsed'];
+    // Estimate with percentage in floating format.
+    $estimated  = $elapsed * $total / $current;
     $values = array(
       '@remaining'  => $remaining,
       '@total'      => $total,
       '@current'    => floor($current),
       '@percentage' => $percentage,
+      // gmdate require input as UNIX timestamp, not in microseconds.
+      '@elapsed'    => gmdate("H:i:s", floor($elapsed / 1000)),
+      '@estimated'  => gmdate("H:i:s", floor($estimated / 1000)),
     );
     $message = strtr($progress_message, $values);
     if (!empty($message)) {
Index: modules/simpletest/simpletest.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/simpletest.module,v
retrieving revision 1.26
diff -u -p -r1.26 simpletest.module
--- modules/simpletest/simpletest.module	1 Nov 2008 21:21:35 -0000	1.26
+++ modules/simpletest/simpletest.module	5 Nov 2008 03:34:22 -0000
@@ -359,7 +359,7 @@ function simpletest_run_tests($test_list
     ),
     'finished' => '_simpletest_batch_finished',
     'redirect' => 'admin/build/testing',
-    'progress_message' => '',
+    'progress_message' => t('Elapsed time: @elapsed. Estimated time: @estimated.'),
     'css' => array(drupal_get_path('module', 'simpletest') . '/simpletest.css'),
     'js' => array(drupal_get_path('module', 'simpletest') .'/simpletest.js'),
     'init_message' => t('Processing test @num of @max - %test.', array('%test' => $info['name'], '@num' => '1', '@max' => count($test_list))),
