Checkpoint

Nathan Sobo created

Change summary

crates/gpui2/src/executor.rs                 |  2 
crates/gpui2/src/platform.rs                 |  2 
crates/gpui2/src/platform/mac/dispatcher.rs  | 23 ---------------------
crates/gpui2/src/platform/test/dispatcher.rs | 18 ++++++++++------
4 files changed, 14 insertions(+), 31 deletions(-)

Detailed changes

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;
                         }

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> {

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 <dispatch/dispatch.h>
-
-// 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;
-// }
-// ```

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 {