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 From f01e7e3601423e176e16c66aebbe6aca541a5731 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Fri, 3 Jul 2020 17:16:01 +0200 Subject: Track VFS and remaining/unaccounted memory --- crates/rust-analyzer/src/cli/analysis_stats.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'crates') diff --git a/crates/rust-analyzer/src/cli/analysis_stats.rs b/crates/rust-analyzer/src/cli/analysis_stats.rs index 14982919d..846264046 100644 --- a/crates/rust-analyzer/src/cli/analysis_stats.rs +++ b/crates/rust-analyzer/src/cli/analysis_stats.rs @@ -273,12 +273,22 @@ pub fn analysis_stats( println!("Total: {:?}, {}", analysis_time.elapsed(), ra_prof::memory_usage()); if memory_usage { - for (name, bytes) in host.per_query_memory_usage() { - println!("{:>8} {}", bytes, name) - } + let mut mem = host.per_query_memory_usage(); + + let before = ra_prof::memory_usage(); + drop(vfs); + let vfs = before.allocated - ra_prof::memory_usage().allocated; + mem.push(("VFS".into(), vfs)); + let before = ra_prof::memory_usage(); drop(host); - println!("leftover: {}", before.allocated - ra_prof::memory_usage().allocated) + mem.push(("Unaccounted".into(), before.allocated - ra_prof::memory_usage().allocated)); + + mem.push(("Remaining".into(), ra_prof::memory_usage().allocated)); + + for (name, bytes) in mem { + println!("{:>8} {}", bytes, name) + } } Ok(()) -- cgit v1.2.3