From: drh <> Date: Mon, 21 Oct 2024 22:45:59 +0000 (+0000) Subject: In testrunner.tcl: Better estimates for ETC (Estimated Time to Completion). X-Git-Tag: major-relase~363 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0d7ede8d1c90c9781136e6f6e6d48f556c98f288;p=thirdparty%2Fsqlite.git In testrunner.tcl: Better estimates for ETC (Estimated Time to Completion). Show the ETC even for the single-line status reports. FossilOrigin-Name: 2a2f5f4e378338951cc2030ffbacd678e6a6eab142e39ee632c61be42345b092 --- diff --git a/manifest b/manifest index b9f39809b7..6c891d3ca4 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 5779696ae6..0d5c9c8489 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0284590f212b2d6ac6516e60350e924a1c29602e8ac8b997d0a5fa488a2dc9c1 +2a2f5f4e378338951cc2030ffbacd678e6a6eab142e39ee632c61be42345b092 diff --git a/test/testrunner.tcl b/test/testrunner.tcl index 266d65e2dc..55d1add183 100755 --- a/test/testrunner.tcl +++ b/test/testrunner.tcl @@ -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"