1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

tests/fate-run: add testing with a random number of threads

Useful for discovering bugs that depend on a specific thread count.

Use like THREADS=randomX for a random thread count from 1 to X, with
X=16 when not specified. Note that the thread count is different for
every test.
This commit is contained in:
Anton Khirnov 2023-06-22 18:42:24 +02:00
parent 551a9af5a1
commit 1b45405d44
2 changed files with 18 additions and 0 deletions

View File

@ -223,6 +223,14 @@ meaning only while running the regression tests.
Specify how many threads to use while running regression tests, it is Specify how many threads to use while running regression tests, it is
quite useful to detect thread-related regressions. quite useful to detect thread-related regressions.
This variable may be set to the string "random", optionally followed by a
number, like "random99", This will cause each test to use a random number of
threads. If a number is specified, it is used as a maximum number of threads,
otherwise 16 is the maximum.
In case a test fails, the thread count used for it will be written into the
errfile.
@item THREAD_TYPE @item THREAD_TYPE
Specify which threading strategy test, either @samp{slice} or @samp{frame}, Specify which threading strategy test, either @samp{slice} or @samp{frame},
by default @samp{slice+frame} by default @samp{slice+frame}

View File

@ -33,6 +33,15 @@ errfile="${outdir}/${test}.err"
cmpfile="${outdir}/${test}.diff" cmpfile="${outdir}/${test}.diff"
repfile="${outdir}/${test}.rep" repfile="${outdir}/${test}.rep"
case $threads in
random*)
threads_max=${threads#random}
[ -z "$threads_max" ] && threads_max=16
threads=$(awk "BEGIN { print 1+int(rand() * $threads_max) }" < /dev/null)
;;
esac
target_path(){ target_path(){
test ${1} = ${1#/} && p=${target_path}/ test ${1} = ${1#/} && p=${target_path}/
echo ${p}${1} echo ${p}${1}
@ -630,6 +639,7 @@ fi
if [ $err -eq 0 ] && test $report_type = "standard" ; then if [ $err -eq 0 ] && test $report_type = "standard" ; then
unset cmpo erro unset cmpo erro
else else
echo "threads=$threads" >> "$errfile"
cmpo="$($base64 <$cmpfile)" cmpo="$($base64 <$cmpfile)"
erro="$($base64 <$errfile)" erro="$($base64 <$errfile)"
fi fi