Fixes high CPU usage on timer expiration when using glib event loop.
authorDaniel Thor Kristjansson <danielk@cuymedia.net>
Wed, 20 Jun 2012 19:17:15 +0000 (15:17 -0400)
committerQt by Nokia <qt-info@nokia.com>
Thu, 21 Jun 2012 21:08:59 +0000 (23:08 +0200)
GTimerSource has 1ms accuracy, QTimerInfoList::timerWait() has 1us accuracy.
So when there is less than 1 ms left on the timer we enter a tight loop
checking for timer expiration since we don't round up the timerWait()
timer to the nearest millisecond.

Task-number: QTBUG-7618
Change-Id: I684c9236324f598bc69c6810be270aa47c791f91
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/corelib/kernel/qeventdispatcher_glib.cpp

index 4429679..3f75c4e 100644 (file)
@@ -133,7 +133,7 @@ static gboolean timerSourcePrepareHelper(GTimerSource *src, gint *timeout)
 {
     timeval tv = { 0l, 0l };
     if (!(src->processEventsFlags & QEventLoop::X11ExcludeTimers) && src->timerList.timerWait(tv))
-        *timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+        *timeout = (tv.tv_sec * 1000) + ((tv.tv_usec + 999) / 1000);
     else
         *timeout = -1;