Package: emacs;
Reported by: "Herman, Geza" <geza.herman <at> gmail.com>
Date: Tue, 21 Mar 2023 20:03:02 UTC
Severity: normal
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: help-debbugs <at> gnu.org (GNU bug Tracking System) To: "Herman, Geza" <geza.herman <at> gmail.com> Subject: bug#62352: closed (Re: bug#62352: Very slow scroll-down-line with a lot of text properties) Date: Sat, 25 Mar 2023 11:59:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report #62352: Very slow scroll-down-line with a lot of text properties which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 62352 <at> debbugs.gnu.org. -- 62352: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62352 GNU Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Eli Zaretskii <eliz <at> gnu.org> To: Gregory Heytings <gregory <at> heytings.org> Cc: 62352-done <at> debbugs.gnu.org, geza.herman <at> gmail.com Subject: Re: bug#62352: Very slow scroll-down-line with a lot of text properties Date: Sat, 25 Mar 2023 14:58:03 +0300> Date: Tue, 21 Mar 2023 21:58:05 +0000 > From: Gregory Heytings <gregory <at> heytings.org> > cc: "Herman, Geza" <geza.herman <at> gmail.com>, 62352 <at> debbugs.gnu.org > > > However, are you saying that this is slower in Emacs 29 than it was in > > Emacs 28? If so, bisection will be appreciated. > > FTR, I see the same behavior in Emacs 26, 27, 28 and 29 with that recipe. That figures: the relevant code didn't see any significant changes in the recent years. I also think the impression that C-n/C-p (with scroll-conservatively) are free of this problem is inaccurate. They are a bit faster, indeed, but in my unoptimized build I see the scroll taking almost the same time in both cases, close to 1 sec. I think OP's impression is based on where each of these crosses the threshold of Emacs being able to keep up with the repeated keystrokes, and that depends on both the auto-repeat rate and the CPU power, so it is different on different systems. E.g., in an optimized build I see no stuttering with scroll-down-line, either. So I think there's no bug here we need to look into, and I'm therefore closing this bug report.
[Message part 3 (message/rfc822, inline)]
From: "Herman, Geza" <geza.herman <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: Very slow scroll-down-line with a lot of text properties Date: Tue, 21 Mar 2023 21:01:58 +0100[Message part 4 (text/plain, inline)]Emacs can freeze for seconds when scroll-down-line is called multiple times if the buffer contains a lot of text properties. I noticed this when using lsp-mode for C++. To reproduce the issue without lsp-mode, execute this elisp command with M-:, this will add a face to operators: (font-lock-add-keywords 'c++-mode '(("[][~!^&\|<>:=,.\\+*/%-]" 0 'error))) Also, bind scroll-down-line to a key, like shift-up: (global-set-key (kbd "<S-up>") 'scroll-down-line) Then, put the attached example.cpp into a c++ buffer, move the point to the bottom, then press and hold shift-up. Emacs will update the window for several scroll events, but after that it won't update the screen for a while. Even after shift-up is released, Emacs needs several seconds to be interactive again. In GNU Emacs 29.0.60 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.36, cairo version 1.16.0) of 2023-03-21 built on okoska Repository revision: 7a1272168af1a5b82979efa29451147c5d867981 Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12101006 System Description: Debian GNU/Linux bookworm/sid Configured using: 'configure --with-native-compilation=aot --without-compress-install --with-json --with-xinput2 --with-xwidgets --with-tree-sitter --with-cairo' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB Important settings: value of $LC_ALL: C.UTF-8 value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=none locale-coding-system: utf-8-unix Major mode: C++//l Minor modes in effect: tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t abbrev-mode: t Load-path shadows: /home/geza/.emacs.d/elpa/transient-20230304.1149/transient hides /usr/local/share/emacs/29.0.60/lisp/transient Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils comp comp-cstr warnings icons subr-x rx cl-seq cl-macs gv cl-extra help-mode bytecomp byte-compile cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs cl-loaddefs cl-lib info evil-surround-autoloads scad-mode-autoloads qml-mode-autoloads evil-exchange-autoloads evil-args-autoloads cmake-font-lock-autoloads visual-fill-column-autoloads evil-textobj-anyblock-autoloads evil-visualstar-autoloads impatient-mode-autoloads volatile-highlights-autoloads maxima-autoloads evil-cleverparens-autoloads consult-dir-autoloads gnuplot-autoloads helpful-autoloads git-modes-autoloads font-lock-profiler-autoloads paredit-autoloads math-preview-autoloads modern-cpp-font-lock-autoloads column-enforce-mode-autoloads plantuml-mode-autoloads yaml-mode-autoloads magit-todos-autoloads hl-todo-autoloads treemacs-evil-autoloads define-word-autoloads paradox-autoloads highlight-quoted-autoloads rg-autoloads lsp-pyright-autoloads peep-dired-autoloads highlight-numbers-autoloads dired-filter-autoloads fold-this-autoloads eterm-256color-autoloads xterm-color-autoloads rainbow-mode-autoloads evil-org-autoloads evil-mc-autoloads doom-modeline-autoloads hungry-delete-autoloads vterm-autoloads magit-tbdiff-autoloads embark-consult-autoloads literate-calc-mode-autoloads free-keys-autoloads memory-usage-autoloads ccls-autoloads svg-tag-mode-autoloads atomic-chrome-autoloads websocket-autoloads test-simple-autoloads frog-jump-buffer-autoloads frog-menu-autoloads gcmh-autoloads elisp-refs-autoloads evil-textobj-line-autoloads yasnippet-autoloads highlight-doxygen-autoloads vertico-autoloads elfeed-autoloads consult-lsp-autoloads dired-narrow-autoloads highlight-autoloads smeargle-autoloads clean-aindent-mode-autoloads cmake-mode-autoloads string-inflection-autoloads ws-butler-autoloads ov-autoloads gif-screencast-autoloads diredfl-autoloads go-mode-autoloads centered-cursor-mode-autoloads lsp-ui-autoloads camcorder-autoloads easy-mmode org-jira-autoloads ag-autoloads queue-autoloads orderless-autoloads hide-lines-autoloads git-timemachine-autoloads csv-mode-autoloads broadcast-autoloads evil-leader-autoloads hide-mode-line-autoloads company-box-autoloads transpose-frame-autoloads lsp-treemacs-autoloads evil-textobj-entire-autoloads htmlize-autoloads dired-subtree-autoloads dired-hacks-utils-autoloads evil-multiedit-autoloads iedit-autoloads orgit-autoloads evil-textobj-column-autoloads names-autoloads advice wgrep-autoloads ninja-mode-autoloads smartparens-autoloads powerthesaurus-autoloads request-autoloads git-gutter-fringe-autoloads git-gutter-autoloads highlight-indent-guides-autoloads parent-mode-autoloads pcre2el-autoloads rust-mode-autoloads evil-snipe-autoloads fringe-helper-autoloads glsl-mode-autoloads disk-usage-autoloads highlight-symbol-autoloads git-identity-autoloads consult-flycheck-autoloads consult-autoloads shrink-path-autoloads treemacs-projectile-autoloads winum-autoloads svg-lib-autoloads org-superstar-autoloads rmsbolt-autoloads dired-git-info-autoloads all-the-icons-autoloads ob-ipython-autoloads dash-functional-autoloads evil-collection-autoloads annalist-autoloads treemacs-magit-autoloads treemacs-autoloads cfrs-autoloads pfuture-autoloads ace-window-autoloads avy-autoloads demangle-mode-autoloads frame-local-autoloads evil-anzu-autoloads anzu-autoloads evil-indent-plus-autoloads better-jumper-autoloads delight-autoloads company-autoloads projectile-autoloads marginalia-autoloads dumb-jump-autoloads popup-autoloads bm-autoloads vdiff-magit-autoloads vdiff-autoloads hydra-autoloads evil-lion-autoloads evil-autoloads goto-chg-autoloads evil-matchit-autoloads async-autoloads simple-httpd-autoloads lorem-ipsum-autoloads expand-region-autoloads shut-up-autoloads flycheck-autoloads pkg-info-autoloads epl-autoloads page-break-lines-autoloads embark-autoloads which-key-autoloads blamer-autoloads posframe-autoloads git-link-autoloads drag-stuff-autoloads code-review-autoloads emojify-autoloads forge-autoloads yaml-autoloads deferred-autoloads uuidgen-autoloads ghub-autoloads treepy-autoloads a-autoloads magit-autoloads magit-section-autoloads git-commit-autoloads with-editor-autoloads transient-autoloads closql-autoloads emacsql-autoloads compat-autoloads lsp-mode-autoloads lv-autoloads markdown-mode-autoloads spinner-autoloads ht-autoloads f-autoloads s-autoloads dash-autoloads rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads xwidget-internal dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 150387 10063) (symbols 48 11460 0) (strings 32 32439 3583) (string-bytes 1 1406757) (vectors 16 19041) (vector-slots 8 386441 14177) (floats 8 38 102) (intervals 56 7894 0) (buffers 984 13))[example.cpp (text/x-c++src, attachment)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.