ecore: improve ecore_timer_dump.
authorCedric BAIL <cedric.bail@free.fr>
Thu, 19 May 2011 15:38:30 +0000 (15:38 +0000)
committerCedric BAIL <cedric.bail@free.fr>
Thu, 19 May 2011 15:38:30 +0000 (15:38 +0000)
Now E17 msgbus module will provide an usefull way to
list all the running timer and see if we are not waking up
to often. Use d-feet to see that information.

SVN revision: 59542

legacy/ecore/src/lib/ecore/ecore_timer.c

index d8d57d3a75db2c30626996a1026bf64c5a39c324..b6ab05c9c5d50b4913ea17628fced5fdab3b10c3 100644 (file)
@@ -175,6 +175,12 @@ ecore_timer_loop_add(double in, Ecore_Task_Cb func, const void *data)
    if (!timer) return NULL;
    ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER);
    now = ecore_loop_time_get();
+
+#ifdef WANT_ECORE_TIMER_DUMP
+   timer->timer_bt_num = backtrace((void**) (timer->timer_bt),
+                                   ECORE_TIMER_DEBUG_BT_NUM);
+#endif
+
    _ecore_timer_set(timer, now + in, in, func, (void *)data);
    return timer;
 }
@@ -368,6 +374,8 @@ ecore_timer_dump(void)
    char *out;
    Ecore_Timer *tm;
    Eina_List *tmp = NULL;
+   int living_timer = 0;
+   int unknow_timer = 0;
 
    result = eina_strbuf_new();
 
@@ -379,9 +387,15 @@ ecore_timer_dump(void)
         char **strings;
         int j;
 
+       if (!tm->frozen && !tm->delete_me)
+         living_timer++;
+
         strings = backtrace_symbols((void**) tm->timer_bt, tm->timer_bt_num);
-        if (strings == NULL)
-          continue ;
+        if (tm->timer_bt_num <= 0 || strings == NULL)
+         {
+           unknow_timer++;
+           continue ;
+         }
 
         eina_strbuf_append_printf(result, "*** timer: %f ***\n", tm->in);
         if (tm->frozen)
@@ -394,6 +408,8 @@ ecore_timer_dump(void)
         free(strings);
      }
 
+   eina_strbuf_append_printf(result, "\n***\nThere is %i living timer.\nWe did lost track of %i timers.\n", living_timer, unknow_timer);
+
    out = eina_strbuf_string_steal(result);
    eina_strbuf_free(result);
 
@@ -669,5 +685,5 @@ _ecore_timer_cmp(const void *d1, const void *d2)
    const Ecore_Timer *t1 = d1;
    const Ecore_Timer *t2 = d2;
 
-   return (int) t1->in - t2->in;
+   return (int) ((t1->in - t2->in) * 100);
 }