* bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up @ 2021-12-23 19:51 Simon Pugnet 2022-01-06 14:56 ` Yuuki Harano 0 siblings, 1 reply; 4+ messages in thread From: Simon Pugnet @ 2021-12-23 19:51 UTC (permalink / raw) To: 52761 [-- Attachment #1: Type: text/plain, Size: 4680 bytes --] I've noticed a strange performance issue with Emacs when built --with-pgtk, but only when global-flycheck-mode is called during Emacs start-up. To reproduce, download and extract the following packages: - - Flycheck: https://melpa.org/#/flycheck - Dash.el (dependency): https://elpa.gnu.org/packages/dash.html Assuming these are at ~/flycheck and ~/dash, perform the following steps: - 1. Create ~/init.el as follows: - #+begin_src emacs-lisp (add-to-list 'load-path (expand-file-name "~/flycheck")) (add-to-list 'load-path (expand-file-name "~/dash")) (require 'flycheck) (global-flycheck-mode) #+end_src 2. Run Emacs, loading this init.el file: "emacs -Q -l ~/init.el" Now, when I use C-n/C-p to move around any buffer, there is a very short but noticeable delay between key-presses and the point actually moving. It's quite easy to notice when compared to the same Emacs run as just "emacs -Q". This only happens when Emacs is built --with-pgtk (and other features as below). If I remove --with-pgtk, this delay disappears. Also, if I do not call global-flycheck-mode during initialisation and instead call it manually at some later stage, the delay also does not appear. It only seems to happen when the global-flycheck-mode call is done during initialisation. Please let me know if there is any more information I can provide. All the best and thanks in advance for your help, Simon In GNU Emacs 29.0.50 (build 4, x86_64-pc-linux-gnu, GTK+ Version 3.24.31, cairo version 1.17.4) of 2021-12-23 built on tikal Repository revision: 2fa7feca336dd16c57ffef072e0f0da6fffe4c5f Repository branch: master Windowing system distributor 'System Description: Arch Linux Configured using: 'configure --with-native-compilation --with-modules --with-json --with-xinput2 --with-pgtk' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP XIM GTK3 ZLIB Important settings: value of $LC_CTYPE: en_GB.UTF-8 value of $LANG: en_GB.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t 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 auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t Load-path shadows: /usr/local/share/emacs/29.0.50/lisp/emacs-lisp/eieio-compat hides /usr/local/share/emacs/29.0.50/lisp/obsolete/eieio-compat Features: (shadow sort mail-extr emacsbug message mailcap yank-media rmc puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date seq gv subr-x byte-opt bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win 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 cl-generic 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 simple abbrev obarray cl-preloaded nadvice button 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 dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit pgtk lcms2 multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 56008 9769) (symbols 48 5662 1) (strings 32 16131 1632) (string-bytes 1 536291) (vectors 16 11510) (vector-slots 8 261217 13969) (floats 8 26 26) (intervals 56 224 0) (buffers 992 11)) [-- Attachment #2: attachment.sig --] [-- Type: application/pgp-signature, Size: 877 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up 2021-12-23 19:51 bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up Simon Pugnet @ 2022-01-06 14:56 ` Yuuki Harano 2022-01-06 15:11 ` Simon Pugnet 0 siblings, 1 reply; 4+ messages in thread From: Yuuki Harano @ 2022-01-06 14:56 UTC (permalink / raw) To: simon; +Cc: 52761 [-- Attachment #1: Type: Text/Plain, Size: 280 bytes --] On Thu, 23 Dec 2021 19:51:09 +0000, Simon Pugnet <simon@polaris64.net> wrote: > I've noticed a strange performance issue with Emacs when built > --with-pgtk, but only when global-flycheck-mode is called during Emacs > start-up. Please try the attached patch. -- Yuuki Harano [-- Attachment #2: keypress-delay.diff --] [-- Type: Text/X-Patch, Size: 1856 bytes --] diff --git a/src/xgselect.c b/src/xgselect.c index 674c259db7..14a8c73541 100644 --- a/src/xgselect.c +++ b/src/xgselect.c @@ -96,10 +96,21 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1; int i, nfds, tmo_in_millisec, must_free = 0; bool need_to_dispatch; +#ifdef HAVE_PGTK + bool already_has_events = false; +#endif context = g_main_context_default (); acquire_select_lock (context); +#ifdef HAVE_PGTK + { + int errno_back = errno; + already_has_events = g_main_context_pending (context); + errno = errno_back; + } +#endif + if (rfds) all_rfds = *rfds; else FD_ZERO (&all_rfds); if (wfds) all_wfds = *wfds; @@ -146,10 +157,41 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds, tmop = &tmo; } +#ifndef HAVE_PGTK fds_lim = max_fds + 1; nfds = thread_select (pselect, fds_lim, &all_rfds, have_wfds ? &all_wfds : NULL, efds, tmop, sigmask); +#else + /* + On PGTK, when you type a key, the key press event are received, + and one more key press event seems to be received internally. + The second event is not via a socket, so there are weird status: + - socket read buffer is empty + - a key press event is pending + In that case, we should not sleep, and dispatch the event immediately. + Bug#52761 + */ + if (!already_has_events) + { + fds_lim = max_fds + 1; + nfds = thread_select (pselect, fds_lim, + &all_rfds, have_wfds ? &all_wfds : NULL, efds, + tmop, sigmask); + } + else + { + /* Emulate return values */ + nfds = 1; + FD_ZERO(&all_rfds); + if (have_wfds) + FD_ZERO(&all_wfds); + if (efds) + FD_ZERO(efds); + our_fds++; + } +#endif + if (nfds < 0) retval = nfds; else if (nfds > 0) ^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up 2022-01-06 14:56 ` Yuuki Harano @ 2022-01-06 15:11 ` Simon Pugnet 2022-01-07 15:01 ` Yuuki Harano 0 siblings, 1 reply; 4+ messages in thread From: Simon Pugnet @ 2022-01-06 15:11 UTC (permalink / raw) To: Yuuki Harano; +Cc: 52761 [-- Attachment #1: Type: text/plain, Size: 487 bytes --] "Yuuki Harano" <masm+emacs@masm11.me> writes: > On Thu, 23 Dec 2021 19:51:09 +0000, > Simon Pugnet <simon@polaris64.net> wrote: >> I've noticed a strange performance issue with Emacs when built >> --with-pgtk, but only when global-flycheck-mode is called during >> Emacs >> start-up. > > Please try the attached patch. That patch seems to resolve the problem for me! Thank you for looking into this bug. Kind regards, -- Simon Pugnet https://www.polaris64.net/ [-- Attachment #2: attachment.sig --] [-- Type: application/pgp-signature, Size: 877 bytes --] ^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up 2022-01-06 15:11 ` Simon Pugnet @ 2022-01-07 15:01 ` Yuuki Harano 0 siblings, 0 replies; 4+ messages in thread From: Yuuki Harano @ 2022-01-07 15:01 UTC (permalink / raw) To: simon; +Cc: 52761-done On Thu, 06 Jan 2022 15:11:33 +0000, Simon Pugnet <simon@polaris64.net> wrote: > That patch seems to resolve the problem for me! Thank you for looking > into this bug. Thanks for the confirmation. I fixed on master, and I'm closing this issue. -- Yuuki Harano ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-01-07 15:01 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-12-23 19:51 bug#52761: 29.0.50; (--with-pgtk) poor point movement performance when global-flycheck-mode is called during start-up Simon Pugnet 2022-01-06 14:56 ` Yuuki Harano 2022-01-06 15:11 ` Simon Pugnet 2022-01-07 15:01 ` Yuuki Harano
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).