]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In testrunner.tcl: Better estimates for ETC (Estimated Time to Completion).
authordrh <>
Mon, 21 Oct 2024 22:45:59 +0000 (22:45 +0000)
committerdrh <>
Mon, 21 Oct 2024 22:45:59 +0000 (22:45 +0000)
Show the ETC even for the single-line status reports.

FossilOrigin-Name: 2a2f5f4e378338951cc2030ffbacd678e6a6eab142e39ee632c61be42345b092

manifest
manifest.uuid
test/testrunner.tcl

index b9f39809b797e92f423c15b23947264e57efd1a3..6c891d3ca4466bb81585d5cd50320ddeff2bd4c6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssqlite3rebaser_...\sto\sthe\sAPI\ssymbols\saccepted\sby\sthe\s'checksymbols'\smakefile\starget.
-D 2024-10-21T21:53:08.916
+C In\stestrunner.tcl:\s\sBetter\sestimates\sfor\sETC\s(Estimated\sTime\sto\sCompletion).\nShow\sthe\sETC\seven\sfor\sthe\ssingle-line\sstatus\sreports.
+D 2024-10-21T22:45:59.158
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1721,7 +1721,7 @@ F test/temptable2.test 76821347810ecc88203e6ef0dd6897b6036ac788e9dd3e6b04fd4d163
 F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637
 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc
 F test/tester.tcl 7b44f1a9b9a2de8112695b908afc21dd9a68cd2d44e84b73f1b27b53492c0d59
-F test/testrunner.tcl 6215e11be403a16947bbb3b31cf4905b417155df242e4c5229f85bcda1c28f50 x
+F test/testrunner.tcl 1472b8c57c124c7eed934a2cbc955b0c0e0a948a4608546598195267bbd4b2fd x
 F test/testrunner_data.tcl c7b3b911e44f7e8c01cc6bc7571e16115cdc2e4db46630bd2acd7a931a46380e
 F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899
 F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502
@@ -2219,8 +2219,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 03a9703e27c44437c39363d0baf82db4ebc94538a0f28411c85dda156f82636e
-R 6ee4864245abc117fdbf4575b6f7f982
-U stephan
-Z 125137dcf74d7a719c01e300208c0b76
+P 0284590f212b2d6ac6516e60350e924a1c29602e8ac8b997d0a5fa488a2dc9c1
+R 2ac47cb3cae83d7727a58a5f1336d6ea
+U drh
+Z e2b1dfbad8a2776fb071a8b0b9eafb7e
 # Remove this line to create a well-formed Fossil manifest.
index 5779696ae6bd152c41a1885815e46bd9fcbd581b..0d5c9c84896151e3b7bcf5efb4033b394462c7a9 100644 (file)
@@ -1 +1 @@
-0284590f212b2d6ac6516e60350e924a1c29602e8ac8b997d0a5fa488a2dc9c1
+2a2f5f4e378338951cc2030ffbacd678e6a6eab142e39ee632c61be42345b092
index 266d65e2dcf3df4f4586d059eeab0fd7b4da9be2..55d1add1833d7cebcc0eb5a691767f9a9b96fb29 100755 (executable)
@@ -324,6 +324,8 @@ set TRG(schema) {
     /* Fields updated as jobs run */
     starttime INTEGER,                  -- Start time (milliseconds since 1970)
     endtime INTEGER,                    -- End time
+    span INTEGER,                       -- Total run-time in milliseconds
+    estwork INTEGER,                    -- Estimated amount of work
     state TEXT CHECK( state IN ('','ready','running','done','failed','omit') ),
     ntest INT,                          -- Number of test cases run
     nerr INT,                           -- Number of errors reported
@@ -342,6 +344,13 @@ set TRG(schema) {
 }
 #-------------------------------------------------------------------------
 
+# Estimated amount of work required by displaytype, relative to 'tcl'
+#
+set estwork(tcl)    1
+set estwork(fuzz)   11
+set estwork(bld)    56
+set estwork(make)   97
+
 #--------------------------------------------------------------------------
 # Check if this script is being invoked to run a single file. If so,
 # run it.
@@ -495,19 +504,21 @@ proc show_status {db cls} {
   }]
 
   set total 0
-  foreach s {"" ready running done failed} { set S($s) 0 }
+  foreach s {"" ready running done failed omit} { set S($s) 0; set W($s) 0; }
+  set workpending 0
   $db eval {
-    SELECT state, count(*) AS cnt FROM jobs GROUP BY 1
+    SELECT state, count(*) AS cnt, sum(estwork) AS ew FROM jobs GROUP BY 1
   } {
     incr S($state) $cnt
-    incr total $cnt
+    incr W($state) $ew
+    incr totalw $ew
   }
   set nt 0
   set ne 0
   $db eval {
     SELECT sum(ntest) AS nt, sum(nerr) AS ne FROM jobs HAVING nt>0
   } break
-  set fin [expr $S(done)+$S(failed)]
+  set fin [expr $W(done)+$W(failed)+$W(omit)]
   if {$cmdline!=""} {set cmdline " $cmdline"}
 
   if {$cls} {
@@ -522,15 +533,12 @@ proc show_status {db cls} {
 
   set srcdir [file dirname [file dirname $TRG(info_script)]]
   set line "Running: $S(running) (max: $nJob)"
-  if {$S(running)>0 && $fin>100 && $fin>0.05*$total} {
-    # Only estimate the time remaining after completing at least 100
-    # jobs amounting to 10% of the total.  Never estimate less than
-    # 2% of the total time used so far.
-    set tmleft [expr {($tm/$fin)*($total-$fin)}]
+  if {$S(running)>0 && $fin>10} {
+    set tmleft [expr {($tm/$fin)*($totalw-$fin)}]
     if {$tmleft<0.02*$tm} {
       set tmleft [expr {$tm*0.02}]
     }
-    append line " est time left [elapsetime $tmleft]"
+    append line " ETC [elapsetime $tmleft]"
   }
   puts [format %-79.79s $line]
   if {$S(running)>0} {
@@ -914,6 +922,7 @@ proc r_get_next_job {iJob} {
 # Returns the jobid value for the new job.
 # 
 proc add_job {args} {
+  global estwork
 
   set options {
       -displaytype -displayname -build -dirname 
@@ -938,25 +947,29 @@ proc add_job {args} {
 
   set state ""
   if {$A(-depid)==""} { set state ready }
+  set type $A(-displaytype)
+  set ew $estwork($type)
 
   trdb eval {
     INSERT INTO jobs(
-      displaytype, displayname, build, dirname, cmd, depid, priority,
+      displaytype, displayname, build, dirname, cmd, depid, priority, estwork,
       state
     ) VALUES (
-      $A(-displaytype),
+      $type,
       $A(-displayname),
       $A(-build),
       $A(-dirname),
       $A(-cmd),
       $A(-depid),
       $A(-priority),
+      $ew,
       $state
     )
   }
 
   trdb last_insert_rowid
 }
+       
 
 # Argument $build is either an empty string, or else a list of length 3 
 # describing the job to build testfixture. In the usual form:
@@ -1283,8 +1296,8 @@ proc make_new_testset {} {
     trdb eval { REPLACE INTO config VALUES('start', $tm ); }
 
     add_jobs_from_cmdline $TRG(patternlist)
-  }
 
+  }
 }
 
 proc mark_job_as_finished {jobid output state endtm} {
@@ -1309,10 +1322,12 @@ proc mark_job_as_finished {jobid output state endtm} {
     if {[info exists pltfm]} {set pltfm [string trim $pltfm]}
     trdb eval {
       UPDATE jobs 
-        SET output=$output, state=$state, endtime=$endtm,
+        SET output=$output, state=$state, endtime=$endtm, span=$endtm-starttime,
             ntest=$ntest, nerr=$nerr, svers=$svers, pltfm=$pltfm
         WHERE jobid=$jobid;
       UPDATE jobs SET state=$childstate WHERE depid=$jobid;
+      UPDATE config SET value=value+$nerr WHERE name='nfail';
+      UPDATE config SET value=value+$ntest WHERE name='ntest';
     }
   }
 }
@@ -1460,17 +1475,23 @@ proc progress_report {} {
       show_status trdb 1
     }
   } else {
-    set tm [expr [clock_milliseconds] - $TRG(starttime)]
-    set tm [format "%d" [expr int($tm/1000.0 + 0.5)]]
+    set tmms [expr [clock_milliseconds] - $TRG(starttime)]
+    set tm [format "%d" [expr int($tmms/1000.0 + 0.5)]]
   
+    set wtotal 0
+    set wdone 0
     r_write_db {
       trdb eval { 
-        SELECT displaytype, state, count(*) AS cnt 
+        SELECT displaytype, state, count(*) AS cnt, sum(estwork) AS ew
         FROM jobs 
         GROUP BY 1, 2 
       } {
         set v($state,$displaytype) $cnt
         incr t($displaytype) $cnt
+        incr wtotal $ew
+        if {$state=="done" || $state=="failed" || $state=="omit"} {
+          incr wdone $ew
+        }
       }
     }
   
@@ -1486,11 +1507,15 @@ proc progress_report {} {
         lappend text "r$v(running,$j)"
       }
     }
+    if {$wdone>0} {
+      set tmleft [expr {($tmms/$wdone)*($wtotal-$wdone)}]
+      append text " ETC [elapsetime $tmleft]"
+    }
   
     if {[info exists TRG(reportlength)]} {
       puts -nonewline "[string repeat " " $TRG(reportlength)]\r"
     }
-    set report "${tm} [join $text { }]"
+    set report "[elapsetime $tmms] [join $text { }]"
     set TRG(reportlength) [string length $report]
     if {[string length $report]<100} {
       puts -nonewline "$report\r"