diff --git a/crates/gpui2/src/executor.rs b/crates/gpui2/src/executor.rs index 5a04cf40f0..c25eeac899 100644 --- a/crates/gpui2/src/executor.rs +++ b/crates/gpui2/src/executor.rs @@ -102,7 +102,7 @@ impl BackgroundExecutor { match future.as_mut().poll(&mut cx) { Poll::Ready(result) => return result, Poll::Pending => { - if !self.dispatcher.poll() { + if !self.dispatcher.poll(true) { if awoken.swap(false, SeqCst) { continue; } diff --git a/crates/gpui2/src/platform.rs b/crates/gpui2/src/platform.rs index 7c2dbcce18..6e710daf6c 100644 --- a/crates/gpui2/src/platform.rs +++ b/crates/gpui2/src/platform.rs @@ -162,7 +162,7 @@ pub trait PlatformDispatcher: Send + Sync { fn dispatch(&self, runnable: Runnable); fn dispatch_on_main_thread(&self, runnable: Runnable); fn dispatch_after(&self, duration: Duration, runnable: Runnable); - fn poll(&self) -> bool; + fn poll(&self, background_only: bool) -> bool; #[cfg(any(test, feature = "test-support"))] fn as_test(&self) -> Option<&TestDispatcher> { diff --git a/crates/gpui2/src/platform/mac/dispatcher.rs b/crates/gpui2/src/platform/mac/dispatcher.rs index a4ae2cc028..f19de6f627 100644 --- a/crates/gpui2/src/platform/mac/dispatcher.rs +++ b/crates/gpui2/src/platform/mac/dispatcher.rs @@ -68,7 +68,7 @@ impl PlatformDispatcher for MacDispatcher { } } - fn poll(&self) -> bool { + fn poll(&self, _background_only: bool) -> bool { false } } @@ -77,24 +77,3 @@ extern "C" fn trampoline(runnable: *mut c_void) { let task = unsafe { Runnable::from_raw(runnable as *mut ()) }; task.run(); } - -// #include - -// int main(void) { - -// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -// // Do some lengthy background work here... -// printf("Background Work\n"); - -// dispatch_async(dispatch_get_main_queue(), ^{ -// // Once done, update your UI on the main queue here. -// printf("UI Updated\n"); - -// }); -// }); - -// sleep(3); // prevent the program from terminating immediately - -// return 0; -// } -// ``` diff --git a/crates/gpui2/src/platform/test/dispatcher.rs b/crates/gpui2/src/platform/test/dispatcher.rs index 98a7897752..e537f86311 100644 --- a/crates/gpui2/src/platform/test/dispatcher.rs +++ b/crates/gpui2/src/platform/test/dispatcher.rs @@ -96,7 +96,7 @@ impl TestDispatcher { } pub fn run_until_parked(&self) { - while self.poll() {} + while self.poll(false) {} } pub fn parking_allowed(&self) -> bool { @@ -160,7 +160,7 @@ impl PlatformDispatcher for TestDispatcher { state.delayed.insert(ix, (next_time, runnable)); } - fn poll(&self) -> bool { + fn poll(&self, background_only: bool) -> bool { let mut state = self.state.lock(); while let Some((deadline, _)) = state.delayed.first() { @@ -171,11 +171,15 @@ impl PlatformDispatcher for TestDispatcher { state.background.push(runnable); } - let foreground_len: usize = state - .foreground - .values() - .map(|runnables| runnables.len()) - .sum(); + let foreground_len: usize = if background_only { + 0 + } else { + state + .foreground + .values() + .map(|runnables| runnables.len()) + .sum() + }; let background_len = state.background.len(); if foreground_len == 0 && background_len == 0 {