perf(ui-ext): approximate scroll_delta when scrolling too much (#24234)

This commit is contained in:
zeertzjq
2023-07-04 16:48:53 +08:00
committed by GitHub
parent e8b3ed74bc
commit a76b689b47
4 changed files with 250 additions and 15 deletions

View File

@ -3631,6 +3631,221 @@ describe('ext_multigrid', function()
}}
end)
it('scroll_delta is approximated reasonably when scrolling many lines #24234', function()
command('setlocal number nowrap')
command('edit test/functional/fixtures/bigfile.txt')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19: 1 }^0000;<control>;Cc;0;BN;;;;;N;NULL;;;; |
{19: 2 }0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;|
{19: 3 }0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; |
{19: 4 }0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; |
{19: 5 }0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSIO|
{19: 6 }0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; |
{19: 7 }0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; |
{19: 8 }0007;<control>;Cc;0;BN;;;;;N;BELL;;;; |
{19: 9 }0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; |
{19: 10 }0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATIO|
{19: 11 }000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;; |
{19: 12 }000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;|
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 13, curline = 0, curcol = 0, linecount = 30592, sum_scroll_delta = 0};
}}
feed('G')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19:30581 }E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;|
{19:30582 }E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;|
{19:30583 }E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;|
{19:30584 }E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;|
{19:30585 }E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;|
{19:30586 }E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;|
{19:30587 }E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;|
{19:30588 }E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;|
{19:30589 }F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;|
{19:30590 }FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N|
{19:30591 }100000;<Plane 16 Private Use, First>;Co;0;L;;;;|
{19:30592 }^10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;|
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 30580, botline = 30592, curline = 30591, curcol = 0, linecount = 30592, sum_scroll_delta = 30580};
}}
feed('gg')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19: 1 }^0000;<control>;Cc;0;BN;;;;;N;NULL;;;; |
{19: 2 }0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;|
{19: 3 }0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; |
{19: 4 }0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; |
{19: 5 }0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSIO|
{19: 6 }0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; |
{19: 7 }0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; |
{19: 8 }0007;<control>;Cc;0;BN;;;;;N;BELL;;;; |
{19: 9 }0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; |
{19: 10 }0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATIO|
{19: 11 }000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;; |
{19: 12 }000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;|
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 13, curline = 0, curcol = 0, linecount = 30592, sum_scroll_delta = 0};
}}
command('setlocal wrap')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19: 1 }^0000;<control>;Cc;0;BN;;;;;N;NULL;;;; |
{19: 2 }0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;|
{19: };; |
{19: 3 }0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; |
{19: 4 }0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; |
{19: 5 }0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSIO|
{19: }N;;;; |
{19: 6 }0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; |
{19: 7 }0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; |
{19: 8 }0007;<control>;Cc;0;BN;;;;;N;BELL;;;; |
{19: 9 }0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; |
{19: 10 }0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULA{1:@@@}|
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 10, curline = 0, curcol = 0, linecount = 30592, sum_scroll_delta = 0};
}}
feed('G')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19:30587 }E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;|
{19: }; |
{19:30588 }E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;|
{19: }; |
{19:30589 }F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;|
{19: }N;;;;; |
{19:30590 }FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N|
{19: };;;;; |
{19:30591 }100000;<Plane 16 Private Use, First>;Co;0;L;;;;|
{19: };N;;;;; |
{19:30592 }^10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;|
{19: }N;;;;; |
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 30586, botline = 30592, curline = 30591, curcol = 0, linecount = 30592, sum_scroll_delta = 30588};
}}
command('autocmd CursorMoved * ++once call line("w$")') -- FIXME: this should not be needed
feed('gg')
screen:expect{grid=[[
## grid 1
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
[2:-----------------------------------------------------]|
{11:test/functional/fixtures/bigfile.txt }|
[3:-----------------------------------------------------]|
## grid 2
{19: 1 }^0000;<control>;Cc;0;BN;;;;;N;NULL;;;; |
{19: 2 }0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;|
{19: };; |
{19: 3 }0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; |
{19: 4 }0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;; |
{19: 5 }0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSIO|
{19: }N;;;; |
{19: 6 }0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;; |
{19: 7 }0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; |
{19: 8 }0007;<control>;Cc;0;BN;;;;;N;BELL;;;; |
{19: 9 }0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;; |
{19: 10 }0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULA{1:@@@}|
## grid 3
|
]], win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 10, curline = 0, curcol = 0, linecount = 30592, sum_scroll_delta = 0};
}}
end)
it('does not crash when dragging mouse across grid boundary', function()
screen:try_resize(48, 8)
screen:expect{grid=[[