From: Lars Brinkhoff <lars@nocrew.org>
Subject: Re: get-internal-run-time
Date: 01 May 2004 20:53:01 +0200 [thread overview]
Message-ID: <85isfgasj6.fsf@junk.nocrew.org> (raw)
In-Reply-To: 85vfjgbphf.fsf_-_@junk.nocrew.org
Lars Brinkhoff <lars@nocrew.org> writes:
> Richard Stallman <rms@gnu.org> writes:
> > [Lars Brinkhoff wrote:]
> > [I wish there were a] function that returns the amount of
> > processor time used [by Emacs], for implementing [the Common
> > Lisp function] get-internal-run-time.
> >
> > ANSI CL says:
> > The intent is that the difference between the values of
> > two calls to this function be the amount of time between
> > the two calls during which computational effort was
> > expended on behalf of the executing program.
> > I haven't found a suitable function for this in Emacs.
> >
> > Would you like to contribute such a function?
>
> Here's a first attempt, submitted for comment.
Here's a more complete patch:
etc/NEWS:
** The new primitive `get-internal-run-time' returns the processor
run time used by Emacs so far.
src/ChangeLog:
2004-05-01 Lars Brinkhoff <lars@nocrew.org>
* editfns.c (Fget_internal_run_time): New function.
(syms_of_data): Defsubr it.
lispref/ChangeLog:
2004-05-01 Lars Brinkhoff <lars@nocrew.org>
* os.texi (Processor Run Time): New section documenting
get-internal-run-time.
Index: src/editfns.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/editfns.c,v
retrieving revision 1.372
diff -c -r1.372 editfns.c
*** src/editfns.c 27 Apr 2004 13:28:38 -0000 1.372
--- src/editfns.c 1 May 2004 07:26:07 -0000
***************
*** 39,44 ****
--- 39,48 ----
#include <stdio.h>
#endif
+ #ifdef HAVE_SYS_RESOURCE_H
+ #include <sys/resource.h>
+ #endif
+
#include <ctype.h>
#include "lisp.h"
***************
*** 1375,1380 ****
--- 1379,1425 ----
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_SYS_RESOURCE_H
+ 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
+ }
\f
int
***************
*** 4280,4285 ****
--- 4325,4331 ----
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);
Index: lispref/os.texi
===================================================================
RCS file: /cvsroot/emacs/emacs/lispref/os.texi,v
retrieving revision 1.62
diff -c -r1.62 os.texi
*** lispref/os.texi 17 Feb 2004 01:06:10 -0000 1.62
--- lispref/os.texi 1 May 2004 07:26:08 -0000
***************
*** 23,28 ****
--- 23,29 ----
* Time of Day:: Getting the current time.
* Time Conversion:: Converting a time from numeric form to a string, or
to calendrical data (or vice versa).
+ * Processor Run Time:: Getting the run time used by Emacs.
* Time Calculations:: Adding, subtracting, comparing times, etc.
* Timers:: Setting a timer to call a function at a certain time.
* Terminal Input:: Recording terminal input for debugging.
***************
*** 1247,1252 ****
--- 1248,1275 ----
if you try to encode a time that is out of range, an error results.
For instance, years before 1970 do not work on some systems;
on others, years as early as 1901 do work.
+ @end defun
+
+ @node Processor Run Time
+ @section Processor Run time
+
+ @defun get-internal-run-time
+ This function returns the processor run time used by Emacs as a list
+ of three integers: @code{(@var{high} @var{low} @var{microsec})}. The
+ integers @var{high} and @var{low} combine to give the number of
+ seconds, which is
+ @ifnottex
+ @var{high} * 2**16 + @var{low}.
+ @end ifnottex
+ @tex
+ $high*2^{16}+low$.
+ @end tex
+
+ The third element, @var{microsec}, gives the microseconds (or 0 for
+ systems that return time with the resolution of only one second).
+
+ If the system doesn't provide a way to determine the processor run
+ time, get-internal-run-time returns the same time as current-time.
@end defun
@node Time Calculations
next prev parent reply other threads:[~2004-05-01 18:53 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <E1BH4Nx-000730-Dq@fencepost.gnu.org>
[not found] ` <85k7036eqr.fsf@junk.nocrew.org>
[not found] ` <E1BI6nw-0005F4-Hl@fencepost.gnu.org>
[not found] ` <85smepfzqo.fsf@junk.nocrew.org>
[not found] ` <E1BIm46-0001Ha-5A@fencepost.gnu.org>
2004-04-28 10:43 ` User-reserved element in byte code vectors (was: Emacs Common Lisp) Lars Brinkhoff
2004-04-28 13:48 ` Stefan Monnier
2004-04-28 15:08 ` User-reserved element in byte code vectors Lars Brinkhoff
2004-04-28 15:38 ` Stefan Monnier
2004-04-28 16:51 ` Lars Brinkhoff
2004-04-28 17:12 ` Stefan Monnier
2004-05-02 7:59 ` Lars Brinkhoff
2004-05-02 9:43 ` Miles Bader
2004-05-02 16:02 ` Lars Brinkhoff
2004-05-03 14:03 ` Richard Stallman
2004-05-03 19:57 ` Miles Bader
2004-05-05 5:23 ` Lars Brinkhoff
2004-05-05 20:21 ` Richard Stallman
2004-05-06 3:55 ` Miles Bader
2004-05-06 4:56 ` Miles Bader
2004-05-06 11:48 ` Richard Stallman
2004-05-14 17:53 ` Miles Bader
2004-05-14 18:27 ` Stefan Monnier
2004-05-14 19:50 ` Lars Brinkhoff
2004-05-14 22:03 ` Miles Bader
2004-05-14 22:14 ` Stefan Monnier
2004-05-15 18:34 ` Richard Stallman
2004-05-15 23:10 ` Miles Bader
2004-05-17 11:04 ` Richard Stallman
2004-05-17 11:28 ` Lars Brinkhoff
2004-05-17 16:30 ` Stefan Monnier
2004-05-17 22:06 ` Miles Bader
2004-05-17 22:33 ` David Kastrup
2004-05-18 1:29 ` Miles Bader
2004-05-18 13:17 ` Stefan Monnier
2004-05-18 23:45 ` Miles Bader
2004-05-19 6:28 ` David Kastrup
2004-05-19 6:37 ` Miles Bader
2004-05-19 19:00 ` Richard Stallman
2004-05-19 22:32 ` Function vectors: +funvec-20030520-0-c.patch Miles Bader
2004-05-19 7:34 ` User-reserved element in byte code vectors Kim F. Storm
2004-05-19 13:45 ` Richard Stallman
2004-05-19 14:28 ` Miles Bader
2004-05-19 15:19 ` Stefan Monnier
2004-05-20 0:31 ` Miles Bader
2004-05-20 13:17 ` Richard Stallman
2004-05-21 1:28 ` Miles Bader
2004-05-22 7:31 ` Richard Stallman
2004-05-22 9:37 ` Miles Bader
2004-05-18 14:53 ` Richard Stallman
2004-05-18 17:34 ` Miles Bader
2004-05-18 14:53 ` Richard Stallman
2004-05-16 23:53 ` Stefan Monnier
[not found] ` <E1BP3ym-0007oy-F7@fencepost.gnu.org>
[not found] ` <20040515231754.GB20052@fencepost>
2004-05-16 4:02 ` Function vectors: +funvec-20030516-0-c.patch Miles Bader
2004-05-16 12:28 ` Function vectors: +funvec-20030516-1-c.patch Miles Bader
2004-05-16 23:58 ` Function vectors: +funvec-20030516-0-c.patch Stefan Monnier
2004-05-17 0:03 ` Miles Bader
2004-05-17 0:14 ` Stefan Monnier
2004-05-17 0:30 ` Miles Bader
2004-05-17 16:09 ` Stefan Monnier
2004-05-17 22:21 ` Miles Bader
2004-05-18 13:30 ` Stefan Monnier
2004-05-17 11:04 ` Richard Stallman
2004-05-17 11:04 ` Richard Stallman
2004-05-17 22:54 ` Miles Bader
2004-05-18 14:54 ` Richard Stallman
2004-05-18 6:04 ` Function vectors: +funvec-20030518-0-c.patch Miles Bader
2004-05-06 6:17 ` User-reserved element in byte code vectors Lars Brinkhoff
2004-05-06 14:24 ` Stefan Monnier
2004-05-06 20:39 ` Miles Bader
2004-05-02 16:37 ` Stefan Monnier
2004-05-02 18:59 ` Lars Brinkhoff
2004-05-02 19:21 ` Stefan Monnier
2004-05-02 19:27 ` Lars Brinkhoff
2004-05-02 19:54 ` Stefan Monnier
2004-05-02 20:28 ` Lars Brinkhoff
2004-05-02 21:07 ` Stefan Monnier
2004-05-03 6:08 ` Lars Brinkhoff
2004-05-02 19:52 ` Richard Stallman
2004-04-28 15:38 ` User-reserved element in byte code vectors (was: Emacs Common Lisp) Miles Bader
2004-05-01 5:30 ` Lars Brinkhoff
2004-05-01 23:58 ` Miles Bader
2004-05-01 7:01 ` get-internal-run-time Lars Brinkhoff
2004-05-01 18:53 ` Lars Brinkhoff [this message]
2004-05-02 14:44 ` get-internal-run-time Eli Zaretskii
2004-05-02 15:45 ` get-internal-run-time Lars Brinkhoff
2004-05-02 18:41 ` get-internal-run-time Lars Brinkhoff
2004-05-03 0:10 ` get-internal-run-time Kevin Ryde
2004-05-03 5:38 ` get-internal-run-time Lars Brinkhoff
2004-05-03 14:03 ` get-internal-run-time Richard Stallman
2004-10-28 16:30 ` get-internal-run-time Lars Brinkhoff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=85isfgasj6.fsf@junk.nocrew.org \
--to=lars@nocrew.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.