Optimize VFS processing

This commit is contained in:
Aleksey Kladov 2020-07-10 22:29:40 +02:00
parent 676d2e040d
commit a1ef6cc553
2 changed files with 40 additions and 30 deletions

View file

@ -198,7 +198,10 @@ impl GlobalState {
} }
self.analysis_host.maybe_collect_garbage(); self.analysis_host.maybe_collect_garbage();
} }
Event::Vfs(task) => match task { Event::Vfs(mut task) => {
let _p = profile("GlobalState::handle_event/vfs");
loop {
match task {
vfs::loader::Message::Loaded { files } => { vfs::loader::Message::Loaded { files } => {
let vfs = &mut self.vfs.write().0; let vfs = &mut self.vfs.write().0;
for (path, contents) in files { for (path, contents) in files {
@ -230,7 +233,14 @@ impl GlobalState {
) )
} }
} }
}, }
// Coalesce many VFS event into a single loop turn
task = match self.loader.receiver.try_recv() {
Ok(task) => task,
Err(_) => break,
}
}
}
Event::Flycheck(task) => match task { Event::Flycheck(task) => match task {
flycheck::Message::AddDiagnostic { workspace_root, diagnostic } => { flycheck::Message::AddDiagnostic { workspace_root, diagnostic } => {
let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp( let diagnostics = crate::diagnostics::to_proto::map_rust_diagnostic_to_lsp(

View file

@ -70,7 +70,7 @@ impl ChangedFile {
} }
} }
#[derive(Eq, PartialEq, Copy, Clone)] #[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub enum ChangeKind { pub enum ChangeKind {
Create, Create,
Modify, Modify,