Package: emacs;
Reported by: Lars Ingebrigtsen <larsi <at> gnus.org>
Date: Fri, 28 Jan 2022 15:04:02 UTC
Severity: normal
Tags: confirmed
Found in version 29.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 53606 in the body.
You can then email your comments to 53606 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Fri, 28 Jan 2022 15:04:02 GMT) Full text and rfc822 format available.Lars Ingebrigtsen <larsi <at> gnus.org>
:bug-gnu-emacs <at> gnu.org
.
(Fri, 28 Jan 2022 15:04:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: bug-gnu-emacs <at> gnu.org Subject: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Fri, 28 Jan 2022 16:03:47 +0100
`M-x customize-option RET bibtex-biblatex-entry-alist RET' takes a very long time -- more than 20 seconds on this laptop. It's a long alist, but it shouldn't take that long. In GNU Emacs 29.0.50 (build 9, x86_64-pc-linux-gnu, GTK+ Version 3.24.31, cairo version 1.16.0) of 2022-01-24 built on giant Repository revision: 77b72f77b3a5d13fc6e71746dee2cf68305057e2 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12014000 System Description: Debian GNU/Linux bookworm/sid -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
Stefan Kangas <stefan <at> marxist.se>
to control <at> debbugs.gnu.org
.
(Sun, 19 Jun 2022 19:21:01 GMT) Full text and rfc822 format available.bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sat, 09 Sep 2023 22:24:02 GMT) Full text and rfc822 format available.Message #10 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: 53606 <at> debbugs.gnu.org Cc: Lars Ingebrigtsen <larsi <at> gnus.org> Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sat, 9 Sep 2023 19:23:16 -0300
Lars Ingebrigtsen <larsi <at> gnus.org> writes: > `M-x customize-option RET bibtex-biblatex-entry-alist RET' > > takes a very long time -- more than 20 seconds on this laptop. It's a > long alist, but it shouldn't take that long. I don't have any concrete ideas on how to speed it up on the Widget library side. But looking at the defcustom for bibtex-biblatex-entry-alist I noted two things that can help to create the Customize buffer more quickly: 1) It uses a custom widget derived from the lazy widget, but doesn't provide a :tag. That makes it look awful and giving it a proper :tag reduced the buffer creation time somewhat in my testings. 2) More importantly, the bibtex-entry-alist widget looks like this: (define-widget 'bibtex-entry-alist 'lazy "Format of `bibtex-BibTeX-entry-alist' and friends." :type '(repeat (group (string :tag "Entry type") (string :tag "Documentation") (repeat :tag "Required fields" (group (string :tag "Field") (option (choice :tag "Comment" :value nil (const nil) string)) (option (choice :tag "Init" :value nil (const nil) string function)) (option (choice :tag "Alternative" :value nil (const nil) integer)))) (repeat :tag "Crossref fields" (group (string :tag "Field") (option (choice :tag "Comment" :value nil (const nil) string)) (option (choice :tag "Init" :value nil (const nil) string function)) (option (choice :tag "Alternative" :value nil (const nil) integer)))) (repeat :tag "Optional fields" (group (string :tag "Field") (option (choice :tag "Comment" :value nil (const nil) string)) (option (choice :tag "Init" :value nil (const nil) string function)) (option (choice :tag "Alternative" :value nil (const nil) integer))))))) Why combine option and choice? That's redundant, specially since the choice widget allows for the nil value. Removing the `option's and just leaving the `choice's should be equivalent in functionality, and in my testings reduced the creation time to the half. I ran customize-option 5 times and got: With `option': (172.526219636 69 6.120602505999997) Without `option': (86.260726994 42 3.5430049540000113) This is without native compilation. Based on the above results and since there's no lost in functionality, I propose to make the changes to the bibtex-entry-alist widget. It is a net gain in speed, and it might make the wait bearable.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sat, 09 Sep 2023 22:52:02 GMT) Full text and rfc822 format available.Message #13 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sat, 9 Sep 2023 19:51:23 -0300
On 9/9/23 19:23, Mauro Aranda wrote: > Based on the above results and since there's no lost in functionality, I > propose to make the changes to the bibtex-entry-alist widget. It is a > net gain in speed, and it might make the wait bearable. Hmm, spoke too soon :-(. Using option is not as redundant as I thought it was. Using `choice's alone would set all the values that are nil in the group like so: ("author" nil nil nil), while using it with `option' allows for setting it as: ("author") So that's something to consider.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 10 Sep 2023 05:03:02 GMT) Full text and rfc822 format available.Message #16 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Mauro Aranda <maurooaranda <at> gmail.com> Cc: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 10 Sep 2023 08:01:36 +0300
> Date: Sat, 9 Sep 2023 19:51:23 -0300 > From: Mauro Aranda <maurooaranda <at> gmail.com> > > On 9/9/23 19:23, Mauro Aranda wrote: > > Based on the above results and since there's no lost in functionality, I > > propose to make the changes to the bibtex-entry-alist widget. It is a > > net gain in speed, and it might make the wait bearable. > > Hmm, spoke too soon :-(. Using option is not as redundant as I > thought it was. Using `choice's alone would set all the values that > are nil in the group like so: ("author" nil nil nil), while using it > with `option' allows for setting it as: ("author") > > So that's something to consider. Thanks for looking into this issue. Could you please profile this slow operation and post the completely unfolded profile? I think we should try to understand what exactly takes so much time in this case.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 10 Sep 2023 09:50:02 GMT) Full text and rfc822 format available.Message #19 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 10 Sep 2023 06:49:29 -0300
[Message part 1 (text/plain, inline)]
On 10/9/23 02:01, Eli Zaretskii wrote: >> Date: Sat, 9 Sep 2023 19:51:23 -0300 >> From: Mauro Aranda <maurooaranda <at> gmail.com> >> >> On 9/9/23 19:23, Mauro Aranda wrote: >> > Based on the above results and since there's no lost in functionality, I >> > propose to make the changes to the bibtex-entry-alist widget. It is a >> > net gain in speed, and it might make the wait bearable. >> >> Hmm, spoke too soon :-(. Using option is not as redundant as I >> thought it was. Using `choice's alone would set all the values that >> are nil in the group like so: ("author" nil nil nil), while using it >> with `option' allows for setting it as: ("author") >> >> So that's something to consider. > > Thanks for looking into this issue. > > Could you please profile this slow operation and post the completely > unfolded profile? I think we should try to understand what exactly > takes so much time in this case. Here it is. I also attach the result of C-x C-w in the report buffer, just in case. 25262 97% - call-interactively 25262 97% - funcall-interactively 25262 97% - eval-last-sexp 25262 97% - elisp--eval-last-sexp 25262 97% - eval 25262 97% - progn 25262 97% - progn 25258 97% - customize-option 25246 97% - custom-buffer-create 25246 97% - custom-buffer-create-internal 24870 96% - mapcar 24854 95% - #<compiled -0x17c1d5ffa7b0b3ca> 24854 95% - widget-create 24854 95% - widget-apply 24854 95% - widget-default-create 24854 95% - widget-apply 24854 95% - custom-variable-value-create 24842 95% - widget-create-child-and-convert 24842 95% - widget-apply 24842 95% - widget-default-create 24838 95% - widget-apply 24834 95% - widget-type-value-create 24834 95% - widget-create-child-value 24834 95% - widget-apply 24834 95% - widget-default-create 24834 95% - widget-apply 24834 95% - widget-editable-list-value-create 24834 95% - widget-editable-list-entry-create 24690 95% - widget-create-child-value 24690 95% - widget-apply 24690 95% - widget-default-create 24682 95% - widget-apply 24682 95% - widget-group-value-create 24670 95% - widget-create-child-value 24670 95% - widget-apply 24670 95% - widget-default-create 24334 93% - widget-apply 15974 61% - widget-checklist-value-create 15970 61% - widget-checklist-add-item 7107 27% - widget-create-child 7099 27% - widget-apply 7099 27% - widget-default-create 4187 16% delete-char 2120 8% - widget-apply 2120 8% - widget-choice-value-create 2112 8% - widget-create-child-value 2108 8% - widget-apply 2108 8% - widget-default-create 1428 5% delete-char 308 1% princ 4 0% re-search-forward 4 0% widget-put 4 0% - widget-inline-p 4 0% widget-get 12 0% - substitute-command-keys 4 0% - generate-new-buffer 4 0% get-buffer-create 4 0% make-closure 12 0% - widget-specify-button 12 0% - widget-apply 8 0% - widget-default-button-face-get 4 0% widget-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% - widget-apply 4 0% - widget-default-button-face-get 4 0% widget-get 8 0% re-search-forward 4 0% undo-auto--undoable-change 4 0% widget-get 4 0% widget-put 4 0% widget-get-indirect 4 0% - widget-copy 4 0% - widget-apply 4 0% - widget-types-copy 4 0% - mapcar 4 0% - widget-copy 4 0% widget-apply 4027 15% - apply 4027 15% - widget-create-child-and-convert 4007 15% - widget-apply 4007 15% - widget-default-create 2712 10% delete-char 743 2% - widget-apply 739 2% - widget-toggle-value-create 492 1% - widget-image-insert 492 1% - insert-image 4 0% - add-text-properties 4 0% undo-auto--undoable-change 207 0% - widget-image-find 199 0% - find-image 152 0% - apply 152 0% - create-image 148 0% - image-type 148 0% - image-type-from-file-header 68 0% - insert-file-contents-literally 64 0% - insert-file-contents 4 0% - after-insert-file-set-coding 4 0% find-new-buffer-file-coding-system 60 0% file-readable-p 4 0% image-type-from-buffer 4 0% - #<compiled -0x1c8e7723716d5d9f> 4 0% kill-buffer 4 0% set-buffer-multibyte 4 0% image-compute-scaling-factor 43 0% - image-search-load-path 31 0% file-readable-p 8 0% expand-file-name 4 0% image--set-property 28 0% - substitute-command-keys 12 0% - #<compiled -0x1c8e7723a0f1519f> 12 0% - kill-buffer 8 0% - replace-buffer-in-windows 4 0% window-normalize-buffer 4 0% - unrecord-window-buffer 4 0% - assq-delete-all 4 0% assoc-delete-all 8 0% - generate-new-buffer 8 0% get-buffer-create 8 0% widget-get 4 0% - widget-value 4 0% widget-apply 24 0% - widget-specify-button 8 0% widget-get 4 0% make-overlay 4 0% overlay-put 4 0% functionp 20 0% re-search-forward 4 0% - widget-clear-undo 4 0% buffer-disable-undo 16 0% - apply 16 0% - widget-convert 12 0% - widget-value-convert-widget 12 0% widget-get 2492 9% - widget-create-child-value 2492 9% - widget-apply 2492 9% - widget-default-create 1300 5% delete-char 956 3% - widget-apply 956 3% - widget-choice-value-create 956 3% - widget-create-child-value 956 3% - widget-apply 948 3% - widget-default-create 628 2% delete-char 80 0% - widget-apply 80 0% widget-field-value-create 52 0% princ 8 0% re-search-forward 8 0% - #<compiled 0x66e1b40451af649> 8 0% - widget-sexp-value-to-internal 4 0% string-match 4 0% - pp-to-string 4 0% - #<compiled -0x1c8e7722b2c0b59f> 4 0% kill-buffer 16 0% - substitute-command-keys 8 0% - #<compiled -0x1c8e77397563719f> 8 0% - kill-buffer 8 0% - replace-buffer-in-windows 8 0% - unrecord-window-buffer 4 0% window-prev-buffers 4 0% - window-normalize-window 4 0% window-live-p 4 0% - generate-new-buffer 4 0% get-buffer-create 8 0% - widget-specify-button 4 0% widget-get 4 0% - widget-apply 4 0% - widget-default-mouse-face-get 4 0% widget-get 4 0% re-search-forward 4 0% - widget-clear-undo 4 0% buffer-disable-undo 1864 7% delete-char 8 0% re-search-forward 4 0% - widget-apply 4 0% - widget-default-deactivate 4 0% - widget-specify-inactive 4 0% make-overlay 4 0% widget--should-indent-p 4 0% widget-get 7848 30% - widget-editable-list-value-create 7828 30% - widget-editable-list-entry-create 4112 15% - widget-create-child-value 4088 15% - widget-apply 4088 15% - widget-default-create 3576 13% - widget-apply 3576 13% - widget-group-value-create 2864 11% - widget-create-child-value 2848 10% - widget-apply 2840 10% - widget-default-create 2084 8% delete-char 8 0% re-search-forward 8 0% - widget-copy 4 0% widget-apply 4 0% widget-get 4 0% widget-put 696 2% insert-char 8 0% - widget-match-inline 4 0% - widget-inline-p 4 0% widget-get 4 0% - widget-apply 4 0% - widget-checklist-match-inline 4 0% - widget-match-inline 4 0% - widget-inline-p 4 0% - widget-apply 4 0% widget-choice-inline-bubbles-p 4 0% widget--should-indent-p 348 1% delete-char 4 0% - undo-auto--undoable-change 4 0% undo-auto--boundary-ensure-timer 20 0% - widget-copy 20 0% - widget-apply 20 0% - widget-types-copy 20 0% - mapcar 20 0% - widget-copy 20 0% - widget-apply 12 0% - widget-types-copy 12 0% - mapcar 12 0% - widget-copy 12 0% - widget-apply 12 0% - widget-types-copy 12 0% - mapcar 12 0% - widget-copy 12 0% - widget-apply 8 0% - widget-types-copy 8 0% - mapcar 8 0% - widget-copy 8 0% widget-apply 4 0% widget-get 2472 9% - apply 2472 9% - widget-create-child-and-convert 2468 9% - widget-apply 2468 9% - widget-default-create 1784 6% delete-char 336 1% - widget-apply 336 1% - widget-push-button-value-create 8 0% - substitute-command-keys 4 0% buffer-string 12 0% - widget-specify-button 8 0% - widget-apply 8 0% - widget-default-mouse-face-get 8 0% - widget-apply 8 0% - widget-default-mouse-face-get 8 0% - widget-apply 4 0% - widget-default-mouse-face-get 4 0% - widget-apply 4 0% - widget-default-mouse-face-get 4 0% widget-get 4 0% widget-get 4 0% re-search-forward 4 0% widget-get 932 3% delete-char 152 0% insert-char 16 0% - widget-match-inline 16 0% - widget-apply 8 0% - widget-group-match 8 0% - widget-group-match-inline 4 0% - widget-match-inline 4 0% widget-apply 8 0% - widget-editable-list-match 8 0% - widget-editable-list-match-inline 8 0% - widget-match-inline 8 0% - widget-apply 8 0% - widget-group-match 8 0% - widget-group-match-inline 8 0% - widget-match-inline 8 0% - widget-apply 8 0% - widget-checklist-match-inline 4 0% - widget-match-inline 4 0% - widget-inline-p 4 0% - widget-apply 4 0% - widget-choice-inline-bubbles-p 4 0% widget-get 4 0% - widget-checklist-match-up 4 0% - widget-match-inline 4 0% - widget-apply 4 0% - widget-choice-match 4 0% - widget-apply 4 0% widget-restricted-sexp-match 388 1% widget-field-value-create 124 0% - widget-editable-list-format-handler 116 0% - apply 116 0% - widget-create-child-and-convert 116 0% - widget-apply 116 0% - widget-default-create 96 0% delete-char 20 0% - widget-apply 20 0% widget-push-button-value-create 8 0% insert-char 264 1% delete-char 4 0% - widget-specify-sample 4 0% widget-apply 4 0% - undo-auto--undoable-change 4 0% undo-auto--boundary-ensure-timer 4 0% - substitute-command-keys 4 0% - #<compiled -0x1c8e77201f7fa59f> 4 0% - kill-buffer 4 0% - replace-buffer-in-windows 4 0% - unrecord-window-buffer 4 0% window-prev-buffers 12 0% insert-char 4 0% delete-char 92 0% - apply 92 0% - widget-create-child-and-convert 92 0% - widget-apply 92 0% - widget-default-create 64 0% delete-char 16 0% - widget-apply 16 0% widget-push-button-value-create 40 0% delete-char 4 0% custom-magic-value-create 8 0% - widget-add-documentation-string-button 8 0% - apply 8 0% - widget-create-child-and-convert 8 0% - widget-apply 8 0% - widget-default-create 4 0% delete-char 4 0% - widget-apply 4 0% widget-documentation-string-value-create 4 0% - custom-add-parent-links 4 0% - mapatoms 4 0% - #<compiled 0x2608cc6bf83bc8> 4 0% - widget-create-child-and-convert 4 0% - widget-apply 4 0% - widget-default-create 4 0% delete-char 16 0% - #<compiled -0xf2f5b00c7bd4f2d> 16 0% - widget-apply 16 0% - widget-default-value-inline 16 0% - widget-value 16 0% - widget-apply 16 0% - widget-editable-list-value-get 16 0% - mapcar 16 0% - #<compiled -0xf2f5b00c7bd4f2d> 16 0% - widget-apply 16 0% - widget-default-value-inline 16 0% - widget-value 16 0% - widget-apply 8 0% - widget-editable-list-value-get 8 0% - mapcar 8 0% - #<compiled -0xf2f5b00c7bd4f2d> 8 0% - widget-apply 8 0% - widget-default-value-inline 8 0% - widget-value 8 0% - widget-apply 8 0% - widget-editable-list-value-get 8 0% - mapcar 4 0% - #<compiled -0xf2f5b00c7bd4f2d> 4 0% - widget-apply 4 0% - widget-default-value-inline 4 0% widget-get 8 0% - widget-checklist-value-get 4 0% - widget-apply 4 0% - widget-child-value-inline 4 0% - widget-apply 4 0% - widget-default-value-inline 4 0% - widget-value 4 0% widget-apply 4 0% - widget-value 4 0% widget-apply 368 1% widget-setup 8 0% - mapc 8 0% - custom-magic-reset 8 0% - widget-value-set 8 0% - widget-apply 8 0% - widget-default-value-set 8 0% - widget-apply 4 0% - widget-default-delete 4 0% - widget-apply 4 0% - widget-children-value-delete 4 0% - mapc 4 0% - widget-delete 4 0% - widget-apply 4 0% widget-default-delete 4 0% - widget-default-create 4 0% - widget-apply 4 0% - custom-magic-value-create 4 0% - widget-create-child-and-convert 4 0% - widget-apply 4 0% - widget-default-create 4 0% delete-char 8 0% - byte-code 8 0% - require 8 0% - load-with-code-conversion 8 0% - eval-buffer 8 0% read 4 0% read 4 0% - profiler-stop 4 0% profiler-cpu-log 635 2% Automatic GC 4 0% - ... 4 0% - widget-types-convert-widget 4 0% - mapcar 4 0% - widget-convert 4 0% - widget-types-convert-widget 4 0% - mapcar 4 0% - widget-convert 4 0% - widget-types-convert-widget 4 0% - mapcar 4 0% - widget-convert 4 0% - widget-types-convert-widget 4 0% - mapcar 4 0% - widget-convert 4 0% - widget-apply 4 0% - #<compiled 0x66e1b40451af649> 4 0% - widget-sexp-value-to-internal 4 0% pp-to-string
[profiler-data (text/plain, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 10 Sep 2023 10:44:01 GMT) Full text and rfc822 format available.Message #22 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Mauro Aranda <maurooaranda <at> gmail.com> Cc: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 10 Sep 2023 13:43:07 +0300
> Date: Sun, 10 Sep 2023 06:49:29 -0300 > Cc: 53606 <at> debbugs.gnu.org > From: Mauro Aranda <maurooaranda <at> gmail.com> > > On 10/9/23 02:01, Eli Zaretskii wrote: > > Could you please profile this slow operation and post the completely > > unfolded profile? I think we should try to understand what exactly > > takes so much time in this case. > > Here it is. I also attach the result of C-x C-w in the report buffer, > just in case. So the hot spot seems to be widget-checklist-add-item, is that right? And inside that widget-create-child and widget-apply?
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 10 Sep 2023 10:50:02 GMT) Full text and rfc822 format available.Message #25 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Ihor Radchenko <yantar92 <at> posteo.net> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 53606 <at> debbugs.gnu.org, Mauro Aranda <maurooaranda <at> gmail.com> Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 10 Sep 2023 10:50:13 +0000
Eli Zaretskii <eliz <at> gnu.org> writes: >> Here it is. I also attach the result of C-x C-w in the report buffer, >> just in case. > > So the hot spot seems to be widget-checklist-add-item, is that right? > And inside that widget-create-child and widget-apply? No, I think. Reverse call tree shows 17747 68% - delete-char 14911 57% + widget-default-create 1864 7% + widget-checklist-add-item 972 3% + widget-editable-list-entry-create 3320 12% + widget-default-create which likely corresponds to ";; Parse % escapes in format." code, present in `widget-default-create', `widget-checklist-add-item', and `widget-editable-list-entry-create'. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 10 Sep 2023 12:42:01 GMT) Full text and rfc822 format available.Message #28 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 10 Sep 2023 09:41:27 -0300
On 10/9/23 07:43, Eli Zaretskii wrote: >> Date: Sun, 10 Sep 2023 06:49:29 -0300 >> Cc: 53606 <at> debbugs.gnu.org >> From: Mauro Aranda <maurooaranda <at> gmail.com> >> >> On 10/9/23 02:01, Eli Zaretskii wrote: >> > Could you please profile this slow operation and post the completely >> > unfolded profile? I think we should try to understand what exactly >> > takes so much time in this case. >> >> Here it is. I also attach the result of C-x C-w in the report buffer, >> just in case. > > So the hot spot seems to be widget-checklist-add-item, is that right? I think so. The checklist widgets were my first suspects, since creating them is rather slow. > And inside that widget-create-child and widget-apply? I don't think those functions could be the bottleneck. Most likely it is the widget-default-create function that those functions end up calling. So yes, widget-default-create in general, and widget-checklist-value-create in particular should be investigated for speeding them up, but I don't have any ideas at the moment.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Mon, 18 Sep 2023 11:08:02 GMT) Full text and rfc822 format available.Message #31 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: Ihor Radchenko <yantar92 <at> posteo.net>, 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Mon, 18 Sep 2023 08:07:08 -0300
[Message part 1 (text/plain, inline)]
On 10/9/23 09:41, Mauro Aranda wrote: > On 10/9/23 07:43, Eli Zaretskii wrote: > >> Date: Sun, 10 Sep 2023 06:49:29 -0300 > >> Cc: 53606 <at> debbugs.gnu.org > >> From: Mauro Aranda <maurooaranda <at> gmail.com> > >> > >> On 10/9/23 02:01, Eli Zaretskii wrote: > >> > Could you please profile this slow operation and post the completely > >> > unfolded profile? I think we should try to understand what exactly > >> > takes so much time in this case. > >> > >> Here it is. I also attach the result of C-x C-w in the report buffer, > >> just in case. > > > > So the hot spot seems to be widget-checklist-add-item, is that right? > > I think so. The checklist widgets were my first suspects, since > creating them is rather slow. > > > And inside that widget-create-child and widget-apply? > > I don't think those functions could be the bottleneck. Most likely it > is the widget-default-create function that those functions end up > calling. So yes, widget-default-create in general, and > widget-checklist-value-create in particular should be investigated for > speeding them up, but I don't have any ideas at the moment. I focused on the format handling, since there's no need to insert the escape formats in the buffer. So I rearranged the 4 functions that handle the format to avoid it and here are the figures I got, when running: (benchmark-run 5 (customize-option 'bibtex-biblatex-entry-alist)) From master, inserting either :format or :entry-format: (130.200276352 291 3.1221133909999996) Without inserting it: (38.244185927000004 266 2.795578699) | How? | Total elapsed time (5 repetitions) | Avg | Times faster | |----------------------+------------------------------------+-------+--------------| | inserting format | 130.20 | 26.04 | 1 | | not inserting format | 38.24 | 7.65 | 3.4 | All data is without native compilation. I'd appreciate if someone could at least run it once with native compilation, with and without my patch. I attach a patch with the changes, and the new profiler report, but I'm inclined to leave it as it is if the patch gets accepted.
[0001-Speed-up-widget-creation-Bug-53606.patch (text/x-patch, attachment)]
[profiler-data-no-inserting (text/plain, attachment)]
[profiler-results-no-inserting (text/plain, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Thu, 21 Dec 2023 11:49:02 GMT) Full text and rfc822 format available.Message #34 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Ihor Radchenko <yantar92 <at> posteo.net> To: Mauro Aranda <maurooaranda <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Thu, 21 Dec 2023 11:51:14 +0000
Mauro Aranda <maurooaranda <at> gmail.com> writes: > I focused on the format handling, since there's no need to insert the > escape formats in the buffer. So I rearranged the 4 functions that > handle the format to avoid it and here are the figures I got, when > running: > (benchmark-run 5 > (customize-option 'bibtex-biblatex-entry-alist)) > > From master, inserting either :format or :entry-format: > (130.200276352 291 3.1221133909999996) > > Without inserting it: > (38.244185927000004 266 2.795578699) > ... > All data is without native compilation. I'd appreciate if someone could > at least run it once with native compilation, with and without my patch. I do not see much difference with native compilation: - without the patch :: (134.779200699 247 4.294675525) - with the patch :: (39.828912859 249 3.881637917) But your patch is still making things faster. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sun, 17 Nov 2024 22:52:02 GMT) Full text and rfc822 format available.Message #37 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Roland Winkler <winkler <at> gnu.org> To: bug-gnu-emacs <at> gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sun, 17 Nov 2024 16:51:07 -0600
I looked at this old bug again (while working on BibTeX mode), and I noticed that one piece of information was missing in this thread that could be helpful: Lars filed this report against Emacs 29. Back then, I had still access to emacs 25.1 and 27.1. On the same machine emacs 25.1 needed about 2s, whereas 27.1 needed 20s to initialize the customize buffer for bibtex-biblatex-entry-alist. So it seems something in the customize or widget library was changed that resulted in the slowdown. Nothing changed on the side of BibTeX mode back then. I just filed bug #74409 that is also about the customize buffer for bibtex-biblatex-entry-alist. It is likewise about a problem that exists only with more recent versions of emacs. But I do not know whether these problems are truly related, or some symptoms just happen to be similar.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Mon, 18 Nov 2024 12:16:02 GMT) Full text and rfc822 format available.Message #40 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Roland Winkler <winkler <at> gnu.org> Cc: 53606 <at> debbugs.gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Mon, 18 Nov 2024 14:15:14 +0200
> From: Roland Winkler <winkler <at> gnu.org> > Date: Sun, 17 Nov 2024 16:51:07 -0600 > > I looked at this old bug again (while working on BibTeX mode), and I > noticed that one piece of information was missing in this thread that > could be helpful: > > Lars filed this report against Emacs 29. Back then, I had still access > to emacs 25.1 and 27.1. On the same machine emacs 25.1 needed about 2s, > whereas 27.1 needed 20s to initialize the customize buffer for > bibtex-biblatex-entry-alist. So it seems something in the customize or > widget library was changed that resulted in the slowdown. Nothing > changed on the side of BibTeX mode back then. Running the recipe after "M-x profiler-start RET RET" might show which part(s) of the code take most of the time.
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Fri, 07 Feb 2025 10:46:01 GMT) Full text and rfc822 format available.Message #43 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: 53606 <at> debbugs.gnu.org Cc: Lars Ingebrigtsen <larsi <at> gnus.org>, Eli Zaretskii <eliz <at> gnu.org>, Ihor Radchenko <yantar92 <at> posteo.net>, Roland Winkler <winkler <at> gnu.org> Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Fri, 7 Feb 2025 07:45:17 -0300
[Message part 1 (text/plain, inline)]
I'm posting my patch for this bug again. It stills shows a 3-3.5 improvement over the current code in wid-edit.el, and together with the changes Roland made, it brings the time needed to create the buffer from 20+ seconds to about 4 seconds in my machine. Profiler data has not changed much from the ones I posted back then.
[0001-Speed-up-widget-creation-Bug-53606.patch (text/x-patch, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sat, 22 Feb 2025 09:21:03 GMT) Full text and rfc822 format available.Message #46 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Mauro Aranda <maurooaranda <at> gmail.com> Cc: larsi <at> gnus.org, 53606 <at> debbugs.gnu.org, yantar92 <at> posteo.net, winkler <at> gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sat, 22 Feb 2025 11:20:33 +0200
> Date: Fri, 7 Feb 2025 07:45:17 -0300 > Cc: Roland Winkler <winkler <at> gnu.org>, Eli Zaretskii <eliz <at> gnu.org>, > Lars Ingebrigtsen <larsi <at> gnus.org>, Ihor Radchenko <yantar92 <at> posteo.net> > From: Mauro Aranda <maurooaranda <at> gmail.com> > > I'm posting my patch for this bug again. It stills shows a 3-3.5 > improvement over the current code in wid-edit.el, and together with the > changes Roland made, it brings the time needed to create the buffer from > 20+ seconds to about 4 seconds in my machine. > > Profiler data has not changed much from the ones I posted back then. There were no further comments, so I've now installed this on the master branch, thanks. Can we now close this bug, or is there anything left to do here?
bug-gnu-emacs <at> gnu.org
:bug#53606
; Package emacs
.
(Sat, 22 Feb 2025 09:38:03 GMT) Full text and rfc822 format available.Message #49 received at 53606 <at> debbugs.gnu.org (full text, mbox):
From: Mauro Aranda <maurooaranda <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: larsi <at> gnus.org, 53606 <at> debbugs.gnu.org, yantar92 <at> posteo.net, winkler <at> gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sat, 22 Feb 2025 06:37:10 -0300
Eli Zaretskii <eliz <at> gnu.org> writes: >> Date: Fri, 7 Feb 2025 07:45:17 -0300 >> Cc: Roland Winkler <winkler <at> gnu.org>, Eli Zaretskii <eliz <at> gnu.org>, >> Lars Ingebrigtsen <larsi <at> gnus.org>, Ihor Radchenko <yantar92 <at> posteo.net> >> From: Mauro Aranda <maurooaranda <at> gmail.com> >> >> I'm posting my patch for this bug again. It stills shows a 3-3.5 >> improvement over the current code in wid-edit.el, and together with the >> changes Roland made, it brings the time needed to create the buffer from >> 20+ seconds to about 4 seconds in my machine. >> >> Profiler data has not changed much from the ones I posted back then. > > There were no further comments, so I've now installed this on the > master branch, thanks. Thank you Eli. > Can we now close this bug, or is there anything left to do here? I think this can be closed.
Eli Zaretskii <eliz <at> gnu.org>
:Lars Ingebrigtsen <larsi <at> gnus.org>
:Message #54 received at 53606-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Mauro Aranda <maurooaranda <at> gmail.com> Cc: larsi <at> gnus.org, yantar92 <at> posteo.net, 53606-done <at> debbugs.gnu.org, winkler <at> gnu.org Subject: Re: bug#53606: 29.0.50; Very slow Customize buffer for bibtex-biblatex-entry-alist Date: Sat, 22 Feb 2025 13:13:50 +0200
> Date: Sat, 22 Feb 2025 06:37:10 -0300 > Cc: 53606 <at> debbugs.gnu.org, winkler <at> gnu.org, larsi <at> gnus.org, > yantar92 <at> posteo.net > From: Mauro Aranda <maurooaranda <at> gmail.com> > > Eli Zaretskii <eliz <at> gnu.org> writes: > > >> Date: Fri, 7 Feb 2025 07:45:17 -0300 > >> Cc: Roland Winkler <winkler <at> gnu.org>, Eli Zaretskii <eliz <at> gnu.org>, > >> Lars Ingebrigtsen <larsi <at> gnus.org>, Ihor Radchenko > <yantar92 <at> posteo.net> > >> From: Mauro Aranda <maurooaranda <at> gmail.com> > >> > >> I'm posting my patch for this bug again. It stills shows a 3-3.5 > >> improvement over the current code in wid-edit.el, and together with the > >> changes Roland made, it brings the time needed to create the buffer from > >> 20+ seconds to about 4 seconds in my machine. > >> > >> Profiler data has not changed much from the ones I posted back then. > > > > There were no further comments, so I've now installed this on the > > master branch, thanks. > > Thank you Eli. > > > Can we now close this bug, or is there anything left to do here? > > I think this can be closed. Done.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 22 Mar 2025 11:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.