Remove periodic gc stub

This commit is contained in:
Aleksey Kladov 2020-09-29 21:13:58 +02:00
parent 7283783b98
commit e7df0ad2fb
6 changed files with 13 additions and 64 deletions

View File

@ -144,10 +144,6 @@ pub fn apply_change(&mut self, change: AnalysisChange) {
self.db.apply_change(change)
}
pub fn maybe_collect_garbage(&mut self) {
self.db.maybe_collect_garbage();
}
pub fn collect_garbage(&mut self) {
self.db.collect_garbage();
}

View File

@ -37,13 +37,12 @@ pub(crate) fn status(db: &RootDatabase) -> String {
let macro_syntax_tree_stats = macro_syntax_tree_stats(db);
let symbols_stats = LibrarySymbolsQuery.in_db(db).entries::<LibrarySymbolsStats>();
format!(
"{}\n{}\n{}\n{} (macros)\n\n\nmemory:\n{}\ngc {:?} seconds ago",
"{}\n{}\n{}\n{} (macros)\n{} total\n",
files_stats,
symbols_stats,
syntax_tree_stats,
macro_syntax_tree_stats,
memory_usage(),
db.last_gc.elapsed().as_secs(),
)
}
@ -121,7 +120,7 @@ struct LibrarySymbolsStats {
impl fmt::Display for LibrarySymbolsStats {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "{} ({}) symbols", self.total, self.size)
write!(fmt, "{} ({}) index symbols", self.total, self.size)
}
}

View File

@ -1,7 +1,7 @@
//! Defines a unit of change that can applied to a state of IDE to get the next
//! state. Changes are transactional.
use std::{fmt, sync::Arc, time};
use std::{fmt, sync::Arc};
use base_db::{
salsa::{Database, Durability, SweepStrategy},
@ -81,8 +81,6 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
}
}
const GC_COOLDOWN: time::Duration = time::Duration::from_millis(100);
impl RootDatabase {
pub fn request_cancellation(&mut self) {
let _p = profile::span("RootDatabase::request_cancellation");
@ -126,23 +124,12 @@ pub fn apply_change(&mut self, change: AnalysisChange) {
}
}
pub fn maybe_collect_garbage(&mut self) {
if cfg!(feature = "wasm") {
return;
}
if self.last_gc_check.elapsed() > GC_COOLDOWN {
self.last_gc_check = crate::wasm_shims::Instant::now();
}
}
pub fn collect_garbage(&mut self) {
if cfg!(feature = "wasm") {
return;
}
let _p = profile::span("RootDatabase::collect_garbage");
self.last_gc = crate::wasm_shims::Instant::now();
let sweep = SweepStrategy::default().discard_values().sweep_all_revisions();

View File

@ -10,7 +10,6 @@
pub mod search;
pub mod imports_locator;
pub mod source_change;
mod wasm_shims;
use std::{fmt, sync::Arc};
@ -36,8 +35,6 @@
)]
pub struct RootDatabase {
storage: salsa::Storage<RootDatabase>,
pub last_gc: crate::wasm_shims::Instant,
pub last_gc_check: crate::wasm_shims::Instant,
}
impl fmt::Debug for RootDatabase {
@ -99,11 +96,7 @@ fn default() -> RootDatabase {
impl RootDatabase {
pub fn new(lru_capacity: Option<usize>) -> RootDatabase {
let mut db = RootDatabase {
storage: salsa::Storage::default(),
last_gc: crate::wasm_shims::Instant::now(),
last_gc_check: crate::wasm_shims::Instant::now(),
};
let mut db = RootDatabase { storage: salsa::Storage::default() };
db.set_crate_graph_with_durability(Default::default(), Durability::HIGH);
db.set_local_roots_with_durability(Default::default(), Durability::HIGH);
db.set_library_roots_with_durability(Default::default(), Durability::HIGH);
@ -121,11 +114,7 @@ pub fn update_lru_capacity(&mut self, lru_capacity: Option<usize>) {
impl salsa::ParallelDatabase for RootDatabase {
fn snapshot(&self) -> salsa::Snapshot<RootDatabase> {
salsa::Snapshot::new(RootDatabase {
storage: self.storage.snapshot(),
last_gc: self.last_gc,
last_gc_check: self.last_gc_check,
})
salsa::Snapshot::new(RootDatabase { storage: self.storage.snapshot() })
}
}

View File

@ -1,19 +0,0 @@
//! A version of `std::time::Instant` that doesn't panic in WASM.
#[cfg(not(feature = "wasm"))]
pub use std::time::Instant;
#[cfg(feature = "wasm")]
#[derive(Clone, Copy, Debug)]
pub struct Instant;
#[cfg(feature = "wasm")]
impl Instant {
pub fn now() -> Self {
Self
}
pub fn elapsed(&self) -> std::time::Duration {
std::time::Duration::new(0, 0)
}
}

View File

@ -189,19 +189,16 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
}
lsp_server::Message::Response(resp) => self.complete_request(resp),
},
Event::Task(task) => {
match task {
Task::Response(response) => self.respond(response),
Task::Diagnostics(diagnostics_per_file) => {
for (file_id, diagnostics) in diagnostics_per_file {
self.diagnostics.set_native_diagnostics(file_id, diagnostics)
}
Event::Task(task) => match task {
Task::Response(response) => self.respond(response),
Task::Diagnostics(diagnostics_per_file) => {
for (file_id, diagnostics) in diagnostics_per_file {
self.diagnostics.set_native_diagnostics(file_id, diagnostics)
}
Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
Task::Unit => (),
}
self.analysis_host.maybe_collect_garbage();
}
Task::Workspaces(workspaces) => self.switch_workspaces(workspaces),
Task::Unit => (),
},
Event::Vfs(mut task) => {
let _p = profile::span("GlobalState::handle_event/vfs");
loop {