emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/org d012350dad: org-persist: Report read/write duration


From: ELPA Syncer
Subject: [elpa] externals/org d012350dad: org-persist: Report read/write duration
Date: Sat, 25 Dec 2021 10:57:38 -0500 (EST)

branch: externals/org
commit d012350dadf15835e361626ba0a6ec08f8c7a715
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>

    org-persist: Report read/write duration
    
    * lisp/org-persist.el (org-persist--report-time): New variable
    controlling time reporting.  The default value is to report if
    read/write opeartion takes over 0.5 sec.
    (org-persist-write):
    (org-persist-read): Display message about read/write duration for each
    variable according to `org-persist--report-time'.
---
 lisp/org-persist.el | 42 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 4 deletions(-)

diff --git a/lisp/org-persist.el b/lisp/org-persist.el
index 80bbf7b058..4994625c88 100644
--- a/lisp/org-persist.el
+++ b/lisp/org-persist.el
@@ -88,6 +88,16 @@ a data variable.  Each plist contains the following 
properties:
   - `:inode':      buffer file inode, if any
   - `:hash':       buffer hash, if any")
 
+(defvar org-persist--report-time 0.5
+  "Whether to report read/write time.
+
+When the value is a number, it is a threshold number of seconds.  If
+the read/write time of a single variable exceeds the threashold, a
+message is displayed.
+
+When the value is a non-nil non-number, always display the message.
+When the value is nil, never diplay the message.")
+
 (defun org-persist--get-index (var &optional buffer)
   "Return plist used to store VAR in BUFFER.
 When BUFFER is nil, return plist for global VAR."
@@ -183,7 +193,8 @@ When BUFFER is `all', unregister VAR in all buffers."
   (unless (and buffer (not (get-buffer buffer)))
     (unless (listp var) (setq var (list var)))
     (with-current-buffer (or buffer (current-buffer))
-      (let ((index (org-persist--get-index var buffer)))
+      (let ((index (org-persist--get-index var buffer))
+            (start-time (float-time)))
         (setf index (plist-put index :hash (when buffer (secure-hash 'md5 
buffer))))
         (let ((print-circle t)
               print-level
@@ -218,7 +229,18 @@ When BUFFER is `all', unregister VAR in all buffers."
                 (unless (file-exists-p (file-name-directory file))
                   (make-directory (file-name-directory file) t))
                 (with-temp-file file
-                  (prin1 data (current-buffer)))))))))))
+                  (prin1 data (current-buffer)))
+                (let ((duration (- (float-time) start-time)))
+                  (when (or (and org-persist--report-time
+                                 (numberp org-persist--report-time)
+                                 (>= duration org-persist--report-time))
+                            (and org-persist--report-time
+                                 (not (numberp org-persist--report-time))))
+                    (if buffer
+                        (message "org-persist: Writing %S from %S took %.2f 
sec"
+                                 var buffer duration)
+                      (message "org-persist: Writing %S took %.2f sec"
+                               var duration))))))))))))
 
 (defun org-persist-write-all (&optional buffer)
   "Save all the persistent data."
@@ -244,7 +266,8 @@ When BUFFER is `all', unregister VAR in all buffers."
   "Restore VAR data in BUFFER."
   (let* ((index (org-persist--get-index var buffer))
          (persist-file (org-file-name-concat org-persist-directory (plist-get 
index :persist-file)))
-         (data nil))
+         (data nil)
+         (start-time (float-time)))
     (when (and index
                (file-exists-p persist-file)
                (or (not buffer)
@@ -275,7 +298,18 @@ When BUFFER is `all', unregister VAR in all buffers."
                    do
                    (when (alist-get var1 data)
                      (setf (symbol-value var1) (alist-get var1 data)))
-                   (run-hook-with-args 'org-persist-after-read-hook var1 
buffer)))))))
+                   (run-hook-with-args 'org-persist-after-read-hook var1 
buffer)))
+        (let ((duration (- (float-time) start-time)))
+          (when (or (and org-persist--report-time
+                         (numberp org-persist--report-time)
+                         (>= duration org-persist--report-time))
+                    (and org-persist--report-time
+                         (not (numberp org-persist--report-time))))
+            (if buffer
+                (message "org-persist: Reading %S from %S took %.2f sec"
+                         var buffer duration)
+              (message "org-persist: Reading %S took %.2f sec"
+                       var duration))))))))
 
 (defun org-persist-read-all (&optional buffer)
   "Restore all the persistent data in BUFFER."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]