From cbe668e1338bd7ecb4b99b413b1f2c69a89ce415 Mon Sep 17 00:00:00 2001 From: James Cherti <60946298+jamescherti@users.noreply.github.com> Date: Thu, 12 Jun 2025 11:49:16 -0400 Subject: [PATCH] Add option to specify wait time before restoring gc-cons-threshold --- early-init.el | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/early-init.el b/early-init.el index dda1a6c..09e759a 100644 --- a/early-init.el +++ b/early-init.el @@ -22,6 +22,13 @@ ;;; Code: +;;; Internal variables + +(defvar minimal-emacs--backup-gc-cons-threshold gc-cons-threshold + "Backup of the original value of `gc-cons-threshold' before startup.") + +(setq gc-cons-threshold most-positive-fixnum) + ;;; Variables (defvar minimal-emacs-ui-features '() @@ -48,6 +55,9 @@ stored in `minimal-emacs--restore-gc-cons-threshold'.") "Value to which `gc-cons-threshold' is set after Emacs startup. Ignored if `minimal-emacs-optimize-startup-gc' is nil.") +(defvar minimal-emacs-gc-cons-threshold-restore-delay nil + "Number of seconds to wait before restoring `gc-cons-threshold'.") + (defvar minimal-emacs-inhibit-redisplay-during-startup nil "Suppress redisplay during startup to improve performance. This prevents visual updates while Emacs initializes. The tradeoff is that you @@ -146,12 +156,18 @@ pre-early-init.el, and post-early-init.el.") (setq garbage-collection-messages minimal-emacs-debug) (defun minimal-emacs--restore-gc-cons-threshold () - "Restore `minimal-emacs-gc-cons-threshold'." - (setq gc-cons-threshold minimal-emacs-gc-cons-threshold)) + "Restore `gc-cons-threshold' to `minimal-emacs-gc-cons-threshold'." + (if (bound-and-true-p minimal-emacs-gc-cons-threshold-restore-delay) + ;; Defer garbage collection during initialization to avoid 2 collections. + (run-at-time + minimal-emacs-gc-cons-threshold-restore-delay nil + (lambda () (setq gc-cons-threshold minimal-emacs-gc-cons-threshold))) + (setq gc-cons-threshold minimal-emacs-gc-cons-threshold))) -(when minimal-emacs-optimize-startup-gc - (setq gc-cons-threshold most-positive-fixnum) - (add-hook 'emacs-startup-hook #'minimal-emacs--restore-gc-cons-threshold 105)) +(if minimal-emacs-optimize-startup-gc + (add-hook 'emacs-startup-hook #'minimal-emacs--restore-gc-cons-threshold 105) + ;; The user chose not to modify `gc-cons-threshold'. + (setq gc-cons-threshold minimal-emacs--backup-gc-cons-threshold)) ;;; Native compilation and Byte compilation