refactor(ui): cleanup 'redrawdebug', introduce "flush" mode

This commit is contained in:
bfredl
2023-02-08 16:16:16 +01:00
parent 1ca4a8b1dd
commit 625e990976
4 changed files with 18 additions and 7 deletions

View File

@@ -4765,7 +4765,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Flags to change the way redrawing works, for debugging purposes. Flags to change the way redrawing works, for debugging purposes.
Most useful with 'writedelay' set to some reasonable value. Most useful with 'writedelay' set to some reasonable value.
Supports the following flags: Supports the following flags:
compositor Indicate what redraws come from the compositor compositor Indicate each redraw event handled by the compositor
by briefly flashing the redrawn regions in colors by briefly flashing the redrawn regions in colors
indicating the redraw type. These are the highlight indicating the redraw type. These are the highlight
groups used (and their default colors): groups used (and their default colors):
@@ -4777,6 +4777,11 @@ A jump table for the options with a short description can be found at |Q_op|.
RedrawDebugRecompose guibg=Red redraw generated by the RedrawDebugRecompose guibg=Red redraw generated by the
compositor itself, due to a compositor itself, due to a
grid being moved or deleted. grid being moved or deleted.
line introduce a delay after each line drawn on the screen.
When using the TUI or another single-grid UI, "compositor"
gives more information and should be preferred (every
line is processed as a separate event by the compositor)
flush introduce a delay after each "flush" event.
nothrottle Turn off throttling of the message grid. This is an nothrottle Turn off throttling of the message grid. This is an
optimization that joins many small scrolls to one optimization that joins many small scrolls to one
larger scroll when drawing the message area (with larger scroll when drawing the message area (with
@@ -7372,8 +7377,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*'writedelay'* *'wd'* *'writedelay'* *'wd'*
'writedelay' 'wd' number (default 0) 'writedelay' 'wd' number (default 0)
global global
The number of milliseconds to wait for each character sent to the Only takes effect toghether with 'redrawdebug'.
screen. When positive, characters are sent to the UI one by one. The number of milliseconds to wait after each line or each flush
See 'redrawdebug' for more options. For debugging purposes.
vim:tw=78:ts=8:noet:ft=help:norl: vim:tw=78:ts=8:noet:ft=help:norl:

View File

@@ -630,6 +630,8 @@ EXTERN unsigned rdb_flags;
#define RDB_NOTHROTTLE 0x002 #define RDB_NOTHROTTLE 0x002
#define RDB_INVALID 0x004 #define RDB_INVALID 0x004
#define RDB_NODELTA 0x008 #define RDB_NODELTA 0x008
#define RDB_LINE 0x010
#define RDB_FLUSH 0x020
EXTERN long p_rdt; // 'redrawtime' EXTERN long p_rdt; // 'redrawtime'
EXTERN long p_re; // 'regexpengine' EXTERN long p_re; // 'regexpengine'

View File

@@ -125,7 +125,8 @@ static char *(p_spo_values[]) = { "camel", "noplainbuffer", NULL };
static char *(p_icm_values[]) = { "nosplit", "split", NULL }; static char *(p_icm_values[]) = { "nosplit", "split", NULL };
static char *(p_jop_values[]) = { "stack", "view", NULL }; static char *(p_jop_values[]) = { "stack", "view", NULL };
static char *(p_tpf_values[]) = { "BS", "HT", "FF", "ESC", "DEL", "C0", "C1", NULL }; static char *(p_tpf_values[]) = { "BS", "HT", "FF", "ESC", "DEL", "C0", "C1", NULL };
static char *(p_rdb_values[]) = { "compositor", "nothrottle", "invalid", "nodelta", NULL }; static char *(p_rdb_values[]) = { "compositor", "nothrottle", "invalid", "nodelta", "line",
"flush", NULL };
static char *(p_sloc_values[]) = { "last", "statusline", "tabline", NULL }; static char *(p_sloc_values[]) = { "last", "statusline", "tabline", NULL };
/// All possible flags for 'shm'. /// All possible flags for 'shm'.

View File

@@ -419,7 +419,7 @@ void ui_line(ScreenGrid *grid, int row, int startcol, int endcol, int clearcol,
(const sattr_T *)grid->attrs + off); (const sattr_T *)grid->attrs + off);
// 'writedelay': flush & delay each time. // 'writedelay': flush & delay each time.
if (p_wd && !(rdb_flags & RDB_COMPOSITOR)) { if (p_wd && (rdb_flags & RDB_LINE)) {
// If 'writedelay' is active, set the cursor to indicate what was drawn. // If 'writedelay' is active, set the cursor to indicate what was drawn.
ui_call_grid_cursor_goto(grid->handle, row, ui_call_grid_cursor_goto(grid->handle, row,
MIN(clearcol, (int)grid->cols - 1)); MIN(clearcol, (int)grid->cols - 1));
@@ -510,6 +510,10 @@ void ui_flush(void)
pending_has_mouse = has_mouse; pending_has_mouse = has_mouse;
} }
ui_call_flush(); ui_call_flush();
if (p_wd && (rdb_flags & RDB_FLUSH)) {
os_microdelay((uint64_t)labs(p_wd) * 1000U, true);
}
} }
/// Check if 'mouse' is active for the current mode /// Check if 'mouse' is active for the current mode