diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-10-14 09:58:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-14 09:58:30 +0800 |
commit | bf70a33f5e7de0218704126c149db24542e39766 (patch) | |
tree | 45190c96e29e86f2770ad1481fbf6d37794e76d4 | |
parent | 9f32deba56ea867a8bb9b9ab7f44bcc5142e8bbc (diff) | |
download | rneovim-bf70a33f5e7de0218704126c149db24542e39766.tar.gz rneovim-bf70a33f5e7de0218704126c149db24542e39766.tar.bz2 rneovim-bf70a33f5e7de0218704126c149db24542e39766.zip |
vim-patch:8.1.0822: peeking and flushing output slows down execution (#25629)
Problem: Peeking and flushing output slows down execution.
Solution: Do not update the mode message when global_busy is set. Do not
flush when only peeking for a character. (Ken Takata)
https://github.com/vim/vim/commit/cb574f415486adff645ce384979bfecf27f5be8c
-rw-r--r-- | src/nvim/drawline.c | 2 | ||||
-rw-r--r-- | src/nvim/getchar.c | 6 | ||||
-rw-r--r-- | src/nvim/grid.c | 10 | ||||
-rw-r--r-- | test/functional/lua/ui_event_spec.lua | 3 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 54 | ||||
-rw-r--r-- | test/functional/ui/float_spec.lua | 8 | ||||
-rw-r--r-- | test/functional/ui/fold_spec.lua | 4 | ||||
-rw-r--r-- | test/functional/ui/inccommand_spec.lua | 11 | ||||
-rw-r--r-- | test/functional/ui/options_spec.lua | 9 | ||||
-rw-r--r-- | test/functional/ui/searchhl_spec.lua | 2 |
10 files changed, 64 insertions, 45 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c index 1c7f649848..683bd61496 100644 --- a/src/nvim/drawline.c +++ b/src/nvim/drawline.c @@ -3287,5 +3287,5 @@ static void win_put_linebuf(win_T *wp, int row, int coloff, int endcol, int clea } grid_adjust(&grid, &row, &coloff); - grid_put_linebuf(grid, row, coloff, 0, endcol, clear_width, wp->w_p_rl, bg_attr, wrap, false); + grid_put_linebuf(grid, row, coloff, 0, endcol, clear_width, wp->w_p_rl, bg_attr, wrap); } diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 7c5d39bd70..5f3b143998 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -2861,8 +2861,10 @@ int inchar(uint8_t *buf, int maxlen, long wait_time) } // Always flush the output characters when getting input characters - // from the user. - ui_flush(); + // from the user and not just peeking. + if (wait_time == -1L || wait_time > 10L) { + ui_flush(); + } // Fill up to a third of the buffer, because each character may be // tripled below. diff --git a/src/nvim/grid.c b/src/nvim/grid.c index 9fe518e9fd..c16625a330 100644 --- a/src/nvim/grid.c +++ b/src/nvim/grid.c @@ -481,11 +481,8 @@ void grid_line_flush(void) return; } - int row = grid_line_row; - - bool invalid_row = grid != &default_grid && grid_invalid_row(grid, row) && grid_line_first == 0; - grid_put_linebuf(grid, row, grid_line_coloff, grid_line_first, grid_line_last, grid_line_last, - false, 0, false, invalid_row); + grid_put_linebuf(grid, grid_line_row, grid_line_coloff, grid_line_first, grid_line_last, + grid_line_last, false, 0, false); } /// flush grid line but only if on a valid row @@ -620,7 +617,7 @@ static int grid_char_needs_redraw(ScreenGrid *grid, int col, size_t off_to, int /// If "wrap" is true, then hint to the UI that "row" contains a line /// which has wrapped into the next row. void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int col, int endcol, int clear_width, - bool rl, int bg_attr, bool wrap, bool invalid_row) + bool rl, int bg_attr, bool wrap) { bool redraw_next; // redraw_this for next character bool clear_next = false; @@ -639,6 +636,7 @@ void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int col, int endcol return; } + bool invalid_row = grid != &default_grid && grid_invalid_row(grid, row) && col == 0; size_t off_to = grid->line_offset[row] + (size_t)coloff; const size_t max_off_to = grid->line_offset[row] + (size_t)grid->cols; diff --git a/test/functional/lua/ui_event_spec.lua b/test/functional/lua/ui_event_spec.lua index de436771f9..373d45da61 100644 --- a/test/functional/lua/ui_event_spec.lua +++ b/test/functional/lua/ui_event_spec.lua @@ -77,8 +77,7 @@ describe('vim.ui_attach', function() } feed '<c-y>' - -- There is an intermediate state where the 'showmode' message disappears. - screen:expect_unchanged(true) + screen:expect_unchanged() expect_events { { "popupmenu_hide" }; } diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 2c4bcadc4b..df7de77333 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -1775,30 +1775,36 @@ describe('extmark decorations', function() ]]) -- When only one highlight group has an underline attribute, it should always take effect. - meths.buf_clear_namespace(0, ns, 0, -1) - meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 20 }) - meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 30 }) - screen:expect([[ - {1:aaa}{5:bbb}{1:aa^a} | - {0:~ }| - | - ]]) - meths.buf_clear_namespace(0, ns, 0, -1) - meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 30 }) - meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 20 }) - screen:expect_unchanged(true) - meths.buf_clear_namespace(0, ns, 0, -1) - meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 20 }) - meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 30 }) - screen:expect([[ - {2:aaa}{6:bbb}{2:aa^a} | - {0:~ }| - | - ]]) - meths.buf_clear_namespace(0, ns, 0, -1) - meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 30 }) - meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 20 }) - screen:expect_unchanged(true) + for _, d in ipairs({-5, 5}) do + meths.buf_clear_namespace(0, ns, 0, -1) + screen:expect([[ + aaabbbaa^a | + {0:~ }| + | + ]]) + meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 25 + d }) + meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 25 - d }) + screen:expect([[ + {1:aaa}{5:bbb}{1:aa^a} | + {0:~ }| + | + ]]) + end + for _, d in ipairs({-5, 5}) do + meths.buf_clear_namespace(0, ns, 0, -1) + screen:expect([[ + aaabbbaa^a | + {0:~ }| + | + ]]) + meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 25 + d }) + meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 25 - d }) + screen:expect([[ + {2:aaa}{6:bbb}{2:aa^a} | + {0:~ }| + | + ]]) + end end) it('highlight is combined with syntax and sign linehl #20004', function() diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 400b2bbae7..9f6b3ca296 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -9284,9 +9284,11 @@ describe('float window', function() end -- Also test with global NormalNC highlight - meths.set_option_value('winhighlight', '', {win = win}) - command('hi link NormalNC Visual') - screen:expect_unchanged(true) + exec_lua([[ + vim.api.nvim_set_option_value('winhighlight', '', {win = ...}) + vim.api.nvim_set_hl(0, 'NormalNC', {link = 'Visual'}) + ]], win) + screen:expect_unchanged() command('hi clear NormalNC') command('hi SpecialRegion guifg=Red blend=0') diff --git a/test/functional/ui/fold_spec.lua b/test/functional/ui/fold_spec.lua index 7894c8296b..264c0355ae 100644 --- a/test/functional/ui/fold_spec.lua +++ b/test/functional/ui/fold_spec.lua @@ -169,10 +169,10 @@ describe("folded lines", function() end -- CursorLine is applied correctly with screenrow motions #22232 feed("jgk") - screen:expect_unchanged(true) + screen:expect_unchanged() -- CursorLine is applied correctly when closing a fold when cursor is not at fold start feed("zo4Gzc") - screen:expect_unchanged(true) + screen:expect_unchanged() command("set cursorlineopt=line") if multigrid then screen:expect([[ diff --git a/test/functional/ui/inccommand_spec.lua b/test/functional/ui/inccommand_spec.lua index 00dfa3fd49..cb00c75e74 100644 --- a/test/functional/ui/inccommand_spec.lua +++ b/test/functional/ui/inccommand_spec.lua @@ -2929,7 +2929,16 @@ it(':substitute with inccommand, allows :redraw before first separator is typed meths.open_win(float_buf, false, { relative = 'editor', height = 1, width = 5, row = 3, col = 0, focusable = false, }) - feed(':%s') + feed(':') + screen:expect([[ + foo bar baz | + bar baz fox | + bar foo baz | + {16: }{15: }| + {15:~ }| + :^ | + ]]) + feed('%s') screen:expect([[ foo bar baz | bar baz fox | diff --git a/test/functional/ui/options_spec.lua b/test/functional/ui/options_spec.lua index 58cd68d94a..f3817856f7 100644 --- a/test/functional/ui/options_spec.lua +++ b/test/functional/ui/options_spec.lua @@ -69,15 +69,18 @@ describe('UI receives option updates', function() eq({'mouse_on'}, evs) end) command("set mouse=") + screen:expect(function() + eq({'mouse_on', 'mouse_off'}, evs) + end) command("set mouse&") screen:expect(function() - eq({'mouse_on','mouse_off', 'mouse_on'}, evs) + eq({'mouse_on', 'mouse_off', 'mouse_on'}, evs) end) screen:detach() - eq({'mouse_on','mouse_off', 'mouse_on'}, evs) + eq({'mouse_on', 'mouse_off', 'mouse_on'}, evs) screen:attach() screen:expect(function() - eq({'mouse_on','mouse_off','mouse_on', 'mouse_on'}, evs) + eq({'mouse_on', 'mouse_off', 'mouse_on', 'mouse_on'}, evs) end) end) diff --git a/test/functional/ui/searchhl_spec.lua b/test/functional/ui/searchhl_spec.lua index 7fd66d6f8a..eb7a2574f3 100644 --- a/test/functional/ui/searchhl_spec.lua +++ b/test/functional/ui/searchhl_spec.lua @@ -337,7 +337,7 @@ describe('search highlighting', function() ]]) feed('/foo') helpers.poke_eventloop() - screen:sleep(0) + screen:sleep(100) screen:expect_unchanged() end) |