[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/gcmh 855f03e 25/32: Implement auto idle delay mode
From: |
Andrea Corallo |
Subject: |
[elpa] externals/gcmh 855f03e 25/32: Implement auto idle delay mode |
Date: |
Mon, 16 Nov 2020 17:32:07 -0500 (EST) |
branch: externals/gcmh
commit 855f03edf921aabc5822f9941a6e939a84bb3c6a
Author: Andrea Corallo <andrea.corallo@arm.com>
Commit: Andrea Corallo <andrea.corallo@arm.com>
Implement auto idle delay mode
---
gcmh.el | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/gcmh.el b/gcmh.el
index c81e698..6c32281 100644
--- a/gcmh.el
+++ b/gcmh.el
@@ -49,7 +49,15 @@ cause OS paging."
:type 'number)
(defcustom gcmh-idle-delay 15
- "Idle time to wait in seconds before triggering GC."
+ "Idle time to wait in seconds before triggering GC.
+If `auto' this is auto computed based on `gcmh-auto-idle-delay-factor'."
+ :group 'gcmh
+ :type '(choice number (const auto)))
+
+(defcustom gcmh-auto-idle-delay-factor 10
+ "Factor to compute the idle delay when in idle-delay auto mode.
+The idle delay will be `gcmh-auto-idle-delay-factor' times the
+time the last non idle garbage collection time."
:group 'gcmh
:type 'number)
@@ -72,13 +80,19 @@ cause OS paging."
This is to be used with the `pre-command-hook'."
(setq gc-cons-threshold gcmh-high-cons-threshold))
+(defvar gcmh-last-gc-time 0.1
+ "How long it took to perform the last garbage collection.")
+
(defun gcmh-register-idle-timer ()
"Register a timer to run `gcmh-idle-garbage-collect'.
Cancel the previous one if present."
- (when (timerp gcmh-idle-timer)
- (cancel-timer gcmh-idle-timer))
- (setf gcmh-idle-timer
- (run-with-idle-timer gcmh-idle-delay nil #'gcmh-idle-garbage-collect)))
+ (let ((idle-t (if (eq gcmh-idle-delay 'auto)
+ (* gcmh-auto-idle-delay-factor gcmh-last-gc-time)
+ gcmh-idle-delay)))
+ (when (timerp gcmh-idle-timer)
+ (cancel-timer gcmh-idle-timer))
+ (setf gcmh-idle-timer
+ (run-with-idle-timer idle-t nil #'gcmh-idle-garbage-collect))))
(defun gcmh-idle-garbage-collect ()
"Run garbage collection after `gcmh-idle-delay'."
@@ -87,10 +101,10 @@ Cancel the previous one if present."
(message "Garbage collecting...")
(condition-case-unless-debug e
(message "Garbage collecting...done (%.3fs)"
- (gcmh-time (garbage-collect)))
+ (setq gcmh-last-gc-time (gcmh-time (garbage-collect))))
(error (message "Garbage collecting...failed")
(signal (car e) (cdr e)))))
- (garbage-collect))
+ (setq gcmh-last-gc-time (gcmh-time (garbage-collect))))
(setq gc-cons-threshold gcmh-low-cons-threshold))
;;;###autoload
- [elpa] externals/gcmh dd69c84 10/32: add warning into readme, (continued)
- [elpa] externals/gcmh dd69c84 10/32: add warning into readme, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 537d050 18/32: Further minor typo, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 8867533 20/32: Improve messaging, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh f449abb 27/32: No reason anymore to use `run-with-idle-timer' so use `run-with-timer', Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 8bf0666 30/32: Rename `gcmh-register-idle-timer' into `gcmh-register-idle-gc', Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 12fd03c 24/32: Set the new timer for running once and on post-command-hook, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 72683e1 13/32: Update conventions, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh b1bde50 22/32: Update copyright + email, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 9e241e0 21/32: Fix missing `gcmh-low-cons-threshold' set introduced by 8867533, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 84c43a4 23/32: Remove unnecessary require in README, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 855f03e 25/32: Implement auto idle delay mode,
Andrea Corallo <=
- [elpa] externals/gcmh 04e3c0c 28/32: Set `gcmh-auto-idle-delay-factor' to 20, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 2827dff 31/32: Clean-up unnecessary logic, Andrea Corallo, 2020/11/16
- [elpa] externals/gcmh 5a83e25 32/32: Bump version 0.2, Andrea Corallo, 2020/11/16