[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#60807] [PATCH v2] tests: reuse am_cv_filesystem_timestamp_resolutio
From: |
Mike Frysinger |
Subject: |
[bug#60807] [PATCH v2] tests: reuse am_cv_filesystem_timestamp_resolution |
Date: |
Sat, 14 Jan 2023 19:18:32 -0500 |
Rather than assume such coarse delays, re-use existing logic for
probing the current filesystem resolution. This speeds up the
testsuite significantly. On my system, it speeds -j1 up quite a
lot -- by ~30%. While I didn't gather many samples to produce a
statistically significant distribution, my runs seem to be fairly
consistent with the values below with deviations of <1 minute.
$ time make -j1
Before After
real 33m17.182s real 23m33.557s
user 12m12.145s user 12m12.763s
sys 1m52.308s sys 1m52.853s
$ time make -j32
Before After
real 1m35.874s real 1m4.908s
user 14m24.664s user 15m58.663s
sys 2m9.297s sys 2m27.393s
* configure.ac: Set test delays to am_cv_filesystem_timestamp_resolution.
* t/aclocal-no-force.sh: Use slower sleep if subsecond APIs are missing.
* t/ax/test-defs.in: Split sleep settings into separate variables.
---
configure.ac | 10 +---------
t/aclocal-no-force.sh | 12 ++++++++++++
t/ax/test-defs.in | 5 ++---
3 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/configure.ac b/configure.ac
index dcf2d95566a0..d3a67d5ffec9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -172,15 +172,7 @@ result=no
test "x$am_cv_prog_ln" = xln && result=yes
AC_MSG_RESULT([$result])
-# The amount we should wait after modifying files depends on the platform.
-# On Windows '95, '98 and ME, files modifications have 2-seconds
-# granularity and can be up to 3 seconds in the future w.r.t. the
-# system clock. When it is important to ensure one file is older
-# than another we wait at least 5 seconds between creations.
-case $build in
- *-pc-msdosdjgpp) MODIFICATION_DELAY=5;;
- *) MODIFICATION_DELAY=2;;
-esac
+MODIFICATION_DELAY=$am_cv_filesystem_timestamp_resolution
AC_SUBST([MODIFICATION_DELAY])
## ------------------------------------------- ##
diff --git a/t/aclocal-no-force.sh b/t/aclocal-no-force.sh
index 3e0c04d12f18..2e139d75cf74 100644
--- a/t/aclocal-no-force.sh
+++ b/t/aclocal-no-force.sh
@@ -19,6 +19,18 @@
. test-init.sh
+# Automake relies on high resolution timestamps in perl. If support isn't
+# available (see lib/Automake/FileUtils.pm), then fallback to coarse sleeps.
+# The creative quoting is to avoid spuriously triggering a failure in
+# the maintainer checks.
+case ${sleep_delay} in
+0*)
+ if ! $PERL -e 'use Time::HiRes' 2>/dev/null; then
+ sleep='sleep ''2'
+ fi
+ ;;
+esac
+
cat >> configure.ac << 'END'
SOME_DEFS
AC_CONFIG_FILES([sub/Makefile])
diff --git a/t/ax/test-defs.in b/t/ax/test-defs.in
index e09a387cd0a6..321602cfdd0b 100644
--- a/t/ax/test-defs.in
+++ b/t/ax/test-defs.in
@@ -180,9 +180,8 @@ TEX=${AM_TESTSUITE_TEX-'@TEX@'}
# The amount we should wait after modifying files depends on the platform.
# For instance, Windows '95, '98 and ME have 2-second granularity
# and can be up to 3 seconds in the future w.r.t. the system clock.
-# The creative quoting is to avoid spuriously triggering a failure in
-# the maintainer checks,
-sleep='sleep ''@MODIFICATION_DELAY@'
+sleep_delay=@MODIFICATION_DELAY@
+sleep="sleep ${sleep_delay}"
# An old timestamp that can be given to a file, in "touch -t" format.
# The time stamp should be portable to all file systems of interest.
--
2.39.0