all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth
@ 2024-09-03  9:56 Eval EXEC
  2024-09-03 18:14 ` JD Smith
  0 siblings, 1 reply; 5+ messages in thread
From: Eval EXEC @ 2024-09-03  9:56 UTC (permalink / raw)
  To: emacs-devel

Hello,

I'm help to test emacs master commit: d277123f4bf

I compile emacs source code by :

```bash

make extraclean
./autogen.sh \
   && ./configure CFLAGS='-O3 -mtune=native -march=native' \
   --prefix=$(realpath ../emacs-build/$(git branch --show-current | sed 
's/\//_/g'))\
   --with-mps=yes \
   --with-imagemagick  \
   --with-modules --with-x-toolkit=gtk3 --without-compress-install \
   --without-toolkit-scroll-bars --with-native-compilation --with-mailutils\
   --enable-link-time-optimization \
   --with-tree-sitter --with-xinput2  \
   --with-dbus  --with-native-compilation=aot \
   --with-file-notification=inotify\
   && make -j30 install
```

And I enable pixel-scroll-precision-mode by:

```elisp

   (setq-default
    pixel-scroll-precision-interpolate-mice nil
    pixel-scroll-precision-interpolate-page t
    pixel-scroll-precision-use-momentum nil
    pixel-scroll-precision-momentum-seconds 2.0
    pixel-scroll-precision-interpolation-between-scroll 1.0
    pixel-scroll-precision-interpolation-total-time 0.1
    pixel-scroll-precision-large-scroll-height nil
    )
   (pixel-scroll-precision-mode 1)
```

Then I open a rust project.

use touchpad to scroll up and down. When I use touchpad to 
`triple-wheel-up`, I feel very lag and pause.

When I `triple-wheel-down`, it's very smooth.

So I `profiler-start` and scroll, then `profiler-report` get:

1. pixel-scroll-precision-scroll-up-page (very lag and pause)

```

          923  68% - command-execute
          923  68%  - funcall-interactively
          923  68%   - pixel-scroll-precision
          861  64%    - pixel-scroll-precision-scroll-up
          861  64%     - pixel-scroll-precision-scroll-up-page
           45   3%      - eval
           22   1%       - mode--line-format-right-align
           14   1%          string-pixel-width
            4   0%        - eval
            3   0%           unless
            1   0%         - minions--prominent-modes
            1   0%          - cl-remove-if-not
            1   0%             cl-remove
           14   1%       - breadcrumb--header-line
           13   0%        - funcall
           12   0%         - breadcrumb-project-crumbs
           10   0%          - breadcrumb--project-crumbs-1
            5   0%             breadcrumb--format-project-node
            2   0%             file-name-nondirectory
            2   0%             split-string
            1   0%             directory-file-name
            2   0%            breadcrumb--summarize
            1   0%         - breadcrumb-imenu-crumbs
            1   0%          - let
            1   0%           - which-function
            1   0%            - add-log-current-defun
            1   0%             - treesit-add-log-current-defun
            1   0%              - treesit-defun-at-point
            1   0%               - treesit-thing-at-point
            1   0%                - treesit-thing-at
            1   0%                 - treesit-parent-until
            1   0%                  - #<byte-code-function 34C>
            1   0%                     treesit-node-match-p
            4   0%       - tab-line-format
            4   0%        - tab-line-tabs-fixed-window-buffers
            4   0%         - let*
            4   0%          - sort
            4   0%           - tab-line-tabs-window-buffers
            4   0%            - let*
            2   0%             - seq-remove
            1   0%                function
            2   0%             - seq-difference
            1   0%                seq-reduce
            2   0%       - minions--prominent-modes
            2   0%        - cl-remove-if-not
            2   0%         - cl-remove
            1   0%            cl-delete
            1   0%         unless
            1   0%       - if
            1   0%          frame-parameter
            1   0%         mode-line-window-control
            1   0%      - window-edges
            1   0%       - window-current-scroll-bars
            1   0%          frame-current-scroll-bars
           29   2%    - error-message-string
           23   1%     - substitute-command-keys
           13   0%        generate-new-buffer
            5   0%      - #<byte-code-function E7B>
            5   0%       - kill-buffer
            1   0%        - replace-buffer-in-windows
            1   0%         - unrecord-window-buffer
            1   0%            window-normalize-window
           23   1%    - message
           22   1%     - apply
           22   1%      - ad-Advice-message
           16   1%       - apply
           16   1%        - #<primitive-function message>
            1   0%         - clear-minibuffer-message
            1   0%            timerp
            1   0%         get-buffer-window-list
            4   0%    - select-window
            4   0%     - apply
            4   0%      - ad-Advice-select-window
            4   0%       - evil-refresh-cursor
            1   0%          evil-state-property
            1   0%          evil-set-cursor
            3   0%    - #<byte-code-function 70F>
            3   0%     - internal--after-with-selected-window
            3   0%      - select-window
            3   0%       - apply
            3   0%        - ad-Advice-select-window
            3   0%           evil-refresh-cursor
            1   0%      abs
            1   0%      round
          292  21% - redisplay_internal (C function)
            9   0%  - eval
            4   0%   - mode--line-format-right-align
            2   0%      string-pixel-width
            3   0%   - breadcrumb--header-line
            3   0%    - funcall
            2   0%     - breadcrumb-project-crumbs
            1   0%      - breadcrumb--project-crumbs-1
            1   0%         breadcrumb--format-project-node
            1   0%        breadcrumb--summarize
            1   0%     - breadcrumb-imenu-crumbs
            1   0%      - let
            1   0%       - which-function
            1   0%        - add-log-current-defun
            1   0%         - treesit-add-log-current-defun
            1   0%          - treesit-defun-at-point
            1   0%           - treesit-thing-at-point
            1   0%            - treesit-thing-at
            1   0%               treesit-node-at
            1   0%   - minions--prominent-modes
            1   0%    - cl-remove-if-not
            1   0%       cl-remove
            1   0%     tab-line-format
            4   0%  - tab-bar-make-keymap
            4   0%   - tab-bar-make-keymap-1
            4   0%    - tab-bar-format-list
            4   0%     - #<byte-code-function BB1>
            3   0%      - tab-bar-format-align-right
            2   0%       - tab-bar-format-list
            2   0%        - #<byte-code-function F83>
            2   0%         - keycast-tab-bar
            2   0%          - keycast--format
            2   0%           - format-spec
            2   0%              generate-new-buffer
            1   0%         string-pixel-width
            1   0%      - keycast-tab-bar
            1   0%       - keycast--format
            1   0%        - format-spec
            1   0%         - #<byte-code-function 1DC>
            1   0%            kill-buffer
           62   4% - timer-event-handler
           62   4%  - apply
           62   4%   - #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_9>
           62   4%      jit-lock-context-fontify
           11   0% - copilot--post-command
           11   0%  - apply
           11   0%   - exec/copilot-complete-advice
           11   0%    - if
           11   0%     - progn
            9   0%      - funcall
            9   0%       - #<interpreted-function EC0>
            9   0%        - funcall
            9   0%         - #<interpreted-function EE2>
            9   0%          - if
            9   0%           - progn
            5   0%            - funcall
            5   0%             - #<interpreted-function E0C>
            5   0%              - save-current-buffer
            5   0%               - apply
            5   0%                - #<interpreted-function FC3>
            5   0%                 - let
            5   0%                  - while
            5   0%                   - let
            5   0%                    - let*
            3   0%                     - mapc
            3   0%                      - #<interpreted-function BD5>
            3   0%                       - let*
            3   0%                        - add-hook
            3   0%                         - lsp--create-request-cancel
            3   0%                          - function
            3   0%                           - 
cconv-make-interpreted-closure
            3   0%                            - macroexpand-all
            3   0%                             - macroexp--expand-all
            2   0%                              - macroexp--all-forms
            2   0%                               - macroexp--expand-all
            2   0%                                - macroexp--all-forms
            2   0%                                 - macroexp--expand-all
            2   0%                                  - macroexp--all-forms
            2   0%                                   - macroexp--expand-all
            1   0%                                    - macroexp--all-forms
            1   0%                                     - 
macroexp--expand-all
            1   0%                                      - 
macroexp--all-forms
            1   0%                                       - 
macroexp--expand-all
            1   0%                                        - 
macroexp-macroexpand
            1   0% macroexpand-1
            1   0%                              - macroexp--all-clauses
            1   0%                               - macroexp--all-forms
            1   0%                                - macroexp--expand-all
            1   0%                                 - macroexp--all-forms
            1   0%                                  - macroexp--expand-all
            1   0%                                   - macroexp--all-forms
            1   0%                                    - macroexp--expand-all
            1   0%                                     - macroexp--all-forms
            1   0%                                      - 
macroexp--expand-all
            1   0%                                       - 
macroexp--all-forms
            1   0%                                        - 
macroexp--expand-all
            1   0%                                         - 
macroexp--all-forms
            1   0%                                          - 
macroexp--expand-all
            1   0%                                           - 
macroexp-macroexpand
            1   0% macroexpand-1
            1   0%                     - lsp--position-to-point
            1   0%                      - let*
            1   0%                       - lsp--line-character-to-point
            1   0%                        - or
            1   0%                         - let
            1   0%                          - if
            1   0%                           - let*
            1   0%                            - save-restriction
            1   0%                             - save-excursion
            1   0%                                forward-line
            3   0%            - lsp-document-highlight
            3   0%             - let
            3   0%              - lsp--document-highlight
            3   0%               - if
            3   0%                - progn
            3   0%                 - let*
            3   0%                  - if
            3   0%                   - lsp-request-async
            3   0%                    - let*
            3   0%                     - progn
            3   0%                      - lsp--send-request-async
            3   0%                       - let*
            3   0%                        - if
            3   0%                         - let*
            1   0%                          - seq-do
            1   0%                           - function
            1   0%                            - 
cconv-make-interpreted-closure
            1   0%                             - cconv-fv
            1   0%                              - cconv-analyze-form
            1   0% cconv--analyze-function
            1   0% lsp--create-async-callback
            1   0%                          - function
            1   0%                           - 
cconv-make-interpreted-closure
            1   0%                            - cconv-fv
            1   0%                             - cconv-analyze-form
            1   0%                              - cconv--analyze-function
            1   0%                               - cconv-analyze-form
            1   0%                                - cconv-analyze-form
            1   0%                                 - cconv--analyze-function
            1   0% #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_25>
            1   0%            - condition-case
            1   0%             - let
            1   0%              - save-current-buffer
            1   0%               - unwind-protect
            1   0%                - progn
            1   0%                 - setq
            1   0%                  - cons
            1   0%                   - json-parse-buffer
            1   0%                    - apply
            1   0%                     - lsp-booster--advice-json-parse
            1   0%                      - or
            1   0%                       - if
            1   0%                        - progn
            1   0%                         - let
            1   0%                            read
            2   0%      - apply
            2   0%       - #<native-comp-function copilot--post-command>
            1   0%        - s-starts-with-p
            1   0%           string-prefix-p
            9   0%   display-line-numbers-update-width
            9   0%   flycheck-error-list-update-source
            7   0% - exec/lsp-document-highlight-now
            7   0%  - let
            7   0%   - if
            7   0%    - progn
            7   0%     - if
            7   0%      - progn
            7   0%       - if
            7   0%        - progn
            7   0%         - let
            6   0%          - bounds-of-thing-at-point
            2   0%             make-closure
            2   0%           - #<byte-code-function 42F>
            2   0%            - forward-thing
            2   0%               forward-symbol
            1   0%             re-search-forward
            1   0%            if
            5   0% - winner-save-old-configurations
            5   0%  - winner-remember
            1   0%   - winner-win-data
            1   0%      window-edges
            4   0% - flycheck-hide-error-buffer
            4   0%    flycheck-error-message-buffer
            4   0% - sideline-flycheck--post-command
            4   0%  - sideline-flycheck--get-errors
            3   0%   - flycheck-overlay-errors-in
            3   0%    - flycheck-overlays-in
            3   0%     - flycheck-filter-overlays
            2   0%      - seq-filter
            2   0%       - seq-map
            1   0%        - apply
            1   0%         - #<byte-code-function 1B4>
            1   0%            mapcar
            1   0%        seq-sort
            3   0% - flycheck-display-error-at-point-soon
            3   0%  - run-at-time
            2   0%     timer-relative-time
            1   0%   - timer-set-time
            1   0%      timer--time-setter
            2   0% - jit-lock--antiblink-post-command
            1   0%    syntax--lbp
            1   0%    syntax-ppss
            2   0%   flycheck-error-list-highlight-errors
            1   0% - corfu--auto-post-command
            1   0%    corfu--match-symbol-p
            1   0%   which-key--lighter-restore
            1   0% - which-key--hide-popup
            1   0%    which-key--lighter-restore
            1   0% - hl-line-highlight
            1   0%  - apply
            1   0%     #<native-comp-function hl-line-highlight>
            1   0%   flycheck-perform-deferred-syntax-check
            1   0% - lsp--post-command
            1   0%  - lsp--idle-reschedule
            1   0%   - setq
            1   0%    - run-with-idle-timer
            1   0%     - timer-activate-when-idle
            1   0%        timer--activate
            0   0%   ...
```

2. pixel-scroll-precision-scroll-down-page  (very smooth, no pause)

```

          423  61% - redisplay_internal (C function)
           24   3%  - tab-bar-make-keymap
           24   3%   - tab-bar-make-keymap-1
           24   3%    - tab-bar-format-list
           24   3%     - #<byte-code-function 634>
           16   2%      - tab-bar-format-align-right
           16   2%       - tab-bar-format-list
           16   2%        - #<byte-code-function 544>
           14   2%         - keycast-tab-bar
           14   2%          - keycast--format
           12   1%           - format-spec
            8   1%              generate-new-buffer
            3   0%            - #<byte-code-function F35>
            1   0%               kill-buffer
            2   0%             format
            2   0%         - tab-bar-format-global
            2   0%          - #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_39>
            2   0%           - eval
            2   0%            - lsp--progress-status
            2   0%             - let
            2   0%              - s-join
            2   0%               - -keep
            1   0%                - #<interpreted-function 931>
            1   0%                 - let
            1   0%                    if
            5   0%      - keycast-tab-bar
            5   0%       - keycast--format
            4   0%        - format-spec
            2   0%         - #<byte-code-function 3A9>
            2   0%          - kill-buffer
            1   0%             tabspaces--local-buffer-p
            2   0%           generate-new-buffer
            1   0%          format
            3   0%      - tab-bar-format-global
            3   0%       - #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_39>
            2   0%        - eval
            1   0%         - lsp--progress-status
            1   0%            let
            1   0%         - flycheck-status-emoji-mode-line-text
            1   0%          - flycheck-status-emoji--check
            1   0%           - char-displayable-p
            1   0%              internal-char-font
           20   2%  - eval
           10   1%   - mode--line-format-right-align
            5   0%      string-pixel-width
            3   0%    - eval
            2   0%     - minions--prominent-modes
            2   0%      - cl-remove-if-not
            2   0%       - cl-remove
            1   0%          cl-delete
            1   0%       cdr
            6   0%   - breadcrumb--header-line
            6   0%    - funcall
            4   0%     - breadcrumb-project-crumbs
            4   0%      - breadcrumb--project-crumbs-1
            2   0%         directory-file-name
            1   0%         breadcrumb--format-project-node
            1   0%         split-string
            2   0%     - breadcrumb-imenu-crumbs
            2   0%      - let
            2   0%       - which-function
            2   0%        - add-log-current-defun
            2   0%         - treesit-add-log-current-defun
            2   0%          - treesit-defun-at-point
            2   0%           - treesit-thing-at-point
            2   0%            - treesit-thing-at
            1   0%               treesit-parent-until
            1   0%               treesit-node-at
            2   0%   - tab-line-format
            2   0%    - tab-line-tabs-fixed-window-buffers
            2   0%     - let*
            2   0%      - let
            2   0%       - seq-do-indexed
            2   0%        - seq-do
            1   0%         - mapc
            1   0%          - #<byte-code-function 74F>
            1   0%           - #<interpreted-function F23>
            1   0%              puthash
            1   0%   - minions--prominent-modes
            1   0%    - cl-remove-if-not
            1   0%       cl-remove
          189  27% - command-execute
          189  27%  - funcall-interactively
          189  27%   - pixel-scroll-precision
          187  27%    - pixel-scroll-precision-scroll-down
          187  27%     - pixel-scroll-precision-scroll-down-page
           81  11%      - posn-at-point
           81  11%       - apply
           81  11%        - #<primitive-function posn-at-point>
           30   4%         - eval
           13   1%          - mode--line-format-right-align
            7   1%           - string-pixel-width
            1   0%            - #<byte-code-function 08B>
            1   0%               work-buffer--release
            2   0%           - eval
            2   0%            - minions--prominent-modes
            2   0%             - cl-remove-if-not
            2   0%              - cl-remove
            1   0%                 cl-ldiff
           11   1%          - breadcrumb--header-line
           11   1%           - funcall
            8   1%            - breadcrumb-project-crumbs
            8   1%             - breadcrumb--project-crumbs-1
            3   0%                breadcrumb--format-project-node
            2   0%              - project-current
            2   0%               - apply
            2   0%                - exec-project-current-advice
            1   0%                 - or
            1   0%                    exec-project-current
            1   0%                split-string
            1   0%                project-root
            1   0%                file-name-nondirectory
            2   0%            - breadcrumb-imenu-crumbs
            2   0%             - let
            2   0%              - which-function
            2   0%               - add-log-current-defun
            2   0%                - treesit-add-log-current-defun
            1   0%                 - treesit-defun-name
            1   0%                    rust-ts-mode--defun-name
            1   0%                 - treesit-defun-at-point
            1   0%                  - treesit-thing-at-point
            1   0%                   - treesit-thing-at
            1   0%                      treesit-parent-until
            2   0%          - tab-line-format
            2   0%           - tab-line-tabs-fixed-window-buffers
            2   0%            - let*
            1   0%             - let
            1   0%                make-hash-table
            1   0%             - sort
            1   0%              - tab-line-tabs-window-buffers
            1   0%               - let*
            1   0%                - seq-difference
            1   0%                   make-closure
            2   0%            propertize
            2   0%          - if
            2   0%             frame-parameter
           33   4%      - eval
           14   2%       - mode--line-format-right-align
           11   1%        - string-pixel-width
            2   0%         - #<byte-code-function 733>
            2   0%            work-buffer--release
            2   0%           symbol-overlay-refresh
            1   0%        - eval
            1   0%           propertize
           11   1%       - breadcrumb--header-line
           10   1%        - funcall
            5   0%         - breadcrumb-imenu-crumbs
            5   0%          - let
            5   0%           - which-function
            5   0%            - add-log-current-defun
            5   0%             - treesit-add-log-current-defun
            3   0%              - treesit-defun-at-point
            3   0%               - treesit-thing-at-point
            3   0%                - treesit-thing-at
            3   0%                   treesit-parent-until
            1   0%              - treesit-defun-name
            1   0%                 rust-ts-mode--defun-name
            5   0%         - breadcrumb-project-crumbs
            4   0%          - breadcrumb--project-crumbs-1
            2   0%             breadcrumb--format-project-node
            1   0%             file-name-nondirectory
            1   0%           - file-relative-name
            1   0%            - apply
            1   0%             - #<interpreted-function 4A2>
            1   0%                my-cacheable-file-relative-name
            1   0%            breadcrumb--summarize
            1   0%        - cl-remove-if
            1   0%         - cl-remove
            1   0%          - seq-empty-p
            1   0%             cl-type-of
            4   0%       - tab-line-format
            3   0%        - tab-line-tabs-fixed-window-buffers
            3   0%         - let*
            3   0%          - sort
            2   0%           - tab-line-tabs-window-buffers
            2   0%            - let*
            1   0%             - seq-difference
            1   0%              - seq-reduce
            1   0%                 seq-empty-p
            1   0%             - seq-remove
            1   0%                seq-filter
            3   0%       - minions--prominent-modes
            3   0%        - cl-remove-if-not
            3   0%         - cl-remove
            1   0%            cl-delete
            1   0%            #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_8>
            1   0%         if
            2   0%    - select-window
            2   0%     - apply
            2   0%      - ad-Advice-select-window
            2   0%         evil-refresh-cursor
           33   4% - timer-event-handler
           33   4%  - apply
           33   4%   - #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_9>
           33   4%      jit-lock-context-fontify
           12   1%   flycheck-error-list-update-source
            8   1% - ...
            7   1%  - lsp--document-highlight
            7   1%   - if
            7   1%    - progn
            7   1%     - let*
            7   1%      - if
            7   1%       - lsp-request-async
            7   1%        - let*
            7   1%         - progn
            7   1%          - lsp--send-request-async
            7   1%           - let*
            7   1%            - if
            7   1%             - let*
            4   0%              - seq-do
            4   0%               - function
            4   0%                - cconv-make-interpreted-closure
            4   0%                 - macroexpand-all
            4   0%                  - macroexp--expand-all
            4   0%                   - macroexp--all-forms
            4   0%                    - macroexp--expand-all
            4   0%                     - macroexp--all-forms
            4   0%                      - macroexp--expand-all
            4   0%                       - macroexp--all-forms
            4   0%                        - macroexp--expand-all
            2   0%                         - macroexp--all-forms
            2   0%                          - macroexp--expand-all
            2   0%                           - macroexp--all-forms
            2   0%                            - macroexp--expand-all
            2   0%                             - macroexp--all-forms
            2   0%                              - macroexp--expand-all
            2   0%                               - macroexp--all-forms
            2   0%                                - macroexp--expand-all
            2   0%                                 - macroexp--all-forms
            2   0% macroexp--expand-all
            1   0%                         - macroexp--all-clauses
            1   0%                          - macroexp--all-forms
            1   0%                           - macroexp--expand-all
            1   0%                            - macroexp--all-forms
            1   0%                             - macroexp--expand-all
            1   0%                              - macroexp--all-forms
            1   0%                               - macroexp--expand-all
            1   0%                                  booleanp
            1   0%                           function-get
            2   0%              - lsp--create-async-callback
            2   0%               - let
            2   0%                - function
            2   0%                 - cconv-make-interpreted-closure
            1   0%                  - macroexpand-all
            1   0%                   - macroexp--expand-all
            1   0%                    - macroexp--all-forms
            1   0%                     - macroexp--expand-all
            1   0%                      - macroexp--all-forms
            1   0%                       - macroexp--expand-all
            1   0%                        - macroexp--all-forms
            1   0%                           macroexp--expand-all
            1   0%              - if
            1   0%               - let
            1   0%                - function
            1   0%                 - cconv-make-interpreted-closure
            1   0%                  - macroexpand-all
            1   0%                   - macroexp--expand-all
            1   0%                    - macroexp--all-forms
            1   0%                     - macroexp--expand-all
            1   0%                      - macroexp--all-forms
            1   0%                       - macroexp--expand-all
            1   0%                          function-get
            1   0%  - run-hooks
            1   0%   - lsp--update-inlay-hints
            1   0%    - if
            1   0%     - let*
            1   0%      - lsp-update-inlay-hints
            1   0%       - lsp-request-async
            1   0%        - let*
            1   0%         - progn
            1   0%          - lsp--send-request-async
            1   0%           - let*
            1   0%            - if
            1   0%             - let*
            1   0%              - function
            1   0%               - cconv-make-interpreted-closure
            1   0%                - cconv-fv
            1   0%                   #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_29>
            8   1%   display-line-numbers-update-width
            3   0% - flycheck-display-error-at-point-soon
            3   0%  - run-at-time
            2   0%     timer-relative-time
            1   0%   - timer-activate
            1   0%    - timer--activate
            1   0%       timer--time-less-p
            3   0% - exec/lsp-document-highlight-now
            3   0%  - let
            3   0%   - if
            2   0%    - progn
            1   0%     - if
            1   0%      - progn
            1   0%       - if
            1   0%        - progn
            1   0%         - let
            1   0%          - bounds-of-thing-at-point
            1   0%           - #<byte-code-function BED>
            1   0%            - forward-thing
            1   0%               intern-soft
            1   0%     - let
            1   0%      - lsp--cancel-request
            1   0%       - mapcar
            1   0%        - #<interpreted-function 29A>
            1   0%         - let
            1   0%          - lsp-notify
            1   0%           - lsp--send-notification
            1   0%            - mapcar
            1   0%             - #<interpreted-function 188>
            1   0%              - let
            1   0%               - if
            1   0%                - lsp--log-io-p
            1   0%                   plist-get
            1   0%    - and
            1   0%     - and
            1   0%        boundp
            3   0% - winner-save-old-configurations
            3   0%  - winner-remember
            1   0%   - winner-win-data
            1   0%    - winner-sorted-window-list
            1   0%       #<native-comp-function 
F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_10>
            2   0% - #<interpreted-function C15>
            2   0%  - let
            2   0%   - while
            2   0%    - if
            2   0%     - let*
            1   0%      - mapc
            1   0%       - #<interpreted-function 66F>
            1   0%        - let*
            1   0%         - add-hook
            1   0%          - lsp--create-request-cancel
            1   0%           - function
            1   0%            - cconv-make-interpreted-closure
            1   0%             - cconv-fv
            1   0%              - cconv-analyze-form
            1   0%               - cconv--analyze-function
            1   0%                - cconv-analyze-form
            1   0%                 - cconv-analyze-form
            1   0%                  - cconv-analyze-form
            1   0%                     cconv-analyze-form
            1   0%      - if
            1   0%       - progn
            1   0%        - condition-case
            1   0%         - let
            1   0%            generate-new-buffer
            1   0% - evil-repeat-pre-hook
            1   0%  - evil-repeat-start
            1   0%     evil-visual-state-p
            1   0%   keycast--update
            1   0% - evil-repeat-post-hook
            1   0%    evil-repeat-stop
            1   0% - sideline-flycheck--post-command
            1   0%    sideline-flycheck--get-errors
            1   0%   flycheck-error-list-highlight-errors
```


Why `pixel-scroll-precision-scroll-up-page` is very lag and pause, but 
`pixel-scroll-precision-scroll-down-page` is very smooth?

Thank you




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth
  2024-09-03  9:56 [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth Eval EXEC
@ 2024-09-03 18:14 ` JD Smith
  2024-09-04  1:13   ` Po Lu
  0 siblings, 1 reply; 5+ messages in thread
From: JD Smith @ 2024-09-03 18:14 UTC (permalink / raw)
  To: Eval EXEC, emacs-devel


> On Sep 3, 2024, at 5:56 AM, Eval EXEC <execvy@gmail.com> wrote:
> 
> Then I open a rust project.
> 
> use touchpad to scroll up and down. When I use touchpad to `triple-wheel-up`, I feel very lag and pause.
> 
> When I `triple-wheel-down`, it's very smooth.
> 
> 
> Why `pixel-scroll-precision-scroll-up-page` is very lag and pause, but `pixel-scroll-precision-scroll-down-page` is very smooth?

This asymmetry is inherent to vscroll, which, although very fast, is only available "below" the displayed screen contents.  To quote the FAQ of my ultra-scroll-mac[1] package:

    • Scrolling asymmetry:
        • vscroll is purely one-sided: you can only access a vscroll area beneath the current window view; there is no negative vscroll.
        • Unlike window-start, window-end does not get updated promptly between redisplays and cannot always be trusted.
        • For these two reasons, smooth scrolling up and scrolling down are not symmetric with each other (and will likely never be). You need different approaches for each.
        • If the two approaches for scrolling up and down perform quite differently, the user will feel this difference.

The algorithms employed in ultra-scroll-mac are (in my testing) measurably faster than the ones in pixel-scroll-precision (from which it was inspired), although up is still slower than down.  They also enable smooth scrolling past images which are taller than the window.  See the functions `ultra-scroll-mac-up/down'.  

Unfortunately this package only works on the Carbon emacs-mac port, which exposes rich scroll events with pixel-level delta data.  But the core scroll algorithms could potentially be adapted to pixel-scroll-precision-mode, and I'd be happy to contribute them if anyone takes this up.  I have also wondered whether other systems like Linux/GTK have standard APIs for delivering high-speed touchpad events, which would allow pixel-scroll-precision to get out of the business of simulating these.

[1] https://github.com/jdtsmith/ultra-scroll-mac




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth
  2024-09-03 18:14 ` JD Smith
@ 2024-09-04  1:13   ` Po Lu
  2024-09-04  1:56     ` JD Smith
  0 siblings, 1 reply; 5+ messages in thread
From: Po Lu @ 2024-09-04  1:13 UTC (permalink / raw)
  To: JD Smith; +Cc: Eval EXEC, emacs-devel

JD Smith <jdtsmith@gmail.com> writes:

> Unfortunately this package only works on the Carbon emacs-mac port,
> which exposes rich scroll events with pixel-level delta data.

Really?  Emacs has reported this data on all supported platforms since
29.1, as documented in (elisp)Misc Events.  The interpolation
implemented by pixel-scroll.el is not designed for events carrying this
data but for those generated by mice.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth
  2024-09-04  1:13   ` Po Lu
@ 2024-09-04  1:56     ` JD Smith
  2024-09-04  2:32       ` Po Lu
  0 siblings, 1 reply; 5+ messages in thread
From: JD Smith @ 2024-09-04  1:56 UTC (permalink / raw)
  To: Po Lu; +Cc: Eval EXEC, emacs-devel



> On Sep 3, 2024, at 9:13 PM, Po Lu <luangruo@yahoo.com> wrote:
> 
> JD Smith <jdtsmith@gmail.com> writes:
> 
>> Unfortunately this package only works on the Carbon emacs-mac port,
>> which exposes rich scroll events with pixel-level delta data.
> 
> Really?  Emacs has reported this data on all supported platforms since
> 29.1, as documented in (elisp)Misc Events. The interpolation
> implemented by pixel-scroll.el is not designed for events carrying this
> data but for those generated by mice.


Interesting, I actually hadn't seen those new wheel-up/down PIXEL-DELTA values.  They come straight from the system?

These are the mouse event properties delivered on Carbon emacs:

  ;; (nth 3 event) is a plist that may contain the following keys:
  ;; :direction-inverted-from-device-p		(boolean)
  ;; :delta-x, :delta-y, :delta-z		(floats)
  ;; :scrolling-delta-x, :scrolling-delta-y	(floats)
  ;; :phase, :momentum-phase			(symbols)
  ;;	possible value: `none', `began', `stationary', `changed',
  ;;			`ended', `cancelled', or `may-begin'
  ;; :swipe-tracking-from-scroll-events-enabled-p (boolean)

The key of interest is :scrolling-delta-y (a float), which taps directly into the system scroll amount, as configured in settings (with momentum, etc.).  I had the impression there was nothing equivalent in other emacs builds, and that was why pixel-scroll-precision has its own elisp-based "driver".  So all the momentum/interpolation code in pixel-scroll is effectively to allow low resolution mice to simulate high scroll event rate trackpads?  

Will take a closer look, thanks.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth
  2024-09-04  1:56     ` JD Smith
@ 2024-09-04  2:32       ` Po Lu
  0 siblings, 0 replies; 5+ messages in thread
From: Po Lu @ 2024-09-04  2:32 UTC (permalink / raw)
  To: JD Smith; +Cc: Eval EXEC, emacs-devel

JD Smith <jdtsmith@gmail.com> writes:

> Interesting, I actually hadn't seen those new wheel-up/down
> PIXEL-DELTA values.  They come straight from the system?

Yes.  They're provided by the X Input Extension on X, for example.

> pixel-scroll-precision has its own elisp-based "driver".  So all the
> momentum/interpolation code in pixel-scroll is effectively to allow
> low resolution mice to simulate high scroll event rate trackpads?

The momentum code is not, but the interpolation is.  Momentum enters
into effect when the system notifies Emacs that precision scrolling has
ceased and `pixel-scroll-precision-use-momentum' is enabled.



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-09-04  2:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-03  9:56 [Emacs Master d277123f4bf] pixel-scroll-precision-scroll-up-page feels pause, but pixel-scroll-precision-scroll-down-page is smooth Eval EXEC
2024-09-03 18:14 ` JD Smith
2024-09-04  1:13   ` Po Lu
2024-09-04  1:56     ` JD Smith
2024-09-04  2:32       ` Po Lu

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.