wasamasa / eyebrowse

A simple-minded way of managing window configs in emacs
GNU General Public License v3.0
437 stars 24 forks source link

eyebrowse-mode + visual-line-mode = high CPU usage #105

Closed nlevnaut closed 4 years ago

nlevnaut commented 5 years ago

First, thank you for the great package!

I noticed that one of my CPU cores was redlining every so often and narrowed it down. It only occurs when:

Moving the cursor stops it momentarily, as does moving to a non-wrapped line, disabling visual-line-mode, or disabling eyebrowse-mode.

wasamasa commented 5 years ago

That information as is doesn't mean much. You should do the following:

nlevnaut commented 5 years ago

Here are the first few entries expanded.

- redisplay_internal (C function)                               13611  48%
 - eval                                                         13189  46%
  - eyebrowse-mode-line-indicator                               12145  42%
   - mapconcat                                                  11048  39%
    - #<compiled 0x1db762a1>                                    10853  38%
     - eyebrowse-format-slot                                    10166  35%
      - format-spec                                              6927  24%
       - #<compiled 0x10718b5>                                   3804  13%
        - kill-buffer                                            1479   5%
         - replace-buffer-in-windows                              872   3%
          - unrecord-window-buffer                                581   2%
             window-normalize-window                               24   0%
            window-normalize-buffer                                28   0%
         - magit-preserve-section-visibility-cache                120   0%
          - derived-mode-p                                         90   0%
             apply                                                 57   0%
           process-kill-buffer-query-function                      68   0%
           uniquify-kill-buffer-function                           18   0%
           run-hooks                                               18   0%
           reftex-kill-buffer-hook                                 15   0%
       - generate-new-buffer                                     1913   6%
        - get-buffer-create                                       323   1%
         - run-hooks                                              310   1%
          - treemacs--follow-after-buffer-list-update                278   0%
           - run-with-idle-timer                                  250   0%
            + timer-activate-when-idle                            115   0%
            - timer-set-idle-time                                  60   0%
               seconds-to-time                                     19   0%
             - timer--time-setter                                   3   0%
                timerp                                              3   0%
              timer-set-function                                   16   0%
     eyebrowse--get                                               705   2%
  - if                                                            557   1%
   - display-graphic-p                                             13   0%
      framep-on-display                                             3   0%
    mode-line-eol-desc                                             81   0%
  - unless                                                         30   0%
   - if                                                            10   0%
    - display-graphic-p                                             6   0%
       framep-on-display                                            6   0%
    window-parameter                                                6   0%
 - #<compiled 0x3d7551>                                           186   0%
  - apply                                                         177   0%
   - redisplay--pre-redisplay-functions                           145   0%
    - run-hook-with-args                                          116   0%
     - redisplay--update-region-highlight                          94   0%
      - #<compiled 0xf706b5>                                       47   0%
       - apply                                                     43   0%
        - rectangle--unhighlight-for-redisplay                     30   0%
           #<compiled 0x3d749d>                                    17   0%
   file-remote-p                                                  147   0%
- timer-event-handler                                            5160  18%
 - apply                                                         5087  17%
  - treemacs--follow                                             3765  13%
   - file-truename                                               3431  12%
    - file-truename                                              2204   7%
     - file-truename                                             1298   4%
        file-truename                                             514   1%
   - treemacs-get-local-window                                    142   0%
    - s-starts-with?                                               43   0%
       string-prefix-p                                             23   0%
  - auto-revert-buffers                                           487   1%
   - apply                                                        487   1%
    - #<compiled 0x10ae24d>                                       327   1%
     - auto-revert-handler                                        296   1%
      - apply                                                     296   1%
       - auto-revert-handler@bug21559                             296   1%
        - #<compiled 0x10ac9dd>                                   268   0%
           buffer-stale--default-function                         199   0%
           file-remote-p                                           59   0%
  - tooltip-timeout                                               433   1%
   - run-hook-with-args-until-success                             433   1%
    - tooltip-help-tips                                           433   1%
     - tooltip-show                                               433   1%
      - x-show-tip                                                  3   0%
       - run-at-time                                                3   0%
        - timer-activate                                            3   0%
           timer--activate                                          3   0%
  - show-paren-function                                             6   0%
   - apply                                                          6   0%
      ad-Advice-show-paren-function                                 6   0%
    blink-cursor-start                                              3   0%
  - evil-visual-update-x-selection                                  3   0%
   - evil-set-selection                                             3   0%
    - gui-backend-set-selection                                     3   0%
     - apply                                                        3   0%
        #<compiled 0x4087c5>                                        3   0%
    jit-lock-context-fontify                                        2   0%
   cancel-timer-internal                                           13   0%
   timer-inc-time                                                   7   0%
 - timer-activate-when-idle                                         4   0%
  - timer--activate                                                 4   0%
     timer--time-less-p                                             3   0%
   timer-until                                                      1   0%
- command-execute                                                5003  17%
 - call-interactively                                            5001  17%
  - funcall-interactively                                        5001  17%
   - counsel-M-x                                                 3834  13%
    - ivy-read                                                   3700  13%
     - read-from-minibuffer                                      1929   6%
      - ivy--queue-exhibit                                       1196   4%
       - ivy--exhibit                                            1190   4%
        - ivy--filter                                             786   2%
         - ivy--re-filter                                         551   1%
          - cl-remove                                             484   1%
           - apply                                                337   1%
            - cl-delete                                           212   0%
               #<compiled 0x2504c31>                              106   0%
             #<compiled 0x3404545>                                 81   0%
         - cl-remove-if-not                                       140   0%
          - apply                                                 140   0%
           - cl-remove                                            138   0%
            - apply                                               129   0%
             - cl-delete                                           68   0%
                #<compiled 0x1dbd1a55>                             52   0%
         - ivy--recompute-index                                    62   0%
          - cl-position                                            62   0%
           - cl--position                                          44   0%
              ivy--case-fold-string=                               41   0%
         - cl-search                                                4   0%
            apply                                                   4   0%
           ivy--sort                                                2   0%
         - ivy--regex-plus                                          1   0%
            ivy--split-negation                                     1   0%
        - ivy--insert-minibuffer                                  203   0%
         - ivy--resize-minibuffer-to-fit                          166   0%
          - #<compiled 0x1dad13a9>                                  8   0%
           - internal--after-with-selected-window                   8   0%
            - select-window                                         8   0%
             - apply                                                8   0%
                ad-Advice-select-window                             5   0%
           ivy--insert-prompt                                       3   0%
        - ivy--format                                             187   0%
         - ivy--wnd-cands-to-str                                  102   0%
          + ivy-format-function-default                            76   0%
          - mapcar                                                 21   0%
           - ivy--format-minibuffer-line                           21   0%
            - ivy--highlight-default                               14   0%
               ivy-add-face-text-property                           3   0%
         - mapcar                                                  61   0%
            counsel-M-x-transformer                                61   0%
         - select-window                                            9   0%
          - apply                                                   8   0%
           - ad-Advice-select-window                                8   0%
              evil-refresh-cursor                                   8   0%
           cl-subseq                                                5   0%
         - #<compiled 0x2827335>                                    4   0%
          - internal--after-with-selected-window                    4   0%
           - select-window                                          4   0%
            - apply                                                 4   0%
               ad-Advice-select-window                              4   0%
      - #<compiled 0x2cca779>                                     155   0%
       - ivy--minibuffer-setup                                    151   0%
        - ivy--exhibit                                            151   0%
         - ivy--filter                                            123   0%
          - ivy--re-filter                                        117   0%
           - cl-remove                                             79   0%
              #<compiled 0x2ed4471>                                43   0%
          - ivy--recompute-index                                    6   0%
           - ivy--preselect-index                                   6   0%
              cl-position                                           6   0%
         - ivy--format                                             22   0%
          - mapcar                                                 22   0%
             counsel-M-x-transformer                               22   0%
         - ivy--insert-minibuffer                                   6   0%
          - ivy--resize-minibuffer-to-fit                           6   0%
           - window-resize                                          3   0%
              window--size-to-pixel                                 3   0%
      - timer-event-handler                                       139   0%
       - apply                                                    135   0%
        - auto-revert-buffers                                      45   0%
         - apply                                                   45   0%
          - #<compiled 0x10ae24d>                                  20   0%
           - auto-revert-handler                                   20   0%
            - apply                                                20   0%
             - auto-revert-handler@bug21559                        20   0%
              - #<compiled 0x10ac9dd>                              13   0%
                 buffer-stale--default-function                    13   0%
        - show-paren-function                                       3   0%
           apply                                                    3   0%
      - which-key--hide-popup                                      14   0%
       - which-key--hide-buffer-side-window                        14   0%
        - apply                                                    14   0%
         - #<compiled 0x13101f1>                                    9   0%
          - quit-windows-on                                         9   0%
             unrecord-window-buffer                                 9   0%
         - treemacs--fix-width-after-which-key                      5   0%
          - treemacs-get-local-window                               3   0%
           - s-starts-with?                                         3   0%
              string-prefix-p                                       3   0%
      - minibuffer-inactive-mode                                   10   0%
       - run-mode-hooks                                            10   0%
        - run-hooks                                                10   0%
         - global-undo-tree-mode-enable-in-buffers                  8   0%
          - turn-on-undo-tree-mode                                  8   0%
           - undo-tree-overridden-undo-bindings-p                   8   0%
              global-set-key                                        4   0%
         - global-font-lock-mode-enable-in-buffers                  2   0%
          - turn-on-font-lock-if-desired                            2   0%
           - turn-on-font-lock                                      2   0%
              font-lock-mode                                        2   0%
      - command-execute                                             8   0%
       - call-interactively                                         8   0%
        - funcall-interactively                                     8   0%
           self-insert-command                                      2   0%
      - redisplay_internal (C function)                             6   0%
       - eval                                                       4   0%
        - eyebrowse-mode-line-indicator                             4   0%
         - mapconcat                                                4   0%
          - #<compiled 0x2504b8d>                                   4   0%
           - eyebrowse-format-slot                                  4   0%
            - format-spec                                           4   0%
               #<compiled 0x10718b5>                                4   0%
       - #<compiled 0x3d7551>                                       2   0%
          apply                                                     2   0%
        evil-refresh-cursor                                         6   0%
      - xselect-convert-to-targets                                  5   0%
         mapcar                                                     4   0%
        undo-auto--add-boundary                                     3   0%
      - window--sanitize-window-sizes                               3   0%
       - walk-window-tree                                           3   0%
        - walk-window-tree-1                                        3   0%
         - walk-window-tree-1                                       3   0%
          - #<compiled 0x2d72c09>                                   3   0%
           - window-min-size                                        3   0%
            - window--min-size-1                                    3   0%
             - window-size-fixed-p                                  3   0%
              - window--size-fixed-1                                3   0%
                 window--preserve-size                              3   0%
        tooltip-hide                                                2   0%
     - ivy-call                                                   690   2%
      - #<compiled 0x1346509>                                     690   2%
       - command-execute                                          690   2%
        - call-interactively                                      690   2%
         - funcall-interactively                                  690   2%
          - profiler-report                                       683   2%
           - profiler-report-cpu                                  683   2%
            - profiler-report-profile-other-window                679   2%
             - profiler-report-setup-buffer                       679   2%
              - profiler-report-render-calltree                   675   2%
               - profiler-report-rerender-calltree                675   2%
                - profiler-report-render-calltree-1                675   2%
                 - profiler-calltree-build                        668   2%
                  - profiler-calltree-build-unified                658   2%
                   - maphash                                      658   2%
                      #<compiled 0x1da803f1>                       71   0%
                    - #<compiled 0x1da10bf1>                       51   0%
                       profiler-calltree-find                      20   0%
                    - #<compiled 0x1db92dc5>                       19   0%
                     - gethash                                     13   0%
                        #<compiled 0x205dbb1>                       4   0%
                       puthash                                      3   0%
                  - profiler-calltree-compute-percentages                 10   0%
                   - profiler-calltree-walk                        10   0%
                    - profiler-calltree-walk                       10   0%
                     - profiler-calltree-walk                      10   0%
                      - profiler-calltree-walk                     10   0%
                       - profiler-calltree-walk                    10   0%
                        - profiler-calltree-walk                   10   0%
                         - profiler-calltree-walk                  10   0%
                          - profiler-calltree-walk                 10   0%
                           - profiler-calltree-walk                 10   0%
                            - profiler-calltree-walk                 10   0%
                             - profiler-calltree-walk                 10   0%
                              - profiler-calltree-walk                 10   0%
                               - profiler-calltree-walk                 10   0%
                                - profiler-calltree-walk                 10   0%
                                 - profiler-calltree-walk                  4   0%
                                  - profiler-calltree-walk                  4   0%
                                     profiler-calltree-walk                  4   0%
                                 - #<compiled 0x1db75ea1>                  3   0%
                                    profiler-format-percent                  3   0%
                 - profiler-calltree-sort                           7   0%
                  - profiler-calltree-sort                          7   0%
                   - profiler-calltree-sort                         7   0%
                    - profiler-calltree-sort                        7   0%
                     - profiler-calltree-sort                       7   0%
                      - profiler-calltree-sort                      7   0%
                       - profiler-calltree-sort                     7   0%
                        - profiler-calltree-sort                    7   0%
                         - profiler-calltree-sort                   7   0%
                          - sort                                    4   0%
                             profiler-calltree-count>                  4   0%
                          - profiler-calltree-sort                  3   0%
                           - profiler-calltree-sort                  3   0%
                            - profiler-calltree-sort                  3   0%
                             - profiler-calltree-sort                  3   0%
                              - profiler-calltree-sort                  3   0%
                               - profiler-calltree-sort                  3   0%
                                  profiler-calltree-sort                  3   0%
              - profiler-report-setup-buffer-1                      4   0%
               - profiler-report-mode                               4   0%
                - run-mode-hooks                                    4   0%
                 - run-hooks                                        4   0%
                  - evil-mode-enable-in-buffers                     4   0%
                   - evil-initialize                                4   0%
                    - evil-local-mode                               4   0%
                     - evil-disabled-buffer-p                       4   0%
                        evil-initial-state-for-buffer-name                  4   0%
              profiler-cpu-profile                                  4   0%
          - eyebrowse-mode                                          7   0%
           - customize-mark-as-set                                  7   0%
              custom-load-symbol                                    7   0%
     - ivy--reset-state                                           539   1%
        sort                                                      150   0%
      - all-completions                                           141   0%
         #<compiled 0x13464e1>                                     85   0%
      - ivy-thing-at-point                                         10   0%
       - thing-at-point                                            10   0%
        - thing-at-point-url-at-point                              10   0%
         - thing-at-point-bounds-of-url-at-point                   10   0%
          - thing-at-point--bounds-of-well-formed-url                 10   0%
           - regexp-opt                                            10   0%
            - regexp-opt-group                                     10   0%
             - regexp-opt-group                                    10   0%
              - regexp-opt-group                                   10   0%
               - regexp-opt-group                                  10   0%
                - regexp-opt-group                                 10   0%
                 - regexp-opt-group                                10   0%
                  - regexp-opt-group                               10   0%
                   - regexp-opt-group                              10   0%
                    - regexp-opt-group                              6   0%
                     - regexp-opt-group                             6   0%
                      - regexp-opt-group                            6   0%
                       - regexp-opt-group                           6   0%
                        - regexp-opt-group                          6   0%
                         - regexp-opt-group                         6   0%
                          - regexp-opt-group                        6   0%
                             regexp-opt-group                       6   0%
      counsel--M-x-externs                                        134   0%
   - evil-next-visual-line                                        499   1%
    - evil-line-move                                              499   1%
     - next-line                                                  499   1%
      - apply                                                     499   1%
       - ad-Advice-next-line                                      499   1%
        - do-smooth-scroll                                        386   1%
         - smooth-scroll-lines-above-point                        156   0%
          - smooth-scroll-count-lines                             147   0%
             count-screen-lines                                   147   0%
          - smooth-scroll-line-beginning-position                   9   0%
             beginning-of-visual-line                               9   0%
         - smooth-scroll-lines-below-point                        123   0%
          - smooth-scroll-lines-above-point                       123   0%
           - smooth-scroll-count-lines                             94   0%
              count-screen-lines                                   94   0%
           - smooth-scroll-line-beginning-position                 29   0%
              beginning-of-visual-line                             29   0%
         - scroll-down                                             16   0%
          - eval                                                   16   0%
           - eyebrowse-mode-line-indicator                         16   0%
            - mapconcat                                            16   0%
             - #<compiled 0x1db5f605>                              16   0%
              - eyebrowse-format-slot                              13   0%
               - format-spec                                       13   0%
                - #<compiled 0x10718b5>                             7   0%
                 - kill-buffer                                      2   0%
                  - replace-buffer-in-windows                       2   0%
                     unrecord-window-buffer                         2   0%
                  generate-new-buffer                               3   0%
         - scroll-up                                                6   0%
          - eval                                                    6   0%
           - eyebrowse-mode-line-indicator                          6   0%
            - mapconcat                                             6   0%
             - #<compiled 0x2504e4d>                                6   0%
              - eyebrowse-format-slot                               6   0%
               - format-spec                                        3   0%
                  #<compiled 0x10718b5>                             3   0%
        - #<compiled 0x1d0767>                                    113   0%
         - line-move                                              111   0%
          - line-move-visual                                       86   0%
           - posn-at-point                                         20   0%
            - eval                                                 20   0%
             - eyebrowse-mode-line-indicator                       19   0%
              - mapconcat                                          19   0%
               - #<compiled 0x29a0279>                             19   0%
                - eyebrowse-format-slot                            13   0%
                 - format-spec                                      7   0%
                    #<compiled 0x10718b5>                           4   0%
                    generate-new-buffer                             3   0%
          - window-inside-pixel-edges                               3   0%
             window-edges                                           3   0%
          - default-line-height                                     2   0%
             default-font-height                                    2   0%
   - evil-previous-visual-line                                    410   1%
    - evil-line-move                                              410   1%
     - previous-line                                              410   1%
      - apply                                                     410   1%
       - ad-Advice-previous-line                                  410   1%
        - do-smooth-scroll                                        329   1%
         - smooth-scroll-lines-above-point                        137   0%
          - smooth-scroll-count-lines                              95   0%
             count-screen-lines                                    95   0%
          - smooth-scroll-line-beginning-position                  37   0%
             beginning-of-visual-line                              37   0%
         - smooth-scroll-lines-below-point                         81   0%
          - smooth-scroll-lines-above-point                        81   0%
           - smooth-scroll-count-lines                             49   0%
              count-screen-lines                                   49   0%
           - smooth-scroll-line-beginning-position                 32   0%
              beginning-of-visual-line                             32   0%
         - scroll-down                                             40   0%
          - eval                                                   40   0%
           - eyebrowse-mode-line-indicator                         36   0%
            - mapconcat                                            32   0%
             - #<compiled 0x1db32c89>                              32   0%
              - eyebrowse-format-slot                              32   0%
               - format-spec                                       25   0%
                - #<compiled 0x10718b5>                            15   0%
                 - kill-buffer                                      9   0%
                  - replace-buffer-in-windows                       3   0%
                     unrecord-window-buffer                         3   0%
                  - magit-preserve-section-visibility-cache                  3   0%
                   - derived-mode-p                                 3   0%
                      apply                                         3   0%
                - generate-new-buffer                               3   0%
                 - get-buffer-create                                3   0%
                    run-hooks                                       3   0%
              eyebrowse--get                                        4   0%
             if                                                     4   0%
        - #<compiled 0x1d07a3>                                     81   0%
         - line-move                                               81   0%
          - line-move-visual                                       55   0%
           - posn-at-point                                          2   0%
            - eval                                                  2   0%
             - eyebrowse-mode-line-indicator                        2   0%
              - mapconcat                                           2   0%
               - #<compiled 0x27488a5>                              2   0%
                  eyebrowse-format-slot                             2   0%
   - evil-mouse-drag-region                                        85   0%
    - evil-mouse-drag-track                                        85   0%
     - internal--track-mouse                                       85   0%
      - #<compiled 0x16b8189>                                      85   0%
       - read-key                                                  75   0%
          read-key-sequence-vector                                 33   0%
        - use-global-map                                           13   0%
         - apply                                                   13   0%
          - ad-Advice-use-global-map                               13   0%
           - evil-normalize-keymaps                                13   0%
            - evil-state-keymaps                                   13   0%
             - apply                                               13   0%
              - evil-state-keymaps                                 13   0%
               - evil-state-property                                5   0%
                  evil-get-property                                 5   0%
        - #<compiled 0x1c02435>                                    11   0%
         - use-global-map                                           7   0%
          - apply                                                   7   0%
           - ad-Advice-use-global-map                               7   0%
            - evil-normalize-keymaps                                7   0%
             - evil-state-keymaps                                   7   0%
              - evil-state-auxiliary-keymaps                        7   0%
               - evil-mode-for-keymap                               3   0%
                  mapcar                                            3   0%
         redisplay                                                 10   0%
   - evil-next-line                                                79   0%
    - evil-line-move                                               79   0%
     - next-line                                                   79   0%
      - apply                                                      79   0%
       - ad-Advice-next-line                                       79   0%
        - do-smooth-scroll                                         58   0%
         - smooth-scroll-lines-above-point                         31   0%
          - smooth-scroll-count-lines                              31   0%
             count-screen-lines                                    31   0%
         - smooth-scroll-lines-below-point                         20   0%
          - smooth-scroll-lines-above-point                        20   0%
           - smooth-scroll-count-lines                             20   0%
              count-screen-lines                                   20   0%
        - #<compiled 0x1d0767>                                     21   0%
         - line-move                                               21   0%
            line-move-1                                            21   0%
   - evil-previous-line                                            60   0%
    - evil-line-move                                               60   0%
     - previous-line                                               60   0%
      - apply                                                      60   0%
       - ad-Advice-previous-line                                   60   0%
        - do-smooth-scroll                                         38   0%
         - smooth-scroll-lines-above-point                         26   0%
          - smooth-scroll-count-lines                              26   0%
             count-screen-lines                                    26   0%
         - smooth-scroll-lines-below-point                         12   0%
          - smooth-scroll-lines-above-point                        12   0%
           - smooth-scroll-count-lines                             12   0%
              count-screen-lines                                   12   0%
        - #<compiled 0x1d07a3>                                     22   0%
         - line-move                                               22   0%
            line-move-1                                            22   0%
   - profiler-report-toggle-entry                                  11   0%
    - profiler-report-expand-entry                                 11   0%
     - profiler-report-insert-calltree-children                    11   0%
      - mapc                                                       11   0%
       - profiler-report-insert-calltree                            8   0%
        - profiler-report-line-format                               3   0%
           profiler-report-make-name-part                           3   0%
   - evil-force-normal-state                                       10   0%
    - evil-normal-state                                            10   0%
     - evil-normalize-keymaps                                       8   0%
      - evil-state-keymaps                                          8   0%
         evil-state-auxiliary-keymaps                               8   0%
     - called-interactively-p                                       2   0%
        #<compiled 0x1a633d>                                        2   0%
   - evil-window-up                                                 7   0%
    - windmove-up                                                   7   0%
     - windmove-do-window-select                                    7   0%
      - windmove-find-other-window                                  7   0%
         window-in-direction                                        7   0%
   - evil-window-down                                               3   0%
    - windmove-down                                                 3   0%
     - windmove-do-window-select                                    3   0%
      - windmove-find-other-window                                  3   0%
         window-in-direction                                        3   0%
- ...                                                            3695  13%
   Automatic GC                                                  3695  13%
wasamasa commented 5 years ago

All I see here is that for some reason redisplay is triggered a lot. Triggering redisplay usually redraws the modeline. Redrawing the modeline a lot will slow down Emacs. This issue already came up in https://github.com/wasamasa/eyebrowse/issues/79 and I concluded there that it's not really worth working around. Can you reproduce the slowness when using emacs -Q, M-x package-initialize and only enabling this package and visual-line-mode?

wasamasa commented 4 years ago

Closing due to lack of feedback and #79