* bug#44610: 27.1; Keyboard Macro Performance Problem @ 2020-11-13 2:51 Robert Thorpe 2020-11-13 8:55 ` Jean Louis 2020-11-14 14:26 ` Eli Zaretskii 0 siblings, 2 replies; 10+ messages in thread From: Robert Thorpe @ 2020-11-13 2:51 UTC (permalink / raw) To: 44610 This bug report comes from a discussion on Emacs reddit. Start with a blank buffer and create about ~300 lines of the string: ffffffffffffffffffff (pppppppppppppppppppp); This will be turned into: 'ffffffffffffffffffff': That can be done using the following keyboard macro: M-m ' M-f ' : C-k C-n You can apply that to every line in the buffer using C-u 300 f4. Now here's the strange bit. In a fundamental-mode buffer this is extremely fast, nearly instantaneous. But, in a python-mode buffer it takes 20 to 30 seconds. If the mode is c-mode then it is also much slower than fundamental-mode. It will also exceed the variable binding depth in some cases. Oddly it is faster if you use forward-line instead of C-n. Here is the original thread: https://www.reddit.com/r/emacs/comments/joeno5/anyway_to_speed_up_macros_in_emacs/ I understand it might not be worth fixing if it's a corner case. BR, Robert Thorpe In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.22, cairo version 1.17.3) of 2020-08-28 built on juergen Windowing system distributor 'The X.Org Foundation', version 11.0.12009000 System Description: Arch Linux Recent messages: Keyboard macro defined Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %; q to quit; ? for help. Mark set [2 times] Saved text until "fffffffffffff (pppppppppppppppppppp); " Mark set [2 times] Defining kbd macro... You can run the command ‘forward-line’ with M-x fo-lin RET Keyboard macro defined Can’t guess python-indent-offset, using defaults: 4 Configured using: 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --with-x-toolkit=gtk3 --with-xft --with-wide-int --with-modules --with-cairo --with-harfbuzz 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt' CPPFLAGS=-D_FORTIFY_SOURCE=2 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now' Configured features: XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP Important settings: value of $LANG: en_GB.UTF-8 locale-coding-system: utf-8-unix Major mode: Python Minor modes in effect: shell-dirtrack-mode: t dynamic-completion-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t global-visual-line-mode: t visual-line-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow mail-extr emacsbug sendmail eieio-opt cl-extra speedbar sb-image ezimage dframe find-func thingatpt help-fns radix-tree help-mode python tramp-sh tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat shell pcomplete parse-time iso8601 ls-lisp comint ring ansi-color cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs dired-aux autorevert filenotify calc-alg calc-ext calc-menu calc calc-loaddefs calc-macs view sort disp-table tetris gamegrid rmailsum misearch multi-isearch noutline outline easy-mmode shr-color color shr url-cookie url-domsuf url-util url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs json map url-vars svg xml dom browse-url qp rmailout rmailmm message rmc puny dired-x dired dired-loaddefs format-spec rfc822 mml mml-sec password-cache epa derived epg epg-config gnus-util time-date subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader mail-parse rfc2231 rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils bookmark easymenu text-property-search pp server completion avoid misc edmacro kmacro cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type 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 elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu 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 charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 212016 51202) (symbols 48 17470 1) (strings 32 53646 2929) (string-bytes 1 1713027) (vectors 16 29359) (vector-slots 8 1024997 53850) (floats 8 262 286) (intervals 56 13457 0) (buffers 1000 44)) ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-13 2:51 bug#44610: 27.1; Keyboard Macro Performance Problem Robert Thorpe @ 2020-11-13 8:55 ` Jean Louis 2020-11-14 14:26 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Jean Louis @ 2020-11-13 8:55 UTC (permalink / raw) To: Robert Thorpe, 44610 Modes are programs and their checks slow down the macro execution. If it happens to me I will simple temporarily switch the mode to fundamental. Maybe there is or could be an option that macro executes only in fundamental mode and then automatically turns on whatever other mode was there. Jean ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-13 2:51 bug#44610: 27.1; Keyboard Macro Performance Problem Robert Thorpe 2020-11-13 8:55 ` Jean Louis @ 2020-11-14 14:26 ` Eli Zaretskii 2020-11-14 16:03 ` Jean Louis 2020-11-15 23:44 ` Robert Thorpe 1 sibling, 2 replies; 10+ messages in thread From: Eli Zaretskii @ 2020-11-14 14:26 UTC (permalink / raw) To: Robert Thorpe; +Cc: 44610 > From: Robert Thorpe <rt@robertthorpeconsulting.com> > Date: Fri, 13 Nov 2020 02:51:12 +0000 > > > This bug report comes from a discussion on Emacs reddit. > > Start with a blank buffer and create about ~300 lines of the string: > > ffffffffffffffffffff (pppppppppppppppppppp); > > This will be turned into: > > 'ffffffffffffffffffff': > > That can be done using the following keyboard macro: M-m ' M-f ' : C-k > C-n > > You can apply that to every line in the buffer using C-u 300 f4. > > Now here's the strange bit. In a fundamental-mode buffer this is > extremely fast, nearly instantaneous. But, in a python-mode buffer it > takes 20 to 30 seconds. If the mode is c-mode then it is also much > slower than fundamental-mode. It will also exceed the variable binding > depth in some cases. Oddly it is faster if you use forward-line instead > of C-n. I suggest to produce and present a profile of this. Invoke this macro after "M-x profiler-start RET RET", then "M-x profiler-report RET", expand the profile fully by "C-u RET" on the top line, and post the result here. That should give some clues. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-14 14:26 ` Eli Zaretskii @ 2020-11-14 16:03 ` Jean Louis 2020-11-14 16:24 ` Eli Zaretskii 2020-11-14 16:50 ` Eli Zaretskii 2020-11-15 23:44 ` Robert Thorpe 1 sibling, 2 replies; 10+ messages in thread From: Jean Louis @ 2020-11-14 16:03 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Robert Thorpe, 44610 * Eli Zaretskii <eliz@gnu.org> [2020-11-14 17:27]: > > From: Robert Thorpe <rt@robertthorpeconsulting.com> > > Date: Fri, 13 Nov 2020 02:51:12 +0000 > > > > > > This bug report comes from a discussion on Emacs reddit. > > > > Start with a blank buffer and create about ~300 lines of the string: > > > > ffffffffffffffffffff (pppppppppppppppppppp); > > > > This will be turned into: > > > > 'ffffffffffffffffffff': > > > > That can be done using the following keyboard macro: M-m ' M-f ' : C-k > > C-n > > > > You can apply that to every line in the buffer using C-u 300 f4. > > > > Now here's the strange bit. In a fundamental-mode buffer this is > > extremely fast, nearly instantaneous. But, in a python-mode buffer it > > takes 20 to 30 seconds. If the mode is c-mode then it is also much > > slower than fundamental-mode. It will also exceed the variable binding > > depth in some cases. Oddly it is faster if you use forward-line instead > > of C-n. > > I suggest to produce and present a profile of this. Invoke this macro > after "M-x profiler-start RET RET", then "M-x profiler-report RET", > expand the profile fully by "C-u RET" on the top line, and post the > result here. That should give some clues. That is great advise to learn from. Macro took just about less than 2 seconds on my notebook Lenovo Thinkpad T410. I am not the initial reporter. I have tested it in python-mode in plain emacs -Q with the latest development version: - command-execute 20,601,881 99% - call-interactively 20,601,881 99% - funcall-interactively 19,934,160 96% - kmacro-end-or-call-macro 15,337,767 74% - kmacro-call-macro 15,337,767 74% - call-last-kbd-macro 15,242,727 73% - command-execute 15,102,838 73% - call-interactively 15,021,006 72% - funcall-interactively 14,985,294 72% - next-line 13,970,433 67% - line-move 13,968,321 67% - line-move-visual 12,842,225 62% - vertical-motion 9,925,619 48% - jit-lock-function 9,925,619 48% - jit-lock-fontify-now 9,925,619 48% - jit-lock--run-functions 7,165,300 34% - run-hook-wrapped 7,157,012 34% - #<compiled 0x5b100c193163db5> 7,157,012 34% - font-lock-fontify-region 7,157,012 34% - font-lock-default-fontify-region 7,153,844 34% - font-lock-fontify-keywords-region 5,169,903 25% #<compiled 0x19a45f465d8aaf17> 369,664 1% #<compiled -0x1210e8980f7ecafc> 308,861 1% - python--font-lock-f-strings 306,448 1% syntax-ppss 11,536 0% - font-lock-fontify-syntactically-region 1,975,653 9% - python-font-lock-syntactic-face-function 1,889,981 9% - python-info-docstring-p 1,878,263 9% - python-nav-backward-sexp 1,150,110 5% - python-nav-forward-sexp 1,144,830 5% - python-nav--forward-sexp 1,144,830 5% - python-info-beginning-of-block-p 519,389 2% - python-info-statement-starts-block-p 407,940 1% - python-nav-beginning-of-statement 100,032 0% - syntax-ppss 46,400 0% #<compiled 0x1c65d0f034163548> 4,320 0% - python-info-line-ends-backslash-p 45,344 0% - syntax-ppss 45,344 0% #<compiled 0x1c65d0f034163548> 4,320 0% - python-info-beginning-of-statement-p 103,161 0% - python-nav-beginning-of-statement 103,161 0% - syntax-ppss 54,825 0% make-byte-code 4,377 0% - python-info-line-ends-backslash-p 35,904 0% syntax-ppss 35,904 0% - python-info-current-line-empty-p 307,473 1% beginning-of-line 4,377 0% - python-info-end-of-block-p 130,384 0% - python-info-end-of-statement-p 130,384 0% - python-nav-end-of-statement 130,384 0% syntax-ppss 91,472 0% - python-info-line-ends-backslash-p 34,768 0% syntax-ppss 34,768 0% - python-info-beginning-of-statement-p 116,336 0% - python-nav-beginning-of-statement 116,336 0% - python-info-line-ends-backslash-p 55,648 0% syntax-ppss 55,648 0% syntax-ppss 44,112 0% - python-nav-beginning-of-statement 53,456 0% - python-info-line-ends-backslash-p 21,040 0% syntax-ppss 21,040 0% syntax-ppss 19,984 0% - python-syntax-context-type 9,504 0% syntax-ppss 9,504 0% - python-info-assignment-statement-p 314,499 1% - python-nav-beginning-of-statement 19,587 0% - python-info-line-ends-backslash-p 7,392 0% syntax-ppss 7,392 0% syntax-ppss 6,336 0% - python-nav-beginning-of-statement 36,902 0% - syntax-ppss 22,595 0% #<compiled 0x1c65d0f034163548> 5,859 0% - python-info-line-ends-backslash-p 8,448 0% syntax-ppss 8,448 0% syntax-ppss 27,216 0% replace-regexp-in-string 2,112 0% font-lock-unfontify-region 4,144 0% - run-with-timer 2,730,692 13% - apply 2,730,692 13% - run-at-time 2,729,636 13% - timer-activate 2,717,252 13% - timer--activate 2,716,196 13% - timer--time-less-p 2,716,196 13% timer--time 36,054 0% time-less-p 24,036 0% - timer-set-time 12,384 0% timer--time-setter 12,384 0% make-byte-code 5,859 0% - posn-at-point 2,878,318 13% file-remote-p 2,360,868 11% - jit-lock-function 340,326 1% - jit-lock-fontify-now 340,326 1% - jit-lock--run-functions 335,086 1% - run-hook-wrapped 330,942 1% - #<compiled 0x5b100c193163db5> 330,942 1% - font-lock-fontify-region 330,942 1% - font-lock-default-fontify-region 329,886 1% - font-lock-fontify-keywords-region 202,469 0% #<compiled 0x19a45f465d8aaf17> 15,872 0% - python--font-lock-f-strings 15,456 0% syntax-ppss 3,168 0% #<compiled -0x1210e8980f7ecafc> 12,288 0% - font-lock-fontify-syntactically-region 123,273 0% - python-font-lock-syntactic-face-function 99,145 0% - python-info-docstring-p 99,145 0% - python-nav-backward-sexp 49,329 0% - python-nav-forward-sexp 48,273 0% - python-nav--forward-sexp 48,273 0% - python-info-beginning-of-block-p 15,105 0% python-info-statement-starts-block-p 15,105 0% - python-nav-beginning-of-statement 12,512 0% syntax-ppss 8,368 0% python-info-current-line-empty-p 12,288 0% - python-syntax-context-type 4,224 0% syntax-ppss 4,224 0% - python-info-beginning-of-statement-p 4,144 0% python-nav-beginning-of-statement 4,144 0% - python-info-assignment-statement-p 20,784 0% - python-nav-beginning-of-statement 8,368 0% - python-info-line-ends-backslash-p 3,168 0% syntax-ppss 3,168 0% syntax-ppss 1,056 0% - python-nav-beginning-of-statement 8,368 0% syntax-ppss 2,112 0% - python-info-line-ends-backslash-p 2,112 0% syntax-ppss 2,112 0% syntax-ppss 8,368 0% replace-regexp-in-string 4,144 0% font-lock-unfontify-region 4,144 0% - eval 144,979 0% if 132,784 0% unless 6,336 0% - default-line-height 1,089,216 5% default-font-height 1,089,216 5% - window-inside-pixel-edges 21,120 0% - window-edges 15,840 0% window-current-scroll-bars 11,616 0% - kill-line 498,749 2% - kill-region 498,749 2% - kill-new 424,312 2% menu-bar-update-yank-menu 340,984 1% - gui-select-text 74,880 0% - gui-set-selection 74,880 0% - gui-backend-set-selection 73,824 0% - apply 73,824 0% #<compiled -0x1ef4cefd5124968d> 73,824 0% - filter-buffer-substring 74,437 0% - buffer-substring--filter 68,101 0% - #<compiled -0x1e2a987f6542516b> 68,101 0% - apply 68,101 0% - #<compiled 0xd88b599ee0a5190> 63,957 0% - delete-and-extract-region 21,901 0% - jit-lock-after-change 9,666 0% - run-hook-with-args 4,833 0% - font-lock-extend-jit-lock-region-after-change 4,833 0% get-text-property 4,833 0% - self-insert-command 485,032 2% - python-indent-post-self-insert-function 421,304 2% - syntax-ppss 421,304 2% - syntax-propertize 325,688 1% #<compiled 0x14be23ea75627c25> 311,064 1% - run-hook-wrapped 1,056 0% #<compiled -0x10385ae61af9e5a6> 1,056 0% - electric-indent-post-self-insert-function 22,016 0% - syntax-ppss 22,016 0% - syntax-propertize 3,168 0% - run-hook-wrapped 1,056 0% #<compiled -0x1038556930f9e5a6> 1,056 0% - jit-lock-after-change 12,432 0% run-hook-with-args 4,144 0% - undo-auto--undoable-change 32 0% - undo-auto--boundary-ensure-timer 32 0% - run-at-time 32 0% - timer-set-time 32 0% timer--time-setter 32 0% - jit-lock--antiblink-post-command 113,809 0% - syntax-ppss 79,729 0% vconcat 4,833 0% syntax-propertize 2,112 0% - run-with-idle-timer 29,936 0% - timer-activate-when-idle 25,712 0% - timer--activate 25,712 0% timer--time-less-p 25,712 0% - timer-set-idle-time 4,224 0% timer--time-setter 4,224 0% - undo-auto--add-boundary 4,224 0% undo-auto--boundaries 4,224 0% - execute-extended-command 4,593,217 22% - command-execute 3,494,291 16% - call-interactively 3,494,291 16% - funcall-interactively 3,494,275 16% - profiler-report 3,491,303 16% profiler-memory-running-p 5,863 0% - profiler-start 2,972 0% message 2,341 0% - sit-for 745,896 3% - redisplay 744,768 3% - redisplay_internal (C function) 277,761 1% - tool-bar-make-keymap 271,923 1% - tool-bar-make-keymap-1 271,923 1% - mapcar 271,923 1% - #<compiled -0xe8295ef54b23da6> 271,923 1% - eval 17,416 0% - find-image 17,416 0% image-search-load-path 17,416 0% - find-image 1,048 0% image-search-load-path 1,048 0% kill-this-buffer-enabled-p 1,024 0% - menu-bar-update-buffers 672 0% menu-bar-update-buffers-1 672 0% - substitute-command-keys 21 0% generate-new-buffer 21 0% - read-event 16 0% - command-execute 16 0% call-interactively 16 0% - execute-extended-command--shorter 195,259 0% - completion-try-completion 187,931 0% - completion--nth-completion 186,883 0% - completion--some 186,883 0% - #<compiled 0x81c0cf17cf07668> 185,827 0% - completion-pcm-try-completion 184,779 0% - completion-pcm--merge-try 148,675 0% - completion-pcm--merge-completions 23,355 0% string-match 2,099 0% completion-pcm--pattern->regex 2,096 0% completion-pcm--pattern->string 1,048 0% - completion-pcm--find-all-completions 35,048 0% - completion-pcm--all-completions 20,568 0% completion-pcm--pattern->regex 1,048 0% completion-pcm--optimize-pattern 1,056 0% completion-pcm--string->pattern 1,024 0% - execute-extended-command--shorter-1 7,328 0% - execute-extended-command--shorter-1 5,232 0% - execute-extended-command--shorter-1 2,096 0% - execute-extended-command--shorter-1 2,096 0% mapcar 1,048 0% - execute-extended-command--shorter-1 1,048 0% - execute-extended-command--shorter-1 1,048 0% mapcar 1,048 0% mapcar 1,048 0% commandp 5,863 0% #<compiled -0x1910b770d84f49d5> 42 0% - handle-focus-in 2,112 0% - #<compiled 0x189e2a0a0dde442> 2,112 0% - apply 2,112 0% - blink-cursor--rescan-frames 2,112 0% - blink-cursor-check 2,112 0% - blink-cursor--should-blink 2,112 0% frame-focus-state 2,112 0% - digit-argument 1,064 0% - universal-argument--mode 1,064 0% set-transient-map 1,064 0% - byte-code 667,721 3% - read-extended-command 667,721 3% - completing-read 667,721 3% - completing-read-default 667,721 3% - read-from-minibuffer 663,459 3% - redisplay_internal (C function) 208,291 1% - tool-bar-make-keymap 206,571 1% - tool-bar-make-keymap-1 206,571 1% - mapcar 206,571 1% - #<compiled -0xe8295ef54b23da6> 206,571 1% - eval 1,048 0% - find-image 1,048 0% image-search-load-path 1,048 0% - find-image 1,048 0% image-search-load-path 1,048 0% - menu-bar-update-buffers 672 0% menu-bar-update-buffers-1 672 0% - command-execute 1,320 0% - call-interactively 1,320 0% - funcall-interactively 1,080 0% - self-insert-command 1,080 0% #<compiled 0x23be74412ab8ae> 1,048 0% - undo-auto--undoable-change 32 0% - undo-auto--boundary-ensure-timer 32 0% - run-at-time 32 0% - timer-set-time 32 0% timer--time-setter 32 0% + redisplay_internal (C function) 33,424 0% + internal-echo-keystrokes-prefix 15,490 0% + timer-event-handler 2,662 0% ... 0 0% ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-14 16:03 ` Jean Louis @ 2020-11-14 16:24 ` Eli Zaretskii 2020-11-14 16:50 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Eli Zaretskii @ 2020-11-14 16:24 UTC (permalink / raw) To: Jean Louis; +Cc: rt, 44610 > Date: Sat, 14 Nov 2020 19:03:11 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: Robert Thorpe <rt@robertthorpeconsulting.com>, > 44610@debbugs.gnu.org > > I am not the initial reporter. I have tested it in python-mode in > plain emacs -Q with the latest development version: > > - command-execute 20,601,881 99% > - call-interactively 20,601,881 99% > - funcall-interactively 19,934,160 96% > - kmacro-end-or-call-macro 15,337,767 74% > - kmacro-call-macro 15,337,767 74% > - call-last-kbd-macro 15,242,727 73% > - command-execute 15,102,838 73% > - call-interactively 15,021,006 72% > - funcall-interactively 14,985,294 72% > - next-line 13,970,433 67% > - line-move 13,968,321 67% > - line-move-visual 12,842,225 62% > - vertical-motion 9,925,619 48% > - jit-lock-function 9,925,619 48% > - jit-lock-fontify-now 9,925,619 48% > - jit-lock--run-functions 7,165,300 34% > - run-hook-wrapped 7,157,012 34% > - #<compiled 0x5b100c193163db5> 7,157,012 34% > - font-lock-fontify-region 7,157,012 34% > - font-lock-default-fontify-region 7,153,844 34% > - font-lock-fontify-keywords-region 5,169,903 25% Thanks, this seems to indicate that the mode's fontifications take the lion's share of the time. Which explains why Fundamental mode doesn't suffer from this problem. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-14 16:03 ` Jean Louis 2020-11-14 16:24 ` Eli Zaretskii @ 2020-11-14 16:50 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Eli Zaretskii @ 2020-11-14 16:50 UTC (permalink / raw) To: Jean Louis; +Cc: rt, 44610 > Date: Sat, 14 Nov 2020 19:03:11 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: Robert Thorpe <rt@robertthorpeconsulting.com>, > 44610@debbugs.gnu.org > > I am not the initial reporter. I have tested it in python-mode in > plain emacs -Q with the latest development version: > > - command-execute 20,601,881 99% > - call-interactively 20,601,881 99% Btw, did you activate the cpu profiler or the memory profiler? It looks like it was the latter, in which case the percents might be skewed, as the frequency of probing the program counter is not constant. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-14 14:26 ` Eli Zaretskii 2020-11-14 16:03 ` Jean Louis @ 2020-11-15 23:44 ` Robert Thorpe 2020-11-16 16:23 ` Eli Zaretskii 1 sibling, 1 reply; 10+ messages in thread From: Robert Thorpe @ 2020-11-15 23:44 UTC (permalink / raw) To: Eli Zaretskii, Jean Louis; +Cc: 44610 Eli Zaretskii <eliz@gnu.org> writes: >> From: Robert Thorpe <rt@robertthorpeconsulting.com> >> Date: Fri, 13 Nov 2020 02:51:12 +0000 >> >> >> This bug report comes from a discussion on Emacs reddit. >> >> Start with a blank buffer and create about ~300 lines of the string: >> >> ffffffffffffffffffff (pppppppppppppppppppp); >> >> This will be turned into: >> >> 'ffffffffffffffffffff': >> >> That can be done using the following keyboard macro: M-m ' M-f ' : C-k >> C-n >> >> You can apply that to every line in the buffer using C-u 300 f4. >> >> Now here's the strange bit. In a fundamental-mode buffer this is >> extremely fast, nearly instantaneous. But, in a python-mode buffer it >> takes 20 to 30 seconds. If the mode is c-mode then it is also much >> slower than fundamental-mode. It will also exceed the variable binding >> depth in some cases. Oddly it is faster if you use forward-line instead >> of C-n. > > I suggest to produce and present a profile of this. Invoke this macro > after "M-x profiler-start RET RET", then "M-x profiler-report RET", > expand the profile fully by "C-u RET" on the top line, and post the > result here. That should give some clues. Here is the report. I did it in Python-mode using Emacs -Q on Emacs 27.1. My machine is a Dell 14-3480. The profile I've got seems to be a bit different to the one Jean Louis got. It is a little faster using Emacs -Q than my own init, but it's still fairly slow. I notice that in my report the GC is taking about 39% of runtime. I'm not sure why it's taking longer than in Jen Louis' report. It's faster if I use forward-line rather than pressing C-n. Also the report looks very different. I've added that at the end. The first report is the one using C-n. - command-execute 3499 60% - call-interactively 3499 60% - funcall-interactively 3480 59% - kmacro-end-or-call-macro 3474 59% - kmacro-call-macro 3474 59% - call-last-kbd-macro 3464 59% - command-execute 3419 58% - call-interactively 3417 58% - funcall-interactively 3417 58% - next-line 3345 57% - line-move 3345 57% - line-move-visual 3339 57% - vertical-motion 3132 53% - jit-lock-function 3132 53% - jit-lock-fontify-now 3131 53% - jit-lock--run-functions 3112 53% - run-hook-wrapped 3112 53% - #<compiled 0x15629e8957cd> 3111 53% - font-lock-fontify-region 3111 53% - font-lock-default-fontify-region 3111 53% - font-lock-fontify-syntactically-region 3082 53% - python-font-lock-syntactic-face-function 3063 52% - python-info-docstring-p 3055 52% - python-nav-backward-sexp 3016 51% - python-nav-forward-sexp 3007 51% - python-nav--forward-sexp 2968 51% - python-info-beginning-of-block-p 2005 34% - python-info-beginning-of-statement-p 1670 28% - python-nav-beginning-of-statement 1644 28% - syntax-ppss 1392 23% #<compiled 0x15629eb1977d> 1 0% - python-info-line-ends-backslash-p 138 2% - syntax-ppss 103 1% #<compiled 0x15629ea9bac1> 1 0% back-to-indentation 56 0% - python-info-statement-starts-block-p 314 5% - python-nav-beginning-of-statement 277 4% - python-info-line-ends-backslash-p 112 1% syntax-ppss 76 1% - syntax-ppss 82 1% #<compiled 0x15629ea55d29> 3 0% back-to-indentation 33 0% - python-info-end-of-block-p 385 6% - python-info-end-of-statement-p 370 6% - python-nav-end-of-statement 359 6% - syntax-ppss 185 3% #<compiled 0x15629eb2ece5> 2 0% - python-info-line-ends-backslash-p 104 1% - syntax-ppss 87 1% #<compiled 0x15629ea943f5> 2 0% - python-info-beginning-of-statement-p 274 4% - python-nav-beginning-of-statement 252 4% - python-info-line-ends-backslash-p 105 1% - syntax-ppss 76 1% #<compiled 0x15629eb1e6a1> 1 0% syntax-ppss 72 1% back-to-indentation 44 0% - python-nav-beginning-of-statement 107 1% - syntax-ppss 37 0% #<compiled 0x15629eb2a9b5> 1 0% - python-info-line-ends-backslash-p 29 0% syntax-ppss 20 0% back-to-indentation 21 0% - python-nav--lisp-forward-sexp 63 1% forward-sexp 58 0% - python-info-current-line-empty-p 45 0% match-string-no-properties 6 0% - python-syntax-context-type 39 0% syntax-ppss 28 0% - python-info-statement-ends-block-p 2 0% - python-nav-end-of-block 1 0% - python-nav-beginning-of-block 1 0% python-info-current-line-empty-p 1 0% - python-nav-end-of-statement 1 0% syntax-ppss 1 0% syntax-after 2 0% syntax-class 1 0% - python-nav-beginning-of-statement 2 0% syntax-ppss 2 0% - python-info-assignment-statement-p 1 0% - python-nav-beginning-of-statement 1 0% python-info-line-ends-backslash-p 1 0% syntax-ppss 18 0% - font-lock-fontify-keywords-region 27 0% #<compiled 0x15629e89743d> 11 0% #<compiled 0x15629e897459> 7 0% - run-with-timer 16 0% - apply 16 0% - run-at-time 15 0% - timer-activate 13 0% - timer--activate 12 0% timer--time-less-p 12 0% timer-relative-time 1 0% - posn-at-point 50 0% - jit-lock-function 40 0% - jit-lock-fontify-now 39 0% - jit-lock--run-functions 38 0% - run-hook-wrapped 38 0% - #<compiled 0x15629eb1cfd5> 38 0% - font-lock-fontify-region 38 0% - font-lock-default-fontify-region 36 0% - font-lock-fontify-syntactically-region 33 0% - python-font-lock-syntactic-face-function 33 0% - python-info-docstring-p 32 0% - python-nav-backward-sexp 26 0% - python-nav-forward-sexp 26 0% - python-nav--forward-sexp 25 0% - python-syntax-context-type 7 0% syntax-ppss 7 0% - python-info-beginning-of-block-p 6 0% python-info-statement-starts-block-p 4 0% python-info-beginning-of-statement-p 1 0% - python-nav-beginning-of-statement 4 0% syntax-ppss 3 0% python-info-line-ends-backslash-p 1 0% - python-info-beginning-of-statement-p 2 0% python-nav-beginning-of-statement 1 0% - python-nav--lisp-forward-sexp 2 0% forward-sexp 2 0% - python-info-end-of-block-p 1 0% python-info-end-of-statement-p 1 0% python-info-current-line-empty-p 1 0% python-nav-beginning-of-statement 2 0% - python-info-assignment-statement-p 1 0% - python-nav-beginning-of-statement 1 0% - python-info-line-ends-backslash-p 1 0% syntax-ppss 1 0% - font-lock-fontify-keywords-region 3 0% #<compiled 0x15629e89743d> 2 0% - eval 6 0% if 2 0% mode-line-eol-desc 2 0% file-remote-p 4 0% - window-inside-pixel-edges 1 0% window-edges 1 0% - self-insert-command 51 0% - python-indent-post-self-insert-function 48 0% - syntax-ppss 48 0% - syntax-propertize 6 0% #<compiled 0x15629e89748d> 3 0% syntax-ppss-flush-cache 1 0% electric-indent-post-self-insert-function 1 0% - jit-lock-after-change 1 0% run-hook-with-args 1 0% - kill-line 14 0% - kill-region 14 0% - kill-new 14 0% - gui-select-text 12 0% - gui-set-selection 12 0% - gui-backend-set-selection 12 0% - apply 11 0% #<compiled 0x1fd8bb00bf7f> 11 0% menu-bar-update-yank-menu 1 0% - jit-lock--antiblink-post-command 35 0% - syntax-ppss 29 0% - syntax-propertize 5 0% #<compiled 0x15629e89748d> 1 0% - run-with-idle-timer 2 0% - timer-set-idle-time 2 0% timer--time-setter 2 0% cancel-timer 1 0% - undo-auto--add-boundary 3 0% undo-auto--boundaries 1 0% - execute-extended-command 6 0% - sit-for 5 0% redisplay 3 0% - command-execute 1 0% - call-interactively 1 0% - funcall-interactively 1 0% profiler-report 1 0% - byte-code 19 0% - read-extended-command 19 0% - completing-read 19 0% - completing-read-default 19 0% - read-from-minibuffer 10 0% - redisplay_internal (C function) 1 0% - tool-bar-make-keymap 1 0% - tool-bar-make-keymap-1 1 0% - mapcar 1 0% - #<compiled 0x1fd8bb03930b> 1 0% - eval 1 0% - find-image 1 0% image-search-load-path 1 0% + ... 2303 39% + redisplay_internal (C function) 1 0% The following report is from using M-x forward-line instead of C-n: - redisplay_internal (C function) 1237 38% - jit-lock-function 1212 37% - jit-lock-fontify-now 1212 37% - jit-lock--run-functions 1212 37% - run-hook-wrapped 1212 37% - #<compiled 0x15629ead2fe5> 1212 37% - font-lock-fontify-region 1212 37% - font-lock-default-fontify-region 1212 37% - font-lock-fontify-syntactically-region 1196 37% - python-font-lock-syntactic-face-function 1191 37% - python-info-docstring-p 1189 36% - python-nav-backward-sexp 1172 36% - python-nav-forward-sexp 1168 36% - python-nav--forward-sexp 1154 35% - python-info-beginning-of-block-p 767 23% - python-info-beginning-of-statement-p 666 20% - python-nav-beginning-of-statement 656 20% syntax-ppss 589 18% - python-info-line-ends-backslash-p 44 1% syntax-ppss 30 0% back-to-indentation 11 0% - python-info-statement-starts-block-p 97 3% - python-nav-beginning-of-statement 84 2% - python-info-line-ends-backslash-p 34 1% syntax-ppss 22 0% syntax-ppss 25 0% back-to-indentation 11 0% - python-info-end-of-block-p 162 5% - python-info-end-of-statement-p 158 4% - python-nav-end-of-statement 154 4% syntax-ppss 80 2% - python-info-line-ends-backslash-p 53 1% syntax-ppss 46 1% - python-info-beginning-of-statement-p 108 3% - python-nav-beginning-of-statement 101 3% - python-info-line-ends-backslash-p 43 1% syntax-ppss 34 1% syntax-ppss 27 0% back-to-indentation 17 0% - python-nav-beginning-of-statement 47 1% - python-info-line-ends-backslash-p 20 0% syntax-ppss 13 0% syntax-ppss 17 0% back-to-indentation 4 0% - python-syntax-context-type 20 0% syntax-ppss 18 0% - python-nav--lisp-forward-sexp 16 0% forward-sexp 15 0% - python-info-current-line-empty-p 15 0% match-string-no-properties 2 0% - python-info-statement-ends-block-p 1 0% python-nav-end-of-statement 1 0% syntax-class 1 0% syntax-after 1 0% - python-nav-beginning-of-statement 5 0% syntax-ppss 3 0% - python-info-line-ends-backslash-p 2 0% syntax-ppss 2 0% - python-info-assignment-statement-p 1 0% - python-nav-beginning-of-statement 1 0% syntax-ppss 1 0% syntax-ppss 3 0% - replace-regexp-in-string 1 0% apply 1 0% - font-lock-fontify-keywords-region 15 0% #<compiled 0x15629e89743d> 9 0% #<compiled 0x15629e897459> 5 0% - eval 9 0% if 7 0% - unless 1 0% - if 1 0% - display-graphic-p 1 0% framep-on-display 1 0% - tool-bar-make-keymap 5 0% - tool-bar-make-keymap-1 5 0% - mapcar 5 0% - #<compiled 0x1fd8bb03930b> 5 0% - eval 4 0% - find-image 4 0% image-search-load-path 3 0% - #<compiled 0x1fd8bb05b46f> 3 0% - apply 3 0% - redisplay--pre-redisplay-functions 3 0% - run-hook-with-args 2 0% - redisplay--update-region-highlight 1 0% #<compiled 0x1fd8baff3977> 1 0% - mode-line-default-help-echo 3 0% - window-at-side-p 2 0% - window-pixel-edges 2 0% window-edges 1 0% file-remote-p 3 0% x-gtk-map-stock 1 0% - command-execute 988 30% - call-interactively 986 30% - funcall-interactively 889 27% - kmacro-end-or-call-macro 617 19% - kmacro-call-macro 617 19% - call-last-kbd-macro 592 18% - command-execute 540 16% - call-interactively 531 16% - byte-code 412 12% - read-extended-command 412 12% - completing-read 410 12% - completing-read-default 409 12% - read-from-minibuffer 48 1% - command-execute 23 0% - call-interactively 15 0% - funcall-interactively 15 0% - self-insert-command 7 0% #<compiled 0x1fd8baffa1bd> 3 0% - minibuffer-complete-and-exit 4 0% - completion-complete-and-exit 4 0% - completion--complete-and-exit 2 0% - test-completion 2 0% - #<compiled 0x1fd8baff9e61> 2 0% - complete-with-action 2 0% test-completion 2 0% - minibuffer-inactive-mode 11 0% - run-mode-hooks 7 0% - run-hooks 7 0% - global-font-lock-mode-enable-in-buffers 7 0% - turn-on-font-lock-if-desired 7 0% - turn-on-font-lock 7 0% - font-lock-mode 7 0% font-lock-default-function 3 0% called-interactively-p 2 0% - kill-all-local-variables 2 0% global-eldoc-mode-cmhh 1 0% - window--sanitize-window-sizes 3 0% - walk-window-tree 2 0% - walk-window-tree-1 2 0% - #<compiled 0x15629e90c20d> 2 0% - window-min-size 2 0% - window--min-size-1 1 0% window-size-fixed-p 1 0% - frame-windows-min-size 2 0% - window-min-size 2 0% - window--min-size-1 1 0% - window-size-fixed-p 1 0% window--size-fixed-1 1 0% clear-minibuffer-message 1 0% #<compiled 0x15629ea97fd1> 1 0% add-hook 1 0% - funcall-interactively 116 3% - self-insert-command 47 1% - python-indent-post-self-insert-function 39 1% - syntax-ppss 39 1% - syntax-propertize 4 0% #<compiled 0x15629e89748d> 2 0% - electric-indent-post-self-insert-function 4 0% - syntax-ppss 4 0% syntax-propertize 1 0% - jit-lock-after-change 2 0% run-hook-with-args 1 0% - execute-extended-command 42 1% - sit-for 41 1% - redisplay 2 0% - redisplay_internal (C function) 2 0% - jit-lock-function 2 0% - jit-lock-fontify-now 2 0% - jit-lock--run-functions 2 0% - run-hook-wrapped 2 0% - #<compiled 0x15629e917a4d> 2 0% - font-lock-fontify-region 2 0% - font-lock-default-fontify-region 2 0% - font-lock-fontify-keywords-region 2 0% #<compiled 0x15629e89743d> 2 0% input-pending-p 2 0% - kill-line 20 0% - kill-region 18 0% - kill-new 13 0% - gui-select-text 10 0% - gui-set-selection 10 0% - gui-backend-set-selection 10 0% - apply 10 0% #<compiled 0x1fd8bb00bf7f> 10 0% menu-bar-update-yank-menu 2 0% - filter-buffer-substring 3 0% - buffer-substring--filter 3 0% - #<compiled 0x15629ea7fcf5> 3 0% - apply 3 0% - #<compiled 0x1fd8bafd224d> 3 0% delete-and-extract-region 1 0% back-to-indentation 1 0% - jit-lock--antiblink-post-command 42 1% syntax-ppss 36 1% - run-with-idle-timer 1 0% - timer-activate-when-idle 1 0% - timer--activate 1 0% timer--time-less-p 1 0% global-font-lock-mode-check-buffers 2 0% undo-auto--add-boundary 1 0% - execute-extended-command 224 6% - execute-extended-command--shorter 194 6% - completion-try-completion 194 6% - completion--nth-completion 194 6% - completion--some 194 6% - #<compiled 0x15629eb8865d> 194 6% - completion-pcm-try-completion 127 3% - completion-pcm--find-all-completions 124 3% completion-pcm--all-completions 123 3% - completion-pcm--merge-try 2 0% completion-pcm--merge-completions 1 0% completion-basic-try-completion 67 2% - sit-for 17 0% redisplay 14 0% - command-execute 10 0% - call-interactively 10 0% - byte-code 5 0% - completing-read 5 0% - completing-read-default 5 0% read-from-minibuffer 1 0% - funcall-interactively 4 0% - profiler-report 3 0% - profiler-report-cpu 3 0% - profiler-report-profile-other-window 3 0% - profiler-report-setup-buffer 2 0% - profiler-report-render-calltree 2 0% - profiler-report-rerender-calltree 2 0% - profiler-report-render-calltree-1 2 0% - profiler-calltree-build 2 0% - profiler-calltree-build-unified 2 0% - maphash 2 0% #<compiled 0x15629e778d71> 1 0% - switch-to-buffer-other-window 1 0% - pop-to-buffer 1 0% - display-buffer 1 0% - display-buffer--maybe-pop-up-frame-or-window 1 0% - display-buffer--maybe-pop-up-window 1 0% - display-buffer-pop-up-window 1 0% window--maybe-raise-frame 1 0% - python-mode 1 0% python-indent-guess-indent-offset 1 0% #<compiled 0x15629eacb3e5> 1 0% - yank 26 0% - push-mark 17 0% mark 1 0% insert-for-yank 5 0% - current-kill 3 0% - gui-selection-value 3 0% - gui--selection-value-internal 3 0% gui-get-selection 3 0% - previous-line 9 0% - line-move 9 0% line-move-visual 7 0% - profiler-report-toggle-entry 5 0% - profiler-report-expand-entry 5 0% - profiler-report-expand-entry 5 0% - profiler-report-insert-calltree-children 5 0% - mapc 5 0% - profiler-report-insert-calltree 1 0% - profiler-report-line-format 1 0% - profiler-format 1 0% - apply 1 0% - profiler-format 1 0% apply 1 0% end-of-buffer 2 0% - yank-pop 2 0% insert-for-yank 1 0% - kill-line 2 0% - kill-region 2 0% - kill-new 1 0% - gui-select-text 1 0% - gui-set-selection 1 0% - gui-backend-set-selection 1 0% - apply 1 0% #<compiled 0x1fd8bb00bf7f> 1 0% - filter-buffer-substring 1 0% - buffer-substring--filter 1 0% - #<compiled 0x15629e83a3c1> 1 0% - apply 1 0% - #<compiled 0x1fd8bafd224d> 1 0% - delete-and-extract-region 1 0% jit-lock-after-change 1 0% - handle-focus-in 1 0% - #<compiled 0x15629e827df9> 1 0% - apply 1 0% - blink-cursor--rescan-frames 1 0% - blink-cursor-check 1 0% - blink-cursor--start-idle-timer 1 0% - run-with-idle-timer 1 0% - timer-set-idle-time 1 0% timer--time-setter 1 0% - kmacro-start-macro-or-insert-counter 1 0% kmacro-start-macro 1 0% - byte-code 90 2% - read-extended-command 80 2% - completing-read 80 2% - completing-read-default 80 2% - read-from-minibuffer 46 1% - undo-auto--add-boundary 2 0% - undo-auto--boundaries 2 0% undo-auto--ensure-boundary 2 0% - redisplay_internal (C function) 2 0% - tool-bar-make-keymap 1 0% - tool-bar-make-keymap-1 1 0% - mapcar 1 0% - #<compiled 0x1fd8bb03930b> 1 0% - eval 1 0% - find-image 1 0% - cond 1 0% not 1 0% - eval 1 0% if 1 0% - command-execute 1 0% - call-interactively 1 0% - funcall-interactively 1 0% - self-insert-command 1 0% electric-indent-post-self-insert-function 1 0% - read-buffer-to-switch 10 0% - read-buffer 10 0% - completing-read-default 10 0% - read-from-minibuffer 6 0% - redisplay_internal (C function) 1 0% x-gtk-map-stock 1 0% - completing-read-default 7 0% read-from-minibuffer 3 0% + ... 974 30% + timer-event-handler 6 0% + gui-set-selection 3 0% + deactivate-mark 2 0% + xselect-convert-to-string 1 0% + #<compiled 0x1fd8bb09a70d> 1 0% clear-minibuffer-message 1 0% + undo-auto--add-boundary 1 0% internal-timer-start-idle 1 0% internal-echo-keystrokes-prefix 1 0% BR, Robert Thorpe ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-15 23:44 ` Robert Thorpe @ 2020-11-16 16:23 ` Eli Zaretskii 2020-11-16 17:50 ` Jean Louis 0 siblings, 1 reply; 10+ messages in thread From: Eli Zaretskii @ 2020-11-16 16:23 UTC (permalink / raw) To: Robert Thorpe; +Cc: bugs, 44610 > From: Robert Thorpe <rt@robertthorpeconsulting.com> > Cc: 44610@debbugs.gnu.org > Date: Sun, 15 Nov 2020 23:44:32 +0000 > > > I suggest to produce and present a profile of this. Invoke this macro > > after "M-x profiler-start RET RET", then "M-x profiler-report RET", > > expand the profile fully by "C-u RET" on the top line, and post the > > result here. That should give some clues. > > Here is the report. I did it in Python-mode using Emacs -Q on Emacs > 27.1. My machine is a Dell 14-3480. The profile I've got seems to be a > bit different to the one Jean Louis got. > > It is a little faster using Emacs -Q than my own init, but it's > still fairly slow. > > I notice that in my report the GC is taking about 39% of runtime. I'm > not sure why it's taking longer than in Jen Louis' report. > > It's faster if I use forward-line rather than pressing C-n. Also the > report looks very different. I've added that at the end. The first > report is the one using C-n. Thanks. I think the conclusion is quite clear: > - command-execute 3499 60% > - call-interactively 3499 60% > - funcall-interactively 3480 59% > - kmacro-end-or-call-macro 3474 59% > - kmacro-call-macro 3474 59% > - call-last-kbd-macro 3464 59% > - command-execute 3419 58% > - call-interactively 3417 58% > - funcall-interactively 3417 58% > - next-line 3345 57% > - line-move 3345 57% > - line-move-visual 3339 57% > - vertical-motion 3132 53% > - jit-lock-function 3132 53% > - jit-lock-fontify-now 3131 53% > - jit-lock--run-functions 3112 53% > - run-hook-wrapped 3112 53% > - #<compiled 0x15629e8957cd> 3111 53% > - font-lock-fontify-region 3111 53% > - font-lock-default-fontify-region 3111 53% > - font-lock-fontify-syntactically-region 3082 53% > - python-font-lock-syntactic-face-function 3063 52% > - python-info-docstring-p 3055 52% > - python-nav-backward-sexp 3016 51% > - python-nav-forward-sexp 3007 51% > - python-nav--forward-sexp 2968 51% > - python-info-beginning-of-block-p 2005 34% > - python-info-beginning-of-statement-p 1670 28% > - python-nav-beginning-of-statement 1644 28% > - syntax-ppss 1392 23% > #<compiled 0x15629eb1977d> 1 0% The culprit is indeed fontifications, and specifically the code in python-nav--forward-sexp and its subroutines. So this is where optimizations or simplifications will yield the greatest speedup. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-16 16:23 ` Eli Zaretskii @ 2020-11-16 17:50 ` Jean Louis 2020-11-18 5:22 ` Robert Thorpe 0 siblings, 1 reply; 10+ messages in thread From: Jean Louis @ 2020-11-16 17:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Robert Thorpe, 44610 * Eli Zaretskii <eliz@gnu.org> [2020-11-16 19:23]: > > From: Robert Thorpe <rt@robertthorpeconsulting.com> > > Cc: 44610@debbugs.gnu.org > > Date: Sun, 15 Nov 2020 23:44:32 +0000 > > > > > I suggest to produce and present a profile of this. Invoke this macro > > > after "M-x profiler-start RET RET", then "M-x profiler-report RET", > > > expand the profile fully by "C-u RET" on the top line, and post the > > > result here. That should give some clues. > > > > Here is the report. I did it in Python-mode using Emacs -Q on Emacs > > 27.1. My machine is a Dell 14-3480. The profile I've got seems to be a > > bit different to the one Jean Louis got. I was in empty buffer with python-mode. Maybe you had some python code already inside? I did not have. ^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#44610: 27.1; Keyboard Macro Performance Problem 2020-11-16 17:50 ` Jean Louis @ 2020-11-18 5:22 ` Robert Thorpe 0 siblings, 0 replies; 10+ messages in thread From: Robert Thorpe @ 2020-11-18 5:22 UTC (permalink / raw) To: Jean Louis; +Cc: 44610 Jean Louis <bugs@gnu.support> writes: > * Eli Zaretskii <eliz@gnu.org> [2020-11-16 19:23]: >> > From: Robert Thorpe <rt@robertthorpeconsulting.com> >> > Cc: 44610@debbugs.gnu.org >> > Date: Sun, 15 Nov 2020 23:44:32 +0000 >> > >> > > I suggest to produce and present a profile of this. Invoke this macro >> > > after "M-x profiler-start RET RET", then "M-x profiler-report RET", >> > > expand the profile fully by "C-u RET" on the top line, and post the >> > > result here. That should give some clues. >> > >> > Here is the report. I did it in Python-mode using Emacs -Q on Emacs >> > 27.1. My machine is a Dell 14-3480. The profile I've got seems to be a >> > bit different to the one Jean Louis got. > > I was in empty buffer with python-mode. Maybe you had some python code > already inside? I did not have. In my buffer I did what I described in the bug report. I had the string: ffffffffffffffffffff (pppppppppppppppppppp); Copied 300 times. That way the macro could operate on it. BR, Robert Thorpe ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-11-18 5:22 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-11-13 2:51 bug#44610: 27.1; Keyboard Macro Performance Problem Robert Thorpe 2020-11-13 8:55 ` Jean Louis 2020-11-14 14:26 ` Eli Zaretskii 2020-11-14 16:03 ` Jean Louis 2020-11-14 16:24 ` Eli Zaretskii 2020-11-14 16:50 ` Eli Zaretskii 2020-11-15 23:44 ` Robert Thorpe 2020-11-16 16:23 ` Eli Zaretskii 2020-11-16 17:50 ` Jean Louis 2020-11-18 5:22 ` Robert Thorpe
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).