print memory usage for queries

This commit is contained in:
Aleksey Kladov 2019-06-30 14:40:01 +03:00
parent 2ad8220f58
commit d70520eb38
7 changed files with 101 additions and 13 deletions

View file

@ -9,7 +9,7 @@ use ra_db::{
salsa::{Database, SweepStrategy},
};
use ra_syntax::SourceFile;
use ra_prof::profile;
use ra_prof::{profile, Bytes, memory_usage};
use relative_path::RelativePathBuf;
use rayon::prelude::*;
@ -243,4 +243,65 @@ impl RootDatabase {
self.query(hir::db::InferQuery).sweep(sweep);
self.query(hir::db::BodyHirQuery).sweep(sweep);
}
pub(crate) fn per_query_memory_usage(&mut self) -> Vec<(String, Bytes)> {
let mut acc: Vec<(String, Bytes)> = vec![];
let sweep = SweepStrategy::default().discard_values().sweep_all_revisions();
macro_rules! sweep_each_query {
($($q:path)*) => {$(
let before = memory_usage().allocated;
self.query($q).sweep(sweep);
let after = memory_usage().allocated;
let q: $q = Default::default();
let name = format!("{:?}", q);
acc.push((name, before - after));
)*}
}
sweep_each_query![
ra_db::ParseQuery
ra_db::SourceRootCratesQuery
hir::db::AstIdMapQuery
hir::db::ParseMacroQuery
hir::db::MacroDefQuery
hir::db::MacroArgQuery
hir::db::MacroExpandQuery
hir::db::StructDataQuery
hir::db::EnumDataQuery
hir::db::TraitDataQuery
hir::db::TraitItemsIndexQuery
hir::db::RawItemsQuery
hir::db::RawItemsWithSourceMapQuery
hir::db::CrateDefMapQuery
hir::db::ImplsInModuleQuery
hir::db::ImplsInModuleWithSourceMapQuery
hir::db::GenericParamsQuery
hir::db::FnDataQuery
hir::db::TypeAliasDataQuery
hir::db::ConstDataQuery
hir::db::StaticDataQuery
hir::db::ModuleLangItemsQuery
hir::db::LangItemsQuery
hir::db::LangItemQuery
hir::db::DocumentationQuery
hir::db::ExprScopesQuery
hir::db::InferQuery
hir::db::TypeForDefQuery
hir::db::TypeForFieldQuery
hir::db::CallableItemSignatureQuery
hir::db::GenericPredicatesQuery
hir::db::GenericDefaultsQuery
hir::db::BodyWithSourceMapQuery
hir::db::BodyHirQuery
hir::db::ImplsInCrateQuery
hir::db::ImplsForTraitQuery
hir::db::AssociatedTyDataQuery
hir::db::TraitDatumQuery
hir::db::StructDatumQuery
hir::db::ImplDatumQuery
hir::db::ImplementsQuery
hir::db::NormalizeQuery
];
acc.sort_by_key(|it| std::cmp::Reverse(it.1));
acc
}
}