diff --git a/lisp/org-persist.el b/lisp/org-persist.el index 80bbf7b05..4994625c8 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."