diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/event/loop.c | 12 | ||||
-rw-r--r-- | src/nvim/message.c | 2 | ||||
-rw-r--r-- | src/nvim/tui/input.c | 4 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 2 | ||||
-rw-r--r-- | src/nvim/ui.c | 6 |
5 files changed, 15 insertions, 11 deletions
diff --git a/src/nvim/event/loop.c b/src/nvim/event/loop.c index 529ddd8eba..a01bbc9888 100644 --- a/src/nvim/event/loop.c +++ b/src/nvim/event/loop.c @@ -71,7 +71,7 @@ bool loop_poll_events(Loop *loop, int ms) return timeout_expired; } -/// Schedules an event from another thread. +/// Schedules a fast event from another thread. /// /// @note Event is queued into `fast_events`, which is processed outside of the /// primary `events` queue by loop_poll_events(). For `main_loop`, that @@ -79,7 +79,7 @@ bool loop_poll_events(Loop *loop, int ms) /// (VimState.execute), so redraw and other side-effects are likely to be /// skipped. /// @see loop_schedule_deferred -void loop_schedule(Loop *loop, Event event) +void loop_schedule_fast(Loop *loop, Event event) { uv_mutex_lock(&loop->mutex); multiqueue_put_event(loop->thread_events, event); @@ -87,15 +87,15 @@ void loop_schedule(Loop *loop, Event event) uv_mutex_unlock(&loop->mutex); } -/// Schedules an event from another thread. Unlike loop_schedule(), the event -/// is forwarded to `Loop.events`, instead of being processed immediately. +/// Schedules an event from another thread. Unlike loop_schedule_fast(), the +/// event is forwarded to `Loop.events`, instead of being processed immediately. /// -/// @see loop_schedule +/// @see loop_schedule_fast void loop_schedule_deferred(Loop *loop, Event event) { Event *eventp = xmalloc(sizeof(*eventp)); *eventp = event; - loop_schedule(loop, event_create(loop_deferred_event, 2, loop, eventp)); + loop_schedule_fast(loop, event_create(loop_deferred_event, 2, loop, eventp)); } static void loop_deferred_event(void **argv) { diff --git a/src/nvim/message.c b/src/nvim/message.c index 9bea9f5c4a..c8deaa590c 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -753,7 +753,7 @@ void msg_schedule_emsgf(const char *const fmt, ...) va_end(ap); char *s = xstrdup((char *)IObuff); - loop_schedule(&main_loop, event_create(msg_emsgf_event, 1, s)); + multiqueue_put(main_loop.events, msg_emsgf_event, 1, s); } /* diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c index c6c9527dd9..4ac3524df2 100644 --- a/src/nvim/tui/input.c +++ b/src/nvim/tui/input.c @@ -164,7 +164,7 @@ static void tinput_flush(TermInput *input, bool wait_until_empty) size_t drain_boundary = wait_until_empty ? 0 : 0xff; do { uv_mutex_lock(&input->key_buffer_mutex); - loop_schedule(&main_loop, event_create(tinput_wait_enqueue, 1, input)); + loop_schedule_fast(&main_loop, event_create(tinput_wait_enqueue, 1, input)); input->waiting = true; while (input->waiting) { uv_cond_wait(&input->key_buffer_cond, &input->key_buffer_mutex); @@ -522,7 +522,7 @@ static void tinput_read_cb(Stream *stream, RBuffer *buf, size_t count_, TermInput *input = data; if (eof) { - loop_schedule(&main_loop, event_create(tinput_done_event, 0)); + loop_schedule_fast(&main_loop, event_create(tinput_done_event, 0)); return; } diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index ea8f9d9f71..6e1b7ef2db 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -454,7 +454,7 @@ static void tui_scheduler(Event event, void *d) { UI *ui = d; TUIData *data = ui->data; - loop_schedule(data->loop, event); // `tui_loop` local to tui_main(). + loop_schedule_fast(data->loop, event); // `tui_loop` local to tui_main(). } #ifdef UNIX diff --git a/src/nvim/ui.c b/src/nvim/ui.c index fc4a3a403d..5d191314ba 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -228,7 +228,11 @@ static void ui_refresh_event(void **argv) void ui_schedule_refresh(void) { - loop_schedule(&main_loop, event_create(ui_refresh_event, 0)); + // TODO(bfredl): "fast" is not optimal. UI should be refreshed only at + // deferred processing plus a few more blocked-on-input situtions like + // wait_return(), but not any os_breakcheck(). Alternatively make this + // defered and make wait_return() process deferred events already. + loop_schedule_fast(&main_loop, event_create(ui_refresh_event, 0)); } void ui_default_colors_set(void) |