From 93d0ac7fa0a5a9548ac07e22ac14eee46550172c Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Fri, 3 Jul 2020 17:12:29 +0200 Subject: Fix memory usage accounting for interned queries --- crates/ra_ide_db/src/change.rs | 47 +++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'crates') diff --git a/crates/ra_ide_db/src/change.rs b/crates/ra_ide_db/src/change.rs index dbe6eacc5..2504d7a33 100644 --- a/crates/ra_ide_db/src/change.rs +++ b/crates/ra_ide_db/src/change.rs @@ -191,12 +191,10 @@ impl RootDatabase { // AstDatabase hir::db::AstIdMapQuery - hir::db::InternMacroQuery hir::db::MacroArgQuery hir::db::MacroDefQuery hir::db::ParseMacroQuery hir::db::MacroExpandQuery - hir::db::InternEagerExpansionQuery // DefDatabase hir::db::ItemTreeQuery @@ -221,17 +219,6 @@ impl RootDatabase { hir::db::DocumentationQuery hir::db::ImportMapQuery - // InternDatabase - hir::db::InternFunctionQuery - hir::db::InternStructQuery - hir::db::InternUnionQuery - hir::db::InternEnumQuery - hir::db::InternConstQuery - hir::db::InternStaticQuery - hir::db::InternTraitQuery - hir::db::InternTypeAliasQuery - hir::db::InternImplQuery - // HirDatabase hir::db::InferQueryQuery hir::db::TyQuery @@ -246,10 +233,6 @@ impl RootDatabase { hir::db::InherentImplsInCrateQuery hir::db::TraitImplsInCrateQuery hir::db::TraitImplsInDepsQuery - hir::db::InternTypeCtorQuery - hir::db::InternTypeParamIdQuery - hir::db::InternChalkImplQuery - hir::db::InternAssocTyValueQuery hir::db::AssociatedTyDataQuery hir::db::TraitDatumQuery hir::db::StructDatumQuery @@ -264,6 +247,36 @@ impl RootDatabase { // LineIndexDatabase 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.runtime.synthetic_write(Durability::HIGH); + + sweep_each_query![ + // AstDatabase + hir::db::InternMacroQuery + hir::db::InternEagerExpansionQuery + + // InternDatabase + hir::db::InternFunctionQuery + hir::db::InternStructQuery + hir::db::InternUnionQuery + hir::db::InternEnumQuery + hir::db::InternConstQuery + hir::db::InternStaticQuery + hir::db::InternTraitQuery + hir::db::InternTypeAliasQuery + hir::db::InternImplQuery + + // HirDatabase + hir::db::InternTypeCtorQuery + hir::db::InternTypeParamIdQuery + hir::db::InternChalkImplQuery + hir::db::InternAssocTyValueQuery + ]; + acc.sort_by_key(|it| std::cmp::Reverse(it.1)); acc } -- cgit v1.2.3