From fc2658b0749b03f365a3f176582311efd2bc6462 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 7 Jun 2019 09:50:32 +0300 Subject: use salsa's LRU for syntax trees --- crates/ra_ide_api/src/change.rs | 1 - crates/ra_ide_api/src/db.rs | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide_api/src') diff --git a/crates/ra_ide_api/src/change.rs b/crates/ra_ide_api/src/change.rs index 247dc0fee..ce03a0f95 100644 --- a/crates/ra_ide_api/src/change.rs +++ b/crates/ra_ide_api/src/change.rs @@ -225,7 +225,6 @@ impl RootDatabase { let sweep = SweepStrategy::default().discard_values().sweep_all_revisions(); self.query(ra_db::ParseQuery).sweep(sweep); - self.query(hir::db::ParseMacroQuery).sweep(sweep); self.query(hir::db::MacroDefQuery).sweep(sweep); self.query(hir::db::MacroArgQuery).sweep(sweep); diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index d1a452ecb..4f19b01c4 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -5,7 +5,7 @@ use std::{ use ra_db::{ CheckCanceled, FileId, Canceled, SourceDatabase, - salsa, + salsa::{self, Database}, }; use crate::{LineIndex, symbol_index::{self, SymbolsDatabase}}; @@ -49,6 +49,8 @@ impl Default for RootDatabase { db.set_crate_graph(Default::default()); db.set_local_roots(Default::default()); db.set_library_roots(Default::default()); + db.query_mut(ra_db::ParseQuery).set_lru_capacity(128); + db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(128); db } } -- cgit v1.2.3 From 15668119de40b97011a1f2e2d065d11f25a5833a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 7 Jun 2019 12:46:49 +0300 Subject: make LRU_CAP configurable for batch db --- crates/ra_ide_api/src/db.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide_api/src') diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index 4f19b01c4..cccf0ada4 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -49,8 +49,9 @@ impl Default for RootDatabase { db.set_crate_graph(Default::default()); db.set_local_roots(Default::default()); db.set_library_roots(Default::default()); - db.query_mut(ra_db::ParseQuery).set_lru_capacity(128); - db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(128); + let lru_cap = ra_db::DEFAULT_LRU_CAP; + db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_cap); + db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(lru_cap); db } } -- cgit v1.2.3 From fed52706def9a9f5d33edc7dd9848a02ae475ba5 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 7 Jun 2019 20:49:29 +0300 Subject: make LRU cache configurable --- crates/ra_ide_api/src/db.rs | 12 +++++++++--- crates/ra_ide_api/src/lib.rs | 11 ++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'crates/ra_ide_api/src') diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index cccf0ada4..b3f395502 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -41,6 +41,12 @@ impl salsa::Database for RootDatabase { impl Default for RootDatabase { fn default() -> RootDatabase { + RootDatabase::new(None) + } +} + +impl RootDatabase { + pub fn new(lru_capacity: Option) -> RootDatabase { let mut db = RootDatabase { runtime: salsa::Runtime::default(), last_gc: time::Instant::now(), @@ -49,9 +55,9 @@ impl Default for RootDatabase { db.set_crate_graph(Default::default()); db.set_local_roots(Default::default()); db.set_library_roots(Default::default()); - let lru_cap = ra_db::DEFAULT_LRU_CAP; - db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_cap); - db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(lru_cap); + let lru_capacity = lru_capacity.unwrap_or(ra_db::DEFAULT_LRU_CAP); + db.query_mut(ra_db::ParseQuery).set_lru_capacity(lru_capacity); + db.query_mut(hir::db::ParseMacroQuery).set_lru_capacity(lru_capacity); db } } diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index dbebf50a6..8741e736f 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -242,12 +242,21 @@ pub struct CallInfo { } /// `AnalysisHost` stores the current state of the world. -#[derive(Debug, Default)] +#[derive(Debug)] pub struct AnalysisHost { db: db::RootDatabase, } +impl Default for AnalysisHost { + fn default() -> AnalysisHost { + AnalysisHost::new(None) + } +} + impl AnalysisHost { + pub fn new(lru_capcity: Option) -> AnalysisHost { + AnalysisHost { db: db::RootDatabase::new(lru_capcity) } + } /// Returns a snapshot of the current state, which you can query for /// semantic information. pub fn analysis(&self) -> Analysis { -- cgit v1.2.3