diff --git a/crates/terminal/src/terminal.rs b/crates/terminal/src/terminal.rs index 9b7b4b350f697f31217cda0482965063d9da2c0e..4c27795d9775a2d9e0394299df06840e4780703d 100644 --- a/crates/terminal/src/terminal.rs +++ b/crates/terminal/src/terminal.rs @@ -356,32 +356,43 @@ impl TerminalBuilder { use futures::StreamExt; while let Some(event) = self.events_rx.next().await { - let mut timer = cx.background().timer(Duration::from_millis(2)).fuse(); - let mut events = vec![event]; - - loop { - futures::select_biased! { - _ = timer => break, - event = self.events_rx.next() => { - if let Some(event) = event { - events.push(event); - if events.len() > 100 { + this.upgrade(&cx)?.update(&mut cx, |this, cx| { + //Process the first event immediately for lowered latency + this.process_event(&event, cx); + }); + + 'outer: loop { + let mut events = vec![]; + let mut timer = cx.background().timer(Duration::from_millis(4)).fuse(); + + loop { + futures::select_biased! { + _ = timer => break, + event = self.events_rx.next() => { + if let Some(event) = event { + events.push(event); + if events.len() > 100 { + break; + } + } else { break; } - } else { - break; - } - }, + }, + } } - } - this.upgrade(&cx)?.update(&mut cx, |this, cx| { - for event in events { - this.process_event(&event, cx); + if events.len() == 0 { + smol::future::yield_now().await; + break 'outer; + } else { + this.upgrade(&cx)?.update(&mut cx, |this, cx| { + for event in events { + this.process_event(&event, cx); + } + }); + smol::future::yield_now().await; } - }); - - smol::future::yield_now().await; + } } Some(())