Mercurial > geeqie.yaz
diff src/debug.c @ 509:b78a91d0779e
Move get_exec_time() to debug.{c,h}.
author | zas_ |
---|---|
date | Thu, 24 Apr 2008 09:43:23 +0000 |
parents | 135570a8bd96 |
children | 8268cbe682f1 |
line wrap: on
line diff
--- a/src/debug.c Thu Apr 24 09:09:48 2008 +0000 +++ b/src/debug.c Thu Apr 24 09:43:23 2008 +0000 @@ -37,4 +37,64 @@ return (debug_level >= level); } +static gint timeval_delta(struct timeval *result, struct timeval *x, struct timeval *y) +{ + if (x->tv_usec < y->tv_usec) + { + gint nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1; + y->tv_usec -= 1000000 * nsec; + y->tv_sec += nsec; + } + + if (x->tv_usec - y->tv_usec > 1000000) + { + gint nsec = (x->tv_usec - y->tv_usec) / 1000000; + y->tv_usec += 1000000 * nsec; + y->tv_sec -= nsec; + } + + result->tv_sec = x->tv_sec - y->tv_sec; + result->tv_usec = x->tv_usec - y->tv_usec; + + return x->tv_sec < y->tv_sec; +} + +const gchar *get_exec_time(void) +{ + static gchar timestr[30]; + static struct timeval start_tv = {0, 0}; + static struct timeval previous = {0, 0}; + static gint started = 0; + + struct timeval tv = {0, 0}; + static struct timeval delta = {0, 0}; + + gettimeofday(&tv, NULL); + + if (start_tv.tv_sec == 0) start_tv = tv; + + tv.tv_sec -= start_tv.tv_sec; + if (tv.tv_usec >= start_tv.tv_usec) + tv.tv_usec -= start_tv.tv_usec; + else + { + tv.tv_usec += 1000000 - start_tv.tv_usec; + tv.tv_sec -= 1; + } + + if (started) timeval_delta(&delta, &tv, &previous); + + previous = tv; + started = 1; + + g_snprintf(timestr, sizeof(timestr), "%5d.%06d (+%05d.%06d)", (int)tv.tv_sec, (int)tv.tv_usec, (int)delta.tv_sec, (int)delta.tv_usec); + + return timestr; +} + +void init_exec_time(void) +{ + get_exec_time(); +} + #endif