Make QTimer::singleShot use Qt::PreciseTimer for lower timeouts.
authorBradley T. Hughes <bradley.hughes@nokia.com>
Wed, 21 Dec 2011 10:33:07 +0000 (11:33 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 2 Jan 2012 09:44:00 +0000 (10:44 +0100)
CoarseTimers are worst in their first firing, so we prefer a
PreciseTimer for something that happens only once. If the timeout is
too big, we use a CoarseTimer anyway (current threshold is 2000ms).

Author: Thiago Macieira <thiago.macieira@nokia.com>
Change-Id: I30b20acf506e442cd58126abfe3a4d70fc13b075
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/kernel/qtimer.cpp

index e89abad..8bf65c3 100644 (file)
@@ -317,7 +317,10 @@ QT_END_INCLUDE_NAMESPACE
 
 void QTimer::singleShot(int msec, QObject *receiver, const char *member)
 {
-    singleShot(msec, Qt::CoarseTimer, receiver, member);
+    // coarse timers are worst in their first firing
+    // so we prefer a high precision timer for something that happens only once
+    // unless the timeout is too big, in which case we go for coarse anyway
+    singleShot(msec, msec >= 2000 ? Qt::CoarseTimer : Qt::PreciseTimer, receiver, member);
 }
 
 /*! \overload