;;; elp.el --- Emacs Lisp Profiler
-;; Copyright (C) 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1995, 1997-1998, 2001-2011
+;; Free Software Foundation, Inc.
;; Author: Barry A. Warsaw
;; Maintainer: FSF
:group 'lisp)
(defcustom elp-function-list nil
- "*List of functions to profile.
+ "List of functions to profile.
Used by the command `elp-instrument-list'."
:type '(repeat function)
:group 'elp)
(defcustom elp-reset-after-results t
- "*Non-nil means reset all profiling info after results are displayed.
+ "Non-nil means reset all profiling info after results are displayed.
Results are displayed with the `elp-results' command."
:type 'boolean
:group 'elp)
(defcustom elp-sort-by-function 'elp-sort-by-total-time
- "*Non-nil specifies ELP results sorting function.
+ "Non-nil specifies ELP results sorting function.
These functions are currently available:
elp-sort-by-call-count -- sort by the highest call count
:group 'elp)
(defcustom elp-report-limit 1
- "*Prevent some functions from being displayed in the results buffer.
+ "Prevent some functions from being displayed in the results buffer.
If a number, no function that has been called fewer than that number
of times will be displayed in the output buffer. If nil, all
functions will be displayed."
:group 'elp)
(defcustom elp-use-standard-output nil
- "*If non-nil, output to `standard-output' instead of a buffer."
+ "If non-nil, output to `standard-output' instead of a buffer."
:type 'boolean
:group 'elp)
(defcustom elp-recycle-buffers-p t
- "*If nil, don't recycle the `elp-results-buffer'.
+ "If nil, don't recycle the `elp-results-buffer'.
In other words, a new unique buffer is create every time you run
\\[elp-results]."
:type 'boolean
;; (delq nil (mapcar (lambda (x) (and (symbolp x) (fboundp x) x))
;; (aref (symbol-function 'elp-wrapper) 2)))
;; to help me find this list.
- error call-interactively apply current-time)
+ error call-interactively apply current-time
+ ;; Andreas Politz reports problems profiling these (Bug#4233):
+ + byte-code-function-p functionp byte-code subrp
+ indirect-function fboundp)
"List of functions that cannot be profiled.
Those functions are used internally by the profiling code and profiling
them would thus lead to infinite recursion.")
(setq newguts (append newguts `((elp-wrapper
(quote ,funsym)
,(when (commandp funsym)
- '(called-interactively-p))
+ '(called-interactively-p 'any))
args))))
;; to record profiling times, we set the symbol's function
;; definition so that it runs the elp-wrapper function with the
;;;###autoload
(defun elp-instrument-list (&optional list)
- "Instrument for profiling, all functions in `elp-function-list'.
-Use optional LIST if provided instead."
+ "Instrument, for profiling, all functions in `elp-function-list'.
+Use optional LIST if provided instead.
+If called interactively, read LIST using the minibuffer."
(interactive "PList of functions to instrument: ")
+ (unless (listp list)
+ (signal 'wrong-type-argument (list 'listp list)))
(let ((list (or list elp-function-list)))
(mapcar 'elp-instrument-function list)))
(defvar elp-results-symname-map
(let ((map (make-sparse-keymap)))
(define-key map [mouse-2] 'elp-results-jump-to-definition)
+ (define-key map [follow-link] 'mouse-face)
(define-key map "\C-m" 'elp-results-jump-to-definition)
map)
"Keymap used on the function name column." )
'elp-symname (intern symname)
'keymap elp-results-symname-map
'mouse-face 'highlight
+ 'face 'link
'help-echo "mouse-2 or RET jumps to definition")))
;;;###autoload
'display (list 'space :align-to column)
'face 'fixed-pitch)
title)
- (setq column (+ column 1
+ (setq column (+ column 2
(if (= column 0)
elp-field-len
(length title))))))
\f
(provide 'elp)
-;; arch-tag: c4eef311-9b3e-4bb2-8a54-3485d41b4eb1
;;; elp.el ends here