diff options
author | Pascal Kuthe | 2023-07-07 21:46:34 +0000 |
---|---|---|
committer | GitHub | 2023-07-07 21:46:34 +0000 |
commit | 618620b36907bb2cbe29cd0e737efad9f651a00d (patch) | |
tree | cc6f5e2296017bd98bd0969a87f90b3586b72993 | |
parent | dc50263ed049f5eb4cec013c269e83e7395f40c2 (diff) |
use redraw handle for debouncing LSP messages (#7538)
-rw-r--r-- | helix-term/src/application.rs | 13 | ||||
-rw-r--r-- | helix-view/src/editor.rs | 2 |
2 files changed, 2 insertions, 13 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index e1a622f9..4c86a19f 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -34,7 +34,6 @@ use std::{ io::{stdin, stdout}, path::Path, sync::Arc, - time::{Duration, Instant}, }; use anyhow::{Context, Error}; @@ -45,8 +44,6 @@ use {signal_hook::consts::signal, signal_hook_tokio::Signals}; #[cfg(windows)] type Signals = futures_util::stream::Empty<()>; -const LSP_DEADLINE: Duration = Duration::from_millis(16); - #[cfg(not(feature = "integration"))] use tui::backend::CrosstermBackend; @@ -76,7 +73,6 @@ pub struct Application { signals: Signals, jobs: Jobs, lsp_progress: LspProgressMap, - last_render: Instant, } #[cfg(feature = "integration")] @@ -253,7 +249,6 @@ impl Application { signals, jobs: Jobs::new(), lsp_progress: LspProgressMap::new(), - last_render: Instant::now(), }; Ok(app) @@ -300,7 +295,6 @@ impl Application { S: Stream<Item = crossterm::Result<crossterm::event::Event>> + Unpin, { self.render().await; - self.last_render = Instant::now(); loop { if !self.event_loop_until_idle(input_stream).await { @@ -609,12 +603,7 @@ impl Application { EditorEvent::LanguageServerMessage((id, call)) => { self.handle_language_server_message(call, id).await; // limit render calls for fast language server messages - let last = self.editor.language_servers.incoming.is_empty(); - - if last || self.last_render.elapsed() > LSP_DEADLINE { - self.render().await; - self.last_render = Instant::now(); - } + self.editor.redraw_handle.0.notify_one(); } EditorEvent::DebuggerEvent(payload) => { let needs_render = self.editor.handle_debugger_message(payload).await; diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index f5ed7b8f..630ea5cf 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -1705,7 +1705,7 @@ impl Editor { _ = self.redraw_handle.0.notified() => { if !self.needs_redraw{ self.needs_redraw = true; - let timeout = Instant::now() + Duration::from_millis(96); + let timeout = Instant::now() + Duration::from_millis(33); if timeout < self.idle_timer.deadline(){ self.idle_timer.as_mut().reset(timeout) } |