44 lines
1.7 KiB
EmacsLisp
44 lines
1.7 KiB
EmacsLisp
(defvar require-times nil
|
|
"A list of (FEATURE . LOAD-DURATION).
|
|
LOAD-DURATION is the time taken in milliseconds to load FEATURE.")
|
|
|
|
(defadvice require
|
|
(around build-require-times (feature &optional filename noerror) activate)
|
|
"Note in `require-times' the time taken to require each feature."
|
|
(let* ((already-loaded (memq feature features))
|
|
(require-start-time (and (not already-loaded) (current-time))))
|
|
(prog1
|
|
ad-do-it
|
|
(when (and (not already-loaded) (memq feature features))
|
|
(add-to-list 'require-times
|
|
(cons feature
|
|
(float-time (time-subtract (current-time) require-start-time)))
|
|
t)))))
|
|
|
|
(defun list-times ()
|
|
(interactive)
|
|
(let ((temp-buffer (get-buffer-create "*benchmark*"))
|
|
(sum 0.0))
|
|
(popwin:popup-buffer temp-buffer :stick t)
|
|
(erase-buffer)
|
|
(org-mode)
|
|
(dolist (feature require-times)
|
|
(if (eq feature 'null)
|
|
(progn
|
|
(insert "|----+----+----|\n")
|
|
(insert (format "| %6f | Subtotal |\n" sum))
|
|
(insert "|----+----+----|\n"))
|
|
(let ((time (cdr feature)))
|
|
(insert (format "| %6f | %s | %s |\n" time (car feature) (cond ((>= time 0.4) "XXX")
|
|
((>= time 0.1) "X")
|
|
((>= time 0.05) ".")
|
|
(t " "))))
|
|
(setq sum (+ sum time)))))
|
|
(save-excursion
|
|
(insert "|----+----+----|\n")
|
|
(insert (format "| %6f | Total |\n" sum))
|
|
(insert (format "| %s | On Init |\n" (emacs-init-time))))
|
|
(org-table-align)))
|
|
|
|
|
|
(provide 'benchmark)
|