On Tue, 17 May 2011, Enlightenment SVN wrote:
> Log: > ecore: add ecore_timer_dump. > > Note: Will add tomorrow code needed inside e17 to dump all created timer. > > > Author: cedric > Date: 2011-05-17 10:32:32 -0700 (Tue, 17 May 2011) > New Revision: 59473 > Trac: http://trac.enlightenment.org/e/changeset/59473 > > Modified: > trunk/ecore/ChangeLog trunk/ecore/configure.ac > trunk/ecore/src/lib/ecore/Ecore.h trunk/ecore/src/lib/ecore/ecore_timer.c > > Modified: trunk/ecore/ChangeLog > =================================================================== > --- trunk/ecore/ChangeLog 2011-05-17 16:20:27 UTC (rev 59472) > +++ trunk/ecore/ChangeLog 2011-05-17 17:32:32 UTC (rev 59473) > @@ -182,3 +182,7 @@ > * Make ecore_con work on Windows (only the local connections > need a port) > * Make ecore_ipc compile on Windows > + > +2011-05-17 Cedric Bail > + > + * Add ecore_timer_dump. > > Modified: trunk/ecore/configure.ac > =================================================================== > --- trunk/ecore/configure.ac 2011-05-17 16:20:27 UTC (rev 59472) > +++ trunk/ecore/configure.ac 2011-05-17 17:32:32 UTC (rev 59473) > @@ -344,7 +344,17 @@ > fi > AC_SUBST(pkgconfig_requires_private) > > +### Checks for some build time option > +want_ecore_timer_dump="yes" > > +AC_ARG_ENABLE([ecore-timer-dump], > + [AC_HELP_STRING([--disable-ecore-timer-dump], [disable tracking of timer > allocation. @<:@default=enable@:>@])], > + [want_ecore_timer_dump=$enableval], []) > + > +if test "x$want_ecore_timer_dump" = "xyes"; then > + AC_DEFINE(WANT_ECORE_TIMER_DUMP, [1], [Want Ecore_Timer dump > infrastructure]) > +fi that's highly not sufficient. backtrace() is a GNU extension (not to mention that it does not work on Windows). You must check that the function exists Vincent > + > ### Checks for libraries > > # Evil library for compilation on Windows > @@ -1469,6 +1479,7 @@ > echo " Always integrate GLib......: $want_glib_integration_always" > echo " Use g_main_loop............: $want_g_main_loop" > echo " Gathering memory statistic.: $have_mallinfo" > +echo " Gathering timer allocation.: $want_ecore_timer_dump" > echo " Ecore_Con....................: $have_ecore_con" > if test "x$have_ecore_con" = "xyes" ; then > echo $ECHO_N " OpenSSL....................: $have_openssl $ECHO_C" > > Modified: trunk/ecore/src/lib/ecore/Ecore.h > =================================================================== > --- trunk/ecore/src/lib/ecore/Ecore.h 2011-05-17 16:20:27 UTC (rev 59472) > +++ trunk/ecore/src/lib/ecore/Ecore.h 2011-05-17 17:32:32 UTC (rev 59473) > @@ -570,6 +570,7 @@ > EAPI double ecore_timer_pending_get(Ecore_Timer *timer); > EAPI double ecore_timer_precision_get(void); > EAPI void ecore_timer_precision_set(double precision); > + EAPI char *ecore_timer_dump(void); > > /** > * @} > > Modified: trunk/ecore/src/lib/ecore/ecore_timer.c > =================================================================== > --- trunk/ecore/src/lib/ecore/ecore_timer.c 2011-05-17 16:20:27 UTC (rev > 59472) > +++ trunk/ecore/src/lib/ecore/ecore_timer.c 2011-05-17 17:32:32 UTC (rev > 59473) > @@ -8,6 +8,12 @@ > #include "Ecore.h" > #include "ecore_private.h" > > +#ifdef WANT_ECORE_TIMER_DUMP > +# include <string.h> > +# include <execinfo.h> > +# define ECORE_TIMER_DEBUG_BT_NUM 64 > + typedef void (*Ecore_Timer_Bt_Func) (); > +#endif > > struct _Ecore_Timer > { > @@ -19,6 +25,11 @@ > Ecore_Task_Cb func; > void *data; > > +#ifdef WANT_ECORE_TIMER_DUMP > + Ecore_Timer_Bt_Func timer_bt[ECORE_TIMER_DEBUG_BT_NUM]; > + int timer_bt_num; > +#endif > + > int references; > unsigned char delete_me : 1; > unsigned char just_added : 1; > @@ -27,6 +38,7 @@ > > > static void _ecore_timer_set(Ecore_Timer *timer, double at, double in, > Ecore_Task_Cb func, void *data); > +static int _ecore_timer_cmp(const void *d1, const void *d2); > > static int timers_added = 0; > static int timers_delete_me = 0; > @@ -129,6 +141,12 @@ > if (!timer) return NULL; > ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER); > now = ecore_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; > } > @@ -342,6 +360,51 @@ > _ecore_timer_set(timer, timer->pending + now, timer->in, timer->func, > timer->data); > } > > +EAPI char * > +ecore_timer_dump(void) > +{ > +#ifdef WANT_ECORE_TIMER_DUMP > + Eina_Strbuf *result; > + char *out; > + Ecore_Timer *tm; > + Eina_List *tmp = NULL; > + > + result = eina_strbuf_new(); > + > + EINA_INLIST_FOREACH(timers, tm) > + tmp = eina_list_sorted_insert(tmp, _ecore_timer_cmp, tm); > + > + EINA_LIST_FREE(tmp, tm) > + { > + char **strings; > + int nptrs; > + int j; > + > + nptrs = backtrace((void**) tm->timer_bt, ECORE_TIMER_DEBUG_BT_NUM); > + strings = backtrace_symbols((void**) tm->timer_bt, nptrs); > + if (strings == NULL) > + continue ; > + > + eina_strbuf_append_printf(result, "*** timer: %f ***\n", tm->in); > + if (tm->frozen) > + eina_strbuf_append(result, "FROZEN\n"); > + if (tm->delete_me) > + eina_strbuf_append(result, "DELETED\n"); > + for (j = 0; j < nptrs; j++) > + eina_strbuf_append_printf(result, "%s\n", strings[j]); > + > + free(strings); > + } > + > + out = eina_strbuf_string_steal(result); > + eina_strbuf_free(result); > + > + return out; > +#else > + return NULL; > +#endif > +} > + > /** > * @} > */ > @@ -601,3 +664,12 @@ > } > timers = (Ecore_Timer *) eina_inlist_prepend(EINA_INLIST_GET(timers), > EINA_INLIST_GET(timer)); > } > + > +static int > +_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; > +} > > > ------------------------------------------------------------------------------ > Achieve unprecedented app performance and reliability > What every C/C++ and Fortran developer should know. > Learn how Intel has extended the reach of its next-generation tools > to help boost performance applications - inlcuding clusters. > http://p.sf.net/sfu/intel-dev2devmay > _______________________________________________ > enlightenment-svn mailing list > enlightenment-...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > ------------------------------------------------------------------------------ Achieve unprecedented app performance and reliability What every C/C++ and Fortran developer should know. Learn how Intel has extended the reach of its next-generation tools to help boost performance applications - inlcuding clusters. http://p.sf.net/sfu/intel-dev2devmay _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel