]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new function current-cpu-time
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 27 Apr 2022 17:20:41 +0000 (19:20 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Wed, 27 Apr 2022 17:20:41 +0000 (19:20 +0200)
* doc/lispref/os.texi (Time of Day): Document it.
* src/timefns.c (Fcurrent_cpu_time): New function (bug#44674).

doc/lispref/os.texi
etc/NEWS
src/timefns.c

index 9e87b3840ec72d2a734f305451c9195e80980cab..89ddf164a17cf10076687a414790bc28253c1b1f 100644 (file)
@@ -1434,6 +1434,13 @@ as @samp{0.1} but is slightly greater than 1/10.
 @code{time-to-seconds} is an alias for this function.
 @end defun
 
+@defun current-cpu-time
+Return the current @acronym{CPU} time along with its resolution.  The
+return value is a pair @code{(CPU-TICKS . TICKS-PER-SEC)}.  The
+@var{CPU-TICKS} counter can wrap around, so values cannot be
+meaningfully compared if too much time has passed between them.
+@end defun
+
 @node Time Zone Rules
 @section Time Zone Rules
 @cindex time zone rules
index 2ecad81b11fcc82ba8dc678b2ae0e04302fa2647..526afe27a5747a40cfe8ad70bc4e808ef8a1e955 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1513,6 +1513,11 @@ functions.
 \f
 * Lisp Changes in Emacs 29.1
 
+---
+** New function 'current-cpu-time'.
+It gives access to the CPU time used by the Emacs process, for
+example for benchmarking purposes.
+
 ---
 ** New function 'string-edit'.
 This is meant to be used when the user has to edit a (potentially)
index e7a2cd368e19f6ec81b04bf24d5a794d330a8b4a..651e0760e83fdf52ac2b69d9f04a0af83021ced8 100644 (file)
@@ -1775,6 +1775,18 @@ if you need this older timestamp form.  */)
   return make_lisp_time (current_timespec ());
 }
 
+#ifdef CLOCKS_PER_SEC
+DEFUN ("current-cpu-time", Fcurrent_cpu_time, Scurrent_cpu_time, 0, 0, 0,
+       doc: /* Return the current CPU time along with its resolution.
+The return value is a pair (CPU-TICKS . TICKS-PER-SEC).
+The CPU-TICKS counter can wrap around, so values cannot be meaningfully
+compared if too much time has passed between them.  */)
+  (void)
+{
+  return Fcons (make_int (clock ()), make_int (CLOCKS_PER_SEC));
+}
+#endif
+
 DEFUN ("current-time-string", Fcurrent_time_string, Scurrent_time_string,
        0, 2, 0,
        doc: /* Return the current local time, as a human-readable string.
@@ -2014,6 +2026,9 @@ syms_of_timefns (void)
   DEFSYM (Qencode_time, "encode-time");
 
   defsubr (&Scurrent_time);
+#ifdef CLOCKS_PER_SEC
+  defsubr (&Scurrent_cpu_time);
+#endif
   defsubr (&Stime_convert);
   defsubr (&Stime_add);
   defsubr (&Stime_subtract);