X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/07976ae3b816dea4fd541bbba862603d3132eb2c..refs/heads/wip:/lib-src/profile.c diff --git a/lib-src/profile.c b/lib-src/profile.c index 37653e63c4..e159a92e86 100644 --- a/lib-src/profile.c +++ b/lib-src/profile.c @@ -1,6 +1,6 @@ /* profile.c --- generate periodic events for profiling of Emacs Lisp code. - Copyright (C) 1992, 1994, 1999, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1992, 1994, 1999, 2001-2014 Free Software Foundation, + Inc. Author: Boaz Ben-Zvi @@ -21,7 +21,7 @@ along with GNU Emacs. If not, see . */ /** - ** To be run as an emacs process. Input string that starts with: + ** To be run as an emacs subprocess. Input string that starts with: ** 'z' -- resets the watch (to zero). ** 'p' -- return time (on stdout) as string with format . ** 'q' -- exit. @@ -29,54 +29,45 @@ along with GNU Emacs. If not, see . */ ** abstraction : a stopwatch ** operations: reset_watch, get_time */ + +#define INLINE EXTERN_INLINE #include + +#include #include + +#include #include -static EMACS_TIME TV1, TV2; +static struct timespec TV1; static int watch_not_started = 1; /* flag */ -static char time_string[30]; +static char time_string[INT_STRLEN_BOUND (uintmax_t) + sizeof "." + + LOG10_TIMESPEC_RESOLUTION]; /* Reset the stopwatch to zero. */ -void +static void reset_watch (void) { - EMACS_GET_TIME (TV1); + TV1 = current_timespec (); watch_not_started = 0; } /* This call returns the time since the last reset_watch call. The time - is returned as a string with the format . + is returned as a string with the format . If reset_watch was not called yet, exit. */ -char * +static char * get_time (void) { + struct timespec TV2 = timespec_sub (current_timespec (), TV1); + uintmax_t s = TV2.tv_sec; + int ns = TV2.tv_nsec; if (watch_not_started) exit (EXIT_FAILURE); /* call reset_watch first ! */ - EMACS_GET_TIME (TV2); - EMACS_SUB_TIME (TV2, TV2, TV1); - sprintf (time_string, "%lu.%06lu", (unsigned long)EMACS_SECS (TV2), (unsigned long)EMACS_USECS (TV2)); + sprintf (time_string, "%"PRIuMAX".%0*d", s, LOG10_TIMESPEC_RESOLUTION, ns); return time_string; } - -#if ! defined (HAVE_GETTIMEOFDAY) && defined (HAVE_TIMEVAL) - -/* ARGSUSED */ -gettimeofday (tp, tzp) - struct timeval *tp; - struct timezone *tzp; -{ - extern long time (); - - tp->tv_sec = time ((long *)0); - tp->tv_usec = 0; - if (tzp != 0) - tzp->tz_minuteswest = -1; -} - -#endif int main (void) @@ -102,7 +93,5 @@ main (void) exit (EXIT_FAILURE); } -/* arch-tag: 8db68f7e-2322-4944-a315-dba349bdbf39 - (do not change this comment) */ /* profile.c ends here */