mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-13 12:36:47 +00:00
Merge #5209
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:
commit
0f68fed4a0
@ -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
|
||||
}
|
||||
|
@ -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(())
|
||||
|
Loading…
Reference in New Issue
Block a user