summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-09-12 13:58:03 +0200
committerLars Knoll <lars.knoll@qt.io>2020-09-12 14:07:05 +0200
commit1abea5f5f13b4b8ec2a1c282e643b791cea12f30 (patch)
treea17bed5434679de1db92777e237c8a878d03e732
parenta7b85e59931443dd33adeb02c7201c1bd1d7cd1d (diff)
Partially revert "Inline QTest::qSleep()"
This change partially reverts change a0e0b51001edfc1c7aea113c472ce995efa833fd. Replacing the QTest specific sleep function with QThread::msleep() was not a good idea. The reason is that QThread::msleep() will force the thread to sleep to x mseconds, even if a signal woke the thread in the meantime. This would cause qWaitFor() to not call processEvents(), in some cases, leading to flakyness and test failures in tests that rely on timing, such as the animation tests in Qt Qml. Change-Id: I0ad132cdf32be5813b2e73552d772251fe1d7f89 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r--src/corelib/kernel/qtestsupport_core.cpp29
-rw-r--r--src/corelib/kernel/qtestsupport_core.h4
-rw-r--r--src/testlib/qtestcase.cpp18
-rw-r--r--src/testlib/qtestcase.h1
4 files changed, 32 insertions, 20 deletions
diff --git a/src/corelib/kernel/qtestsupport_core.cpp b/src/corelib/kernel/qtestsupport_core.cpp
index e6e3dfbd69..02dd5ad04d 100644
--- a/src/corelib/kernel/qtestsupport_core.cpp
+++ b/src/corelib/kernel/qtestsupport_core.cpp
@@ -45,6 +45,35 @@
QT_BEGIN_NAMESPACE
+/*!
+ Sleeps for \a ms milliseconds, blocking execution of the
+ test. qSleep() will not do any event processing and leave your test
+ unresponsive. Network communication might time out while
+ sleeping. Use \l {QTest::qWait()} to do non-blocking sleeping.
+
+ \a ms must be greater than 0.
+
+ \b {Note:} The qSleep() function calls either \c nanosleep() on
+ unix or \c Sleep() on windows, so the accuracy of time spent in
+ qSleep() depends on the operating system.
+
+ Example:
+ \snippet code/src_qtestlib_qtestcase.cpp 23
+
+ \sa {QTest::qWait()}
+*/
+Q_CORE_EXPORT void QTest::qSleep(int ms)
+{
+ Q_ASSERT(ms > 0);
+
+#if defined(Q_OS_WIN)
+ Sleep(uint(ms));
+#else
+ struct timespec ts = { time_t(ms / 1000), (ms % 1000) * 1000 * 1000 };
+ nanosleep(&ts, nullptr);
+#endif
+}
+
/*! \fn template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)
Waits for \a timeout milliseconds or until the \a predicate returns true.
diff --git a/src/corelib/kernel/qtestsupport_core.h b/src/corelib/kernel/qtestsupport_core.h
index 03430d7680..2abe70bf99 100644
--- a/src/corelib/kernel/qtestsupport_core.h
+++ b/src/corelib/kernel/qtestsupport_core.h
@@ -48,6 +48,8 @@ QT_BEGIN_NAMESPACE
namespace QTest {
+Q_CORE_EXPORT void qSleep(int ms);
+
template <typename Functor>
Q_REQUIRED_RESULT static bool qWaitFor(Functor predicate, int timeout = 5000)
{
@@ -75,7 +77,7 @@ Q_REQUIRED_RESULT static bool qWaitFor(Functor predicate, int timeout = 5000)
remaining = int(deadline.remainingTime());
if (remaining > 0)
- QThread::msleep(qMin(10, remaining));
+ qSleep(qMin(10, remaining));
if (predicate())
return true;
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index c2b33019b2..0202915e67 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -2474,24 +2474,6 @@ bool QTest::currentTestFailed()
return QTestResult::currentTestFailed();
}
-/*!
- Sleeps for \a ms milliseconds, blocking execution of the
- test. qSleep() will not do any event processing and leave your test
- unresponsive. Network communication might time out while
- sleeping. Use \l {QTest::qWait()} to do non-blocking sleeping.
-
- \a ms must be greater than 0.
-
- \b {Note:} The qSleep() function calls either \c nanosleep() on
- unix or \c Sleep() on windows, so the accuracy of time spent in
- qSleep() depends on the operating system.
-
- Example:
- \snippet code/src_qtestlib_qtestcase.cpp 23
-
- \sa {QTest::qWait()}
-*/
-
/*! \internal
*/
QObject *QTest::testObject()
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index 6fe962277a..e6a2b01c95 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -336,7 +336,6 @@ namespace QTest
char *val1, char *val2,
const char *actual, const char *expected,
const char *file, int line);
- inline void qSleep(int ms) { QThread::msleep(ms); }
Q_TESTLIB_EXPORT void addColumnInternal(int id, const char *name);
template <typename T>