summaryrefslogtreecommitdiff
path: root/lisp/profiler.el
diff options
context:
space:
mode:
authorVasilij Schneidermann <v.schneidermann@gmail.com>2019-06-27 20:18:20 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2019-06-27 21:00:36 +0200
commit9997429cb7f960a1a08c7dfb4848a0cb60107f57 (patch)
treeee6271e1be08cbd1532105e69f8d12ae2e0dd5d8 /lisp/profiler.el
parentb93e5463885f9c99e74b52d2f569ad06ec2d0ff8 (diff)
downloademacs-9997429cb7f960a1a08c7dfb4848a0cb60107f57.tar.gz
Allow for retrieving profiler logs after stopping
* lisp/profiler.el (profiler-cpu-log, profiler-memory-log): New variables. (profiler-cpu-profile): Work even if the profiler is no longer running (bug#22114). (profiler-memory-profile): Ditto. (profiler-stop): Save the data. (profiler-reset): Clear the saved data. (profiler-report-cpu, profiler-report-memory): Report on the saved data. (profiler-report): Save the data here, too.
Diffstat (limited to 'lisp/profiler.el')
-rw-r--r--lisp/profiler.el59
1 files changed, 35 insertions, 24 deletions
diff --git a/lisp/profiler.el b/lisp/profiler.el
index 45dc1d1edc0..74b847c8d74 100644
--- a/lisp/profiler.el
+++ b/lisp/profiler.el
@@ -213,21 +213,22 @@ Optional argument MODE means only check for the specified mode (cpu or mem)."
(t (or (profiler-running-p 'cpu)
(profiler-running-p 'mem)))))
+(defvar profiler-cpu-log nil)
+(defvar profiler-memory-log nil)
+
(defun profiler-cpu-profile ()
"Return CPU profile."
- (when (profiler-running-p 'cpu)
- (profiler-make-profile
- :type 'cpu
- :timestamp (current-time)
- :log (profiler-cpu-log))))
+ (profiler-make-profile
+ :type 'cpu
+ :timestamp (current-time)
+ :log profiler-cpu-log))
(defun profiler-memory-profile ()
"Return memory profile."
- (when (profiler-memory-running-p)
- (profiler-make-profile
- :type 'memory
- :timestamp (current-time)
- :log (profiler-memory-log))))
+ (profiler-make-profile
+ :type 'memory
+ :timestamp (current-time)
+ :log profiler-memory-log))
;;; Calltrees
@@ -829,7 +830,12 @@ Also, if MODE is `mem' or `cpu+mem', then memory profiler will be started."
(defun profiler-stop ()
"Stop started profilers. Profiler logs will be kept."
(interactive)
- (let ((cpu (if (fboundp 'profiler-cpu-stop) (profiler-cpu-stop)))
+ (when (and (fboundp 'profiler-cpu-running-p)
+ (profiler-cpu-running-p))
+ (setq profiler-cpu-log (profiler-cpu-log)))
+ (when (profiler-memory-running-p)
+ (setq profiler-memory-log (profiler-memory-log)))
+ (let ((cpu (when (fboundp 'profiler-cpu-stop) (profiler-cpu-stop)))
(mem (profiler-memory-stop)))
(message "%s profiler stopped"
(cond ((and mem cpu) "CPU and memory")
@@ -840,26 +846,31 @@ Also, if MODE is `mem' or `cpu+mem', then memory profiler will be started."
(defun profiler-reset ()
"Reset profiler logs."
(interactive)
- (when (fboundp 'profiler-cpu-log)
- (ignore (profiler-cpu-log)))
- (ignore (profiler-memory-log))
- t)
+ (when (and (fboundp 'profiler-cpu-running-p) (profiler-cpu-running-p))
+ (profiler-cpu-stop))
+ (when (profiler-memory-running-p)
+ (profiler-memory-stop))
+ (setq profiler-cpu-log nil
+ profiler-memory-log nil))
(defun profiler-report-cpu ()
- (let ((profile (profiler-cpu-profile)))
- (when profile
- (profiler-report-profile-other-window profile))))
+ (when profiler-cpu-log
+ (profiler-report-profile-other-window (profiler-cpu-profile))))
(defun profiler-report-memory ()
- (let ((profile (profiler-memory-profile)))
- (when profile
- (profiler-report-profile-other-window profile))))
+ (when profiler-memory-log
+ (profiler-report-profile-other-window (profiler-memory-profile))))
(defun profiler-report ()
"Report profiling results."
- (interactive)
- (profiler-report-cpu)
- (profiler-report-memory))
+ (when (and (fboundp 'profiler-cpu-running-p) (profiler-cpu-running-p))
+ (setq profiler-cpu-log (profiler-cpu-log)))
+ (when (profiler-memory-running-p)
+ (setq profiler-memory-log (profiler-memory-log)))
+ (if (and (not profiler-cpu-log) (not profiler-memory-log))
+ (user-error "No profiler run recorded")
+ (profiler-report-cpu)
+ (profiler-report-memory)))
;;;###autoload
(defun profiler-find-profile (filename)