diff options
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/benchmark.el | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/benchmark.el b/lisp/emacs-lisp/benchmark.el index 8f12858b033..278fb807fd5 100644 --- a/lisp/emacs-lisp/benchmark.el +++ b/lisp/emacs-lisp/benchmark.el @@ -107,6 +107,30 @@ For non-interactive use see also `benchmark-run' and (message "Elapsed time: %fs (%fs in %d GCs)" (car result) (nth 2 result) (nth 1 result))))) +;;;###autoload +(defmacro benchmark-progn (&rest body) + "Evaluate BODY and message the time taken. +The return value is the value of the final form in BODY." + (declare (debug body) (indent 0)) + (let ((value (make-symbol "value")) + (start (make-symbol "start")) + (gcs (make-symbol "gcs")) + (gc (make-symbol "gc"))) + `(let ((,gc gc-elapsed) + (,gcs gcs-done) + (,start (current-time)) + (,value (progn + ,@body))) + (message "Elapsed time: %fs%s" + (float-time (time-since ,start)) + (if (> (- gcs-done ,gcs) 0) + (format " (%fs in %d GCs)" + (- gc-elapsed ,gc) + (- gcs-done ,gcs)) + "")) + ;; Return the value of the body. + ,value))) + (provide 'benchmark) ;;; benchmark.el ends here |