Change summary
crates/terminal/src/terminal.rs | 53 +++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 21 deletions(-)
Detailed changes
@@ -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(())