Swap watermarks from high (4096) to low (128) when we get full buffers

into the read callback several times in succession; swap back when we
see empty buffers several times. This hopefully limits how much programs
that print a lot for a long period can monopolize tmux (like large, fast
compiling), without penalizing programs that print a lot briefly (like
most curses applications). Helps a lot for me, the actual numbers may
need tweaking later.
This commit is contained in:
nicm
2016-09-16 13:43:41 +00:00
parent 2e5584c2b4
commit eb50e7a2c8
2 changed files with 52 additions and 17 deletions

17
tmux.h
View File

@ -59,8 +59,18 @@ struct tmuxproc;
/* Automatic name refresh interval, in microseconds. Must be < 1 second. */
#define NAME_INTERVAL 500000
/* The maximum amount of data to hold from a pty (the event high watermark). */
#define READ_SIZE 4096
/*
* Event watermarks. We start with FAST then if we hit full size for HITS reads
* in succession switch to SLOW, and return when we hit EMPTY the same number
* of times.
*/
#define READ_FAST_SIZE 4096
#define READ_SLOW_SIZE 128
#define READ_FULL_SIZE (4096 - 16)
#define READ_EMPTY_SIZE 16
#define READ_CHANGE_HITS 3
/* Attribute to make gcc check printf-like arguments. */
#define printflike(a, b) __attribute__ ((format (printf, a, b)))
@ -884,6 +894,9 @@ struct window_pane {
int fd;
struct bufferevent *event;
u_int wmark_size;
u_int wmark_hits;
struct input_ctx *ictx;
struct grid_cell colgc;