[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 9997429 4/5: Allow for retrieving profiler logs aft
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 9997429 4/5: Allow for retrieving profiler logs after stopping |
Date: |
Thu, 27 Jun 2019 15:00:47 -0400 (EDT) |
branch: master
commit 9997429cb7f960a1a08c7dfb4848a0cb60107f57
Author: Vasilij Schneidermann <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>
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.
---
lisp/profiler.el | 59 +++++++++++++++++++++++++++++++++-----------------------
1 file changed, 35 insertions(+), 24 deletions(-)
diff --git a/lisp/profiler.el b/lisp/profiler.el
index 45dc1d1..74b847c 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)