Mercurial > emacs
changeset 57987:db8c9a3a77cd
(Fget_internal_run_time): New function.
(syms_of_data): Defsubr it.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 06 Nov 2004 17:00:37 +0000 |
parents | febe33245a3c |
children | 75429b9aa2f2 |
files | src/editfns.c |
diffstat | 1 files changed, 46 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/editfns.c Sat Nov 06 16:54:06 2004 +0000 +++ b/src/editfns.c Sat Nov 06 17:00:37 2004 +0000 @@ -39,6 +39,10 @@ #include <stdio.h> #endif +#if defined HAVE_SYS_RESOURCE_H +#include <sys/resource.h> +#endif + #include <ctype.h> #include "lisp.h" @@ -1375,6 +1379,47 @@ return Flist (3, result); } + +DEFUN ("get-internal-run-time", Fget_internal_run_time, Sget_internal_run_time, + 0, 0, 0, + doc: /* Return the current run time used by Emacs. +The time is returned as a list of three integers. The first has the +most significant 16 bits of the seconds, while the second has the +least significant 16 bits. The third integer gives the microsecond +count. + +On systems that can't determine the run time, get-internal-run-time +does the same thing as current-time. The microsecond count is zero on +systems that do not provide resolution finer than a second. */) + () +{ +#ifdef HAVE_GETRUSAGE + struct rusage usage; + Lisp_Object result[3]; + int secs, usecs; + + if (getrusage (RUSAGE_SELF, &usage) < 0) + /* This shouldn't happen. What action is appropriate? */ + Fsignal (Qerror, Qnil); + + /* Sum up user time and system time. */ + secs = usage.ru_utime.tv_sec + usage.ru_stime.tv_sec; + usecs = usage.ru_utime.tv_usec + usage.ru_stime.tv_usec; + if (usecs >= 1000000) + { + usecs -= 1000000; + secs++; + } + + XSETINT (result[0], (secs >> 16) & 0xffff); + XSETINT (result[1], (secs >> 0) & 0xffff); + XSETINT (result[2], usecs); + + return Flist (3, result); +#else + return Fcurrent_time (); +#endif +} int @@ -4315,6 +4360,7 @@ defsubr (&Suser_full_name); defsubr (&Semacs_pid); defsubr (&Scurrent_time); + defsubr (&Sget_internal_run_time); defsubr (&Sformat_time_string); defsubr (&Sfloat_time); defsubr (&Sdecode_time);