Update salsa

This commit is contained in:
Jonas Schievink 2021-10-06 22:42:54 +02:00
parent 86c534f244
commit cda9668289
5 changed files with 13 additions and 70 deletions

8
Cargo.lock generated
View file

@ -1379,9 +1379,9 @@ checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]] [[package]]
name = "salsa" name = "salsa"
version = "0.17.0-pre.1" version = "0.17.0-pre.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58038261ea8cd5a7730c4d8c97a22063d7c7eb1c2809e55c3c15f0a5903e5582" checksum = "9b223dccb46c32753144d0b51290da7230bb4aedcd8379d6b4c9a474c18bf17a"
dependencies = [ dependencies = [
"crossbeam-utils", "crossbeam-utils",
"indexmap", "indexmap",
@ -1396,9 +1396,9 @@ dependencies = [
[[package]] [[package]]
name = "salsa-macros" name = "salsa-macros"
version = "0.17.0-pre.1" version = "0.17.0-pre.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e2fc060627fa5d44bffac98f6089b9497779e2deccc26687f60adc2638e32fb" checksum = "ac6c2e352df550bf019da7b16164ed2f7fa107c39653d1311d1bba42d1582ff7"
dependencies = [ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",

View file

@ -9,7 +9,7 @@ edition = "2018"
doctest = false doctest = false
[dependencies] [dependencies]
salsa = "0.17.0-pre.1" salsa = "0.17.0-pre.2"
rustc-hash = "1.1.0" rustc-hash = "1.1.0"
syntax = { path = "../syntax", version = "0.0.0" } syntax = { path = "../syntax", version = "0.0.0" }

View file

@ -1,6 +1,6 @@
use std::sync::Arc; use std::sync::Arc;
use base_db::{salsa::SweepStrategy, SourceDatabaseExt}; use base_db::SourceDatabaseExt;
use crate::{AdtId, ModuleDefId}; use crate::{AdtId, ModuleDefId};
@ -199,8 +199,7 @@ pub type Ty = ();
} }
// Delete the parse tree. // Delete the parse tree.
let sweep = SweepStrategy::default().discard_values().sweep_all_revisions(); base_db::ParseQuery.in_db(&db).purge();
base_db::ParseQuery.in_db(&db).sweep(sweep);
{ {
let events = db.log_executed(|| { let events = db.log_executed(|| {

View file

@ -160,9 +160,6 @@ impl AnalysisHost {
self.db.apply_change(change) self.db.apply_change(change)
} }
pub fn collect_garbage(&mut self) {
self.db.collect_garbage();
}
/// NB: this clears the database /// NB: this clears the database
pub fn per_query_memory_usage(&mut self) -> Vec<(String, profile::Bytes)> { pub fn per_query_memory_usage(&mut self) -> Vec<(String, profile::Bytes)> {
self.db.per_query_memory_usage() self.db.per_query_memory_usage()

View file

@ -3,7 +3,7 @@
use std::sync::Arc; use std::sync::Arc;
use base_db::{ use base_db::{
salsa::{Database, Durability, SweepStrategy}, salsa::{Database, Durability},
Change, SourceRootId, Change, SourceRootId,
}; };
use profile::{memory_usage, Bytes}; use profile::{memory_usage, Bytes};
@ -38,32 +38,6 @@ impl RootDatabase {
change.apply(self); change.apply(self);
} }
pub fn collect_garbage(&mut self) {
if cfg!(target_arch = "wasm32") {
return;
}
let _p = profile::span("RootDatabase::collect_garbage");
let sweep = SweepStrategy::default().discard_values().sweep_all_revisions();
base_db::ParseQuery.in_db(self).sweep(sweep);
hir::db::ParseMacroExpansionQuery.in_db(self).sweep(sweep);
// Macros do take significant space, but less then the syntax trees
// self.query(hir::db::MacroDefQuery).sweep(sweep);
// self.query(hir::db::MacroArgTextQuery).sweep(sweep);
// self.query(hir::db::MacroExpandQuery).sweep(sweep);
hir::db::AstIdMapQuery.in_db(self).sweep(sweep);
hir::db::BodyWithSourceMapQuery.in_db(self).sweep(sweep);
hir::db::ExprScopesQuery.in_db(self).sweep(sweep);
hir::db::InferQueryQuery.in_db(self).sweep(sweep);
hir::db::BodyQuery.in_db(self).sweep(sweep);
}
// Feature: Memory Usage // Feature: Memory Usage
// //
// Clears rust-analyzer's internal database and prints memory usage statistics. // Clears rust-analyzer's internal database and prints memory usage statistics.
@ -76,32 +50,17 @@ impl RootDatabase {
// image::https://user-images.githubusercontent.com/48062697/113065592-08559f00-91b1-11eb-8c96-64b88068ec02.gif[] // image::https://user-images.githubusercontent.com/48062697/113065592-08559f00-91b1-11eb-8c96-64b88068ec02.gif[]
pub fn per_query_memory_usage(&mut self) -> Vec<(String, Bytes)> { pub fn per_query_memory_usage(&mut self) -> Vec<(String, Bytes)> {
let mut acc: Vec<(String, Bytes)> = vec![]; let mut acc: Vec<(String, Bytes)> = vec![];
let sweep = SweepStrategy::default().discard_values().sweep_all_revisions(); macro_rules! purge_each_query {
macro_rules! sweep_each_query {
($($q:path)*) => {$( ($($q:path)*) => {$(
let before = memory_usage().allocated;
$q.in_db(self).sweep(sweep);
let after = memory_usage().allocated;
let q: $q = Default::default();
let name = format!("{:?}", q);
acc.push((name, before - after));
let before = memory_usage().allocated;
$q.in_db(self).sweep(sweep.discard_everything());
let after = memory_usage().allocated;
let q: $q = Default::default();
let name = format!("{:?} (deps)", q);
acc.push((name, before - after));
let before = memory_usage().allocated; let before = memory_usage().allocated;
$q.in_db(self).purge(); $q.in_db(self).purge();
let after = memory_usage().allocated; let after = memory_usage().allocated;
let q: $q = Default::default(); let q: $q = Default::default();
let name = format!("{:?} (purge)", q); let name = format!("{:?}", q);
acc.push((name, before - after)); acc.push((name, before - after));
)*} )*}
} }
sweep_each_query![ purge_each_query![
// SourceDatabase // SourceDatabase
base_db::ParseQuery base_db::ParseQuery
base_db::CrateGraphQuery base_db::CrateGraphQuery
@ -119,6 +78,7 @@ impl RootDatabase {
hir::db::ParseMacroExpansionQuery hir::db::ParseMacroExpansionQuery
hir::db::MacroExpandQuery hir::db::MacroExpandQuery
hir::db::HygieneFrameQuery hir::db::HygieneFrameQuery
hir::db::InternMacroQuery
// DefDatabase // DefDatabase
hir::db::FileItemTreeQuery hir::db::FileItemTreeQuery
@ -174,6 +134,7 @@ impl RootDatabase {
hir::db::InternClosureQuery hir::db::InternClosureQuery
hir::db::AssociatedTyValueQuery hir::db::AssociatedTyValueQuery
hir::db::TraitSolveQueryQuery hir::db::TraitSolveQueryQuery
hir::db::InternTypeParamIdQuery
// SymbolsDatabase // SymbolsDatabase
crate::symbol_index::FileSymbolsQuery crate::symbol_index::FileSymbolsQuery
@ -183,17 +144,6 @@ impl RootDatabase {
// LineIndexDatabase // LineIndexDatabase
crate::LineIndexQuery crate::LineIndexQuery
];
// To collect interned data, we need to bump the revision counter by performing a synthetic
// write.
// We do this after collecting the non-interned queries to correctly attribute memory used
// by interned data.
self.salsa_runtime_mut().synthetic_write(Durability::HIGH);
sweep_each_query![
// AstDatabase
hir::db::InternMacroQuery
// InternDatabase // InternDatabase
hir::db::InternFunctionQuery hir::db::InternFunctionQuery
@ -205,9 +155,6 @@ impl RootDatabase {
hir::db::InternTraitQuery hir::db::InternTraitQuery
hir::db::InternTypeAliasQuery hir::db::InternTypeAliasQuery
hir::db::InternImplQuery hir::db::InternImplQuery
// HirDatabase
hir::db::InternTypeParamIdQuery
]; ];
acc.sort_by_key(|it| std::cmp::Reverse(it.1)); acc.sort_by_key(|it| std::cmp::Reverse(it.1));