Emacs -- Timing execution of function calls in Emacs lisp

elisp, emacs

Solution

Exactly as per the example you've quoted. You literally wrap `(measure-time ... )` around the thing you're timing. The entirety of the `catch` expression, in your case.

Did you not try that?

Problem

I'm looking for some assistance, please, to measure the time of a function call when using a `while` loop -- i.e., the clock should stop when the function throws done. I found the following timer on the mailing list: http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html ``` (defmacro measure-time (&rest body) "Measure the time it takes to evaluate BODY." `(let ((time (current-time))) ,@body (message "%.06f" (float-time (time-since time))))) ``` It's used like this: ``` (measure-time (dotimes (i 100000) (1+ 1))) ``` An example of how to use the timer macro with a `while` loop would be greatly appreciated. I'm looking for the total time beginning from before the `while` loop commenced to the end when `done` is thrown. ``` (defun test () (measure-time) (catch 'done (while t [*** do a bunch of stuff] (when (condition-satisfied-p) [*** STOP THE CLOCK AND PRINT TOTAL DURATION ***] (throw 'done nil) )))) ```

Original source