Subject: Re: bug#40733: 28.0.50; Emacs locks up on paste (yank) of unicode characters

From: Will Bush <[email-masked]>
Date: Wed, 29 Apr 2020 06:59:42 -0500

>
> It would be good to know what happens in Emacs during those 88
> seconds.  Please try using "M-x profiler" to find out.
>

Here's what I get with `M-x profiler-start`, using the default cpu sampling,
`C-y` the character into a scratch buffer, wait for the character to show
up,
`M-x profiler-stop`, and start `M-x profiler-report`:

- command-execute                                                  34  68%
 - call-interactively                                              34  68%
  - byte-code                                                      27  54%
   - read-extended-command                                         27  54%
    - completing-read                                              27  54%
     - completing-read-default                                     27  54%
      - read-from-minibuffer                                       20  40%
       - redisplay_internal (C function)                            3   6%
        - tool-bar-make-keymap                                      1   2%
         - tool-bar-make-keymap-1                                   1   2%
          - mapcar                                                  1   2%
           - #<compiled 0x3e964ab88a0e574>                          1   2%
            - eval                                                  1   2%
             - find-image                                           1   2%
                image-search-load-path                              1   2%
        - mode-line-default-help-echo                               1   2%
           window-at-side-p                                         1   2%
        - funcall                                                   1   2%
         - #<compiled -0x1f995e3cc2b2ecb1>                          1   2%
          - gui-backend-selection-exists-p                          1   2%
           - apply                                                  1   2%
              #<compiled 0x6140be5b29e66b5>                         1   2%
       - command-execute                                            1   2%
        - call-interactively                                        1   2%
         - funcall-interactively                                    1   2%
            self-insert-command                                     1   2%
  - funcall-interactively                                           7  14%
   - execute-extended-command                                       7  14%
    - sit-for                                                       6  12%
     - redisplay                                                    5  10%
      - redisplay_internal (C function)                             1   2%
       - tool-bar-make-keymap                                       1   2%
        - tool-bar-make-keymap-1                                    1   2%
         - mapcar                                                   1   2%
          - #<compiled 0x3e964ab88a0e574>                           1   2%
           - eval                                                   1   2%
            - find-image                                            1   2%
               image-search-load-path                               1   2%
    - command-execute                                               1   2%
     - call-interactively                                           1   2%
      - funcall-interactively                                       1   2%
         profiler-stop                                              1   2%
- ...                                                              15  30%
   Automatic GC                                                    11  22%
 - minibuffer-complete                                              4   8%
  - completion-in-region                                            4   8%
   - completion--in-region                                          4   8%
    - #<compiled -0x1e2ae9bfb330a9ab>                               4   8%
     - apply                                                        4   8%
      - #<compiled -0x1803b12e396f20ff>                             4   8%
       - completion--in-region-1                                    4   8%
        - completion--do-completion                                 4   8%
         - completion-try-completion                                2   4%
          - completion--nth-completion                              2   4%
           - completion--some                                       2   4%
            - #<compiled 0x19362eb0698d1781>                        2   4%
             - completion-basic-try-completion                      2   4%
              - try-completion                                      2   4%
               - #<compiled 0x8eea649a66594a4>                      2   4%
                  complete-with-action                              2   4%
         - minibuffer-completion-help                               2   4%
          - completion-all-completions                              1   2%
           - completion--nth-completion                             1   2%
            - completion--some                                      1   2%
             - #<compiled 0x19362eb0508d1781>                       1   2%
              - completion-basic-all-completions                    1   2%
               - completion-pcm--all-completions                    1   2%
                - all-completions                                   1   2%
                 - #<compiled 0x8eea649a66594a4>                    1   2%
                    complete-with-action                            1   2%
          - temp-buffer-window-show                                 1   2%
           - display-buffer                                         1   2%
            - display-buffer-at-bottom                              1   2%
             - window--display-buffer                               1   2%
              - #<compiled -0x142698e7aac52b3a>                     1   2%
               - display-completion-list                            1   2%
                - completion--insert-strings                        1   2%
                 - mapcar                                           1   2%
                    #<compiled -0x6d88f6ac78df9>                    1   2%
- timer-event-handler                                               1   2%
 - apply                                                            1   2%
    #<compiled 0x2393a4a91a526d>                                    1   2%

On Sat, Apr 25, 2020 at 8:51 AM Eli Zaretskii <[email-masked]> wrote:

> > From: Will Bush <[email-masked]>
> > Date: Sat, 25 Apr 2020 05:34:23 -0500
> > Cc: "Basil L. Contovounesios" <[email-masked]>, [email-masked],
> >  James Cloos <[email-masked]>
> >
> > Eli> I'm not sure I understand: you are saying that slow, but correct
> > Eli> display is _worse_ than displaying a white space instead of the
> > Eli> correct glyph, i.e. producing incorrect display?  To me, it sounds
> > Eli> like Emacs 27+ actually _improves_ things in this case.
> >
> > Let me quantify the performance because I've been ambiguous about it so
> far:
> >
> > λ ~/ time emacs -Q --eval '(message "hi")' -kill
> > emacs -Q --eval '(message "hi")' -kill  0.19s user 0.02s system 55% cpu
> 0.371 total
> > λ ~/ time emacs -Q --eval '(message "︵")' -kill
> > emacs -Q --eval '(message "︵")' -kill  81.64s user 0.03s system 99% cpu
> 1:21.91 total
> >
> > It takes ~81 seconds to do something while locking up the UI. That's
> personally
> > beyond my threshold for killing the process.
>
> It would be good to know what happens in Emacs during those 88
> seconds.  Please try using "M-x profiler" to find out.
>