Don't poll snapshot if processing events unless user manually changed fs

This commit is contained in:
Antonio Scandurra 2022-07-04 08:10:31 +02:00
parent cf05738f68
commit aca757a02d

View file

@ -334,7 +334,7 @@ impl Worktree {
fn poll_snapshot(&mut self, cx: &mut ModelContext<Self>) {
match self {
Self::Local(worktree) => worktree.poll_snapshot(cx),
Self::Local(worktree) => worktree.poll_snapshot(false, cx),
Self::Remote(worktree) => worktree.poll_snapshot(cx),
};
}
@ -494,36 +494,37 @@ impl LocalWorktree {
Ok(updated)
}
fn poll_snapshot(&mut self, cx: &mut ModelContext<Worktree>) {
fn poll_snapshot(&mut self, force: bool, cx: &mut ModelContext<Worktree>) {
self.poll_task.take();
self.snapshot = self.background_snapshot.lock().clone();
match self.scan_state() {
ScanState::Idle => {
self.snapshot = self.background_snapshot.lock().clone();
if let Some(share) = self.share.as_mut() {
*share.snapshots_tx.borrow_mut() = self.snapshot.clone();
}
cx.emit(Event::UpdatedEntries);
}
ScanState::Initializing => {
let is_fake_fs = self.fs.is_fake();
self.snapshot = self.background_snapshot.lock().clone();
if self.poll_task.is_none() {
let is_fake_fs = self.fs.is_fake();
self.poll_task = Some(cx.spawn_weak(|this, mut cx| async move {
if is_fake_fs {
#[cfg(any(test, feature = "test-support"))]
cx.background().simulate_random_delay().await;
} else {
smol::Timer::after(Duration::from_millis(100)).await;
}
if let Some(this) = this.upgrade(&cx) {
this.update(&mut cx, |this, cx| this.poll_snapshot(cx));
}
}));
}
self.poll_task = Some(cx.spawn_weak(|this, mut cx| async move {
if is_fake_fs {
#[cfg(any(test, feature = "test-support"))]
cx.background().simulate_random_delay().await;
} else {
smol::Timer::after(Duration::from_millis(100)).await;
}
if let Some(this) = this.upgrade(&cx) {
this.update(&mut cx, |this, cx| this.poll_snapshot(cx));
}
}));
cx.emit(Event::UpdatedEntries);
}
ScanState::Updating => {}
ScanState::Err(_) => {}
_ => {
if force {
self.snapshot = self.background_snapshot.lock().clone();
}
}
}
cx.notify();
}
@ -672,7 +673,7 @@ impl LocalWorktree {
let mut snapshot = this.background_snapshot.lock();
snapshot.delete_entry(entry_id);
}
this.poll_snapshot(cx);
this.poll_snapshot(true, cx);
});
Ok(())
}))
@ -823,7 +824,7 @@ impl LocalWorktree {
inserted_entry = snapshot.insert_entry(entry, fs.as_ref());
snapshot.scan_id += 1;
}
this.poll_snapshot(cx);
this.poll_snapshot(true, cx);
Ok(inserted_entry)
})
})