Subject: 29.1.50; Emacs 29 regresses on macOS

From: Zhang Haijun <[email-masked]>
Date: Wed, 13 Sep 2023 06:47:12 +0000

1.  emacs -Q
  2.  paste the following code to scratch buffer and execute it for saveral times

(benchmark-progn
  (setq enable-dir-local-variables nil
            enable-local-variables nil)

  (let* ((test-dir "~/source/emacs-git/lisp")
             (file-list (directory-files test-dir t
                                                       "\\`[fsw].*[.]el\\'" t))
             (start-tm (current-time))
             end-tm buf buf-list)

      (dolist (test-file file-list)
        (setq buf (find-file-noselect test-file))
        (with-current-buffer buf
            (goto-char (point-min))
            (while (not (eobp))
              (end-of-defun)))
        (setq buf-list (cons buf buf-list)))

      (setq end-tm (current-time))

      (dolist (buf buf-list)
        (kill-buffer buf))

      (let ((delta (time-subtract end-tm start-tm)))
        (message "--- files: %d, delta: %s"
                     (length file-list) (float-time delta)))))

======== Result for Emacs 27: ======
--- files: 61, delta: 3.021547
Elapsed time: 3.030485s (0.173305s in 14 GCs)
"--- files: 61, delta: 3.021547"
--- files: 61, delta: 3.1373
Elapsed time: 3.145406s (0.181551s in 14 GCs)
"--- files: 61, delta: 3.1373"
--- files: 61, delta: 3.093033
Elapsed time: 3.100581s (0.162783s in 13 GCs)
"--- files: 61, delta: 3.093033"

======== Result for Emacs 29: =======
--- files: 61, delta: 5.271817
Elapsed time: 5.278284s (0.174266s in 13 GCs)
"--- files: 61, delta: 5.271817"
--- files: 61, delta: 4.919798
Elapsed time: 4.923492s (0.162042s in 13 GCs)
"--- files: 61, delta: 4.919798"
--- files: 61, delta: 5.127965
Elapsed time: 5.131604s (0.154718s in 12 GCs)
"--- files: 61, delta: 5.127965"
--- files: 61, delta: 4.978964
Elapsed time: 4.982757s (0.149401s in 12 GCs)
"--- files: 61, delta: 4.978964"

Time used in Emacs 29 is 1.6x than in Emacs 27. They are all built with "-O2".
I also tested on Linux. There is no such big regress.