Skip to content

Commit 7cd6f12

Browse files
committed
Split crate_def_map into two methods
This change: - introduces `compute_crate_def_map` query and renames `CrateDefMap::crate_def_map_query` for consistency, - annotates `crate_def_map` as `salsa::transparent` and adds a top-level `crate_def_map` wrapper function around that starts the profiler and immediately calls into `compute_crate_def_map` query. This allows us to better understand where we spent the time, in particular, how much is spent in the recomputaiton and how much in salsa. Example output (where we don't actually re-compute anything, but the query still takes a non-trivial amount of time): ``` 211ms - handle_inlay_hints 150ms - get_inlay_hints 150ms - SourceAnalyzer::new 65ms - def_with_body_from_child_node 65ms - analyze_container 65ms - analyze_container 65ms - Module::from_definition 65ms - Module::from_file 65ms - crate_def_map 1ms - parse_macro_query (6 calls) 0ms - raw_items_query (1 calls) 64ms - ??? ``` Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
1 parent e423cfe commit 7cd6f12

File tree

4 files changed

+18
-9
lines changed

4 files changed

+18
-9
lines changed

crates/ra_hir/src/db.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
//! FIXME: write short doc here
22
33
pub use hir_def::db::{
4-
BodyQuery, BodyWithSourceMapQuery, ConstDataQuery, CrateDefMapQuery, CrateLangItemsQuery,
5-
DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery, ExprScopesQuery,
6-
FunctionDataQuery, GenericParamsQuery, ImplDataQuery, InternDatabase, InternDatabaseStorage,
7-
LangItemQuery, ModuleLangItemsQuery, RawItemsQuery, StaticDataQuery, StructDataQuery,
8-
TraitDataQuery, TypeAliasDataQuery,
4+
BodyQuery, BodyWithSourceMapQuery, ComputeCrateDefMapQuery, ConstDataQuery,
5+
CrateLangItemsQuery, DefDatabase, DefDatabaseStorage, DocumentationQuery, EnumDataQuery,
6+
ExprScopesQuery, FunctionDataQuery, GenericParamsQuery, ImplDataQuery, InternDatabase,
7+
InternDatabaseStorage, LangItemQuery, ModuleLangItemsQuery, RawItemsQuery, StaticDataQuery,
8+
StructDataQuery, TraitDataQuery, TypeAliasDataQuery,
99
};
1010
pub use hir_expand::db::{
1111
AstDatabase, AstDatabaseStorage, AstIdMapQuery, MacroArgQuery, MacroDefQuery, MacroExpandQuery,

crates/ra_hir_def/src/db.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::sync::Arc;
33

44
use hir_expand::{db::AstDatabase, HirFileId};
55
use ra_db::{salsa, CrateId, SourceDatabase};
6+
use ra_prof::profile;
67
use ra_syntax::SmolStr;
78

89
use crate::{
@@ -46,9 +47,12 @@ pub trait DefDatabase: InternDatabase + AstDatabase {
4647
#[salsa::invoke(RawItems::raw_items_query)]
4748
fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>;
4849

49-
#[salsa::invoke(CrateDefMap::crate_def_map_query)]
50+
#[salsa::transparent]
5051
fn crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>;
5152

53+
#[salsa::invoke(CrateDefMap::compute_crate_def_map)]
54+
fn compute_crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>;
55+
5256
#[salsa::invoke(StructData::struct_data_query)]
5357
fn struct_data(&self, id: StructId) -> Arc<StructData>;
5458
#[salsa::invoke(StructData::union_data_query)]
@@ -104,3 +108,8 @@ pub trait DefDatabase: InternDatabase + AstDatabase {
104108
#[salsa::invoke(Documentation::documentation_query)]
105109
fn documentation(&self, def: AttrDefId) -> Option<Documentation>;
106110
}
111+
112+
fn crate_def_map(db: &impl DefDatabase, krate: CrateId) -> Arc<CrateDefMap> {
113+
let _p = profile("crate_def_map");
114+
db.compute_crate_def_map(krate)
115+
}

crates/ra_hir_def/src/nameres.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,13 @@ pub struct ModuleData {
172172
}
173173

174174
impl CrateDefMap {
175-
pub(crate) fn crate_def_map_query(
175+
pub(crate) fn compute_crate_def_map(
176176
// Note that this doesn't have `+ AstDatabase`!
177177
// This gurantess that `CrateDefMap` is stable across reparses.
178178
db: &impl DefDatabase,
179179
krate: CrateId,
180180
) -> Arc<CrateDefMap> {
181-
let _p = profile("crate_def_map_query");
181+
let _p = profile("compute_crate_def_map");
182182
let def_map = {
183183
let crate_graph = db.crate_graph();
184184
let edition = crate_graph.edition(krate);

crates/ra_ide/src/change.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ impl RootDatabase {
309309
hir::db::EnumDataQuery
310310
hir::db::TraitDataQuery
311311
hir::db::RawItemsQuery
312-
hir::db::CrateDefMapQuery
312+
hir::db::ComputeCrateDefMapQuery
313313
hir::db::GenericParamsQuery
314314
hir::db::FunctionDataQuery
315315
hir::db::TypeAliasDataQuery

0 commit comments

Comments
 (0)