fix timer precision handling to do what it was meant to do to begin with
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jul 2011 07:01:55 +0000 (07:01 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jul 2011 07:01:55 +0000 (07:01 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@61730 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/ecore/ecore_timer.c

index 6bd7d59..466e0de 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 2011-07-22  Mike Blumenkrantz
 
         * Added ecore_con_url_url_get
+        
+2011-07-26  Carsten Haitzler (The Rasterman)
+
+        * Fix timer precision handling for grouping timer ticks so
+        they actually do tick off together
+
index 2c4a223..a4bc1a4 100644 (file)
@@ -590,15 +590,17 @@ static inline Ecore_Timer *
 _ecore_timer_after_get(Ecore_Timer *base)
 {
    Ecore_Timer *timer = (Ecore_Timer *) EINA_INLIST_GET(base)->next;
+   Ecore_Timer *valid_timer = NULL;
    double maxtime = base->at + precision;
 
-   while ((timer) && ((timer->delete_me) || (timer->just_added)) && (timer->at <= maxtime))
-     timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next;
-
-   if ((!timer) || (timer->at > maxtime))
-     return NULL;
+   while ((timer) && (timer->at < maxtime))
+     {
+        if (!((timer->delete_me) || (timer->just_added)))
+           valid_timer = timer;
+        timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next;
+     }
 
-   return timer;
+   return valid_timer;
 }
 
 double
@@ -612,8 +614,7 @@ _ecore_timer_next_get(void)
    if (!first) return -1;
 
    second = _ecore_timer_after_get(first);
-   if (second)
-     first = second;
+   if (second) first = second;
 
    now = ecore_loop_time_get();
    in = first->at - now;