5209: Fixes to memory usage stats r=matklad a=jonas-schievink

This brings the unaccounted memory down from 287mb to 250mb, and displays memory used by VFS and "other" allocations.

Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
This commit is contained in:
bors[bot] 2020-07-03 15:58:46 +00:00 committed by GitHub
commit 0f68fed4a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 21 deletions

View File

@ -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
}

View File

@ -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(())