Fix flaky FileFinder test by avoiding redundant worktree snapshot polls when idle

This commit is contained in:
Max Brunsfeld
2021-07-13 13:53:51 -07:00
parent 42ba24c5a8
commit cdaa4e0719
2 changed files with 27 additions and 19 deletions
+20 -11
View File
@@ -459,6 +459,7 @@ mod tests {
editor,
test::{build_app_state, temp_tree},
workspace::Workspace,
worktree::FakeFs,
};
use serde_json::json;
use std::fs;
@@ -535,20 +536,28 @@ mod tests {
#[gpui::test]
async fn test_matching_cancellation(mut cx: gpui::TestAppContext) {
let tmp_dir = temp_tree(json!({
"hello": "",
"goodbye": "",
"halogen-light": "",
"happiness": "",
"height": "",
"hi": "",
"hiccup": "",
}));
let app_state = cx.read(build_app_state);
let fs = Arc::new(FakeFs::new());
fs.insert_tree(
"/dir",
json!({
"hello": "",
"goodbye": "",
"halogen-light": "",
"happiness": "",
"height": "",
"hi": "",
"hiccup": "",
}),
)
.await;
let mut app_state = cx.read(build_app_state);
Arc::get_mut(&mut app_state).unwrap().fs = fs;
let (_, workspace) = cx.add_window(|cx| Workspace::new(&app_state, cx));
workspace
.update(&mut cx, |workspace, cx| {
workspace.add_worktree(tmp_dir.path(), cx)
workspace.add_worktree("/dir".as_ref(), cx)
})
.await
.unwrap();
+7 -8
View File
@@ -435,22 +435,21 @@ impl Worktree {
let is_fake_fs = worktree.fs.is_fake();
worktree.snapshot = worktree.background_snapshot.lock().clone();
if worktree.is_scanning() {
if !worktree.poll_scheduled {
cx.spawn(|this, mut cx| async move {
if worktree.poll_task.is_none() {
worktree.poll_task = Some(cx.spawn(|this, mut cx| async move {
if is_fake_fs {
smol::future::yield_now().await;
} else {
smol::Timer::after(Duration::from_millis(100)).await;
}
this.update(&mut cx, |this, cx| {
this.as_local_mut().unwrap().poll_scheduled = false;
this.as_local_mut().unwrap().poll_task = None;
this.poll_snapshot(cx);
})
})
.detach();
worktree.poll_scheduled = true;
}));
}
} else {
worktree.poll_task.take();
self.update_open_buffers(cx);
}
}
@@ -563,7 +562,7 @@ pub struct LocalWorktree {
snapshots_to_send_tx: Option<Sender<Snapshot>>,
last_scan_state_rx: watch::Receiver<ScanState>,
_background_scanner_task: Option<Task<()>>,
poll_scheduled: bool,
poll_task: Option<Task<()>>,
rpc: Option<(rpc::Client, u64)>,
open_buffers: HashMap<usize, WeakModelHandle<Buffer>>,
shared_buffers: HashMap<PeerId, HashMap<u64, ModelHandle<Buffer>>>,
@@ -621,7 +620,7 @@ impl LocalWorktree {
snapshots_to_send_tx: None,
last_scan_state_rx,
_background_scanner_task: None,
poll_scheduled: false,
poll_task: None,
open_buffers: Default::default(),
shared_buffers: Default::default(),
peers: Default::default(),