Skip to content

Commit cb160f2

Browse files
bors[bot]michalt
andauthored
Merge #2742
2742: Split `infer` query into two for better profiling r=flodiebold a=michalt This is the same change as we did with `crate_def_map` and it does seem that we mostly spend time in salsa, without recomputing much on rust-analyzer side. Example output: ``` 233ms - handle_inlay_hints 163ms - get_inlay_hints 163ms - SourceAnalyzer::new 67ms - def_with_body_from_child_node 67ms - analyze_container 67ms - analyze_container 67ms - Module::from_definition 67ms - Module::from_file 67ms - crate_def_map 0ms - parse_macro_query (6 calls) 0ms - raw_items_query (1 calls) 66ms - ??? 0ms - crate_def_map (1 calls) 0ms - crate_def_map (1 calls) 96ms - infer 2ms - trait_solve_query (2 calls) 94ms - ??? 0ms - body_with_source_map_query (1 calls) 0ms - crate_def_map (1 calls) [...] ``` Signed-off-by: Michal Terepeta <[email protected]> Co-authored-by: Michal Terepeta <[email protected]>
2 parents 1a18fe2 + d6c2a59 commit cb160f2

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

crates/ra_hir/src/db.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ pub use hir_expand::db::{
1212
ParseMacroQuery,
1313
};
1414
pub use hir_ty::db::{
15-
AssociatedTyDataQuery, CallableItemSignatureQuery, FieldTypesQuery, GenericDefaultsQuery,
16-
GenericPredicatesQuery, HirDatabase, HirDatabaseStorage, ImplDatumQuery, ImplsForTraitQuery,
17-
ImplsInCrateQuery, InferQuery, StructDatumQuery, TraitDatumQuery, TraitSolveQuery, TyQuery,
18-
ValueTyQuery,
15+
AssociatedTyDataQuery, CallableItemSignatureQuery, DoInferQuery, FieldTypesQuery,
16+
GenericDefaultsQuery, GenericPredicatesQuery, HirDatabase, HirDatabaseStorage, ImplDatumQuery,
17+
ImplsForTraitQuery, ImplsInCrateQuery, StructDatumQuery, TraitDatumQuery, TraitSolveQuery,
18+
TyQuery, ValueTyQuery,
1919
};
2020

2121
#[test]

crates/ra_hir_ty/src/db.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use hir_def::{
77
};
88
use ra_arena::map::ArenaMap;
99
use ra_db::{salsa, CrateId};
10+
use ra_prof::profile;
1011

1112
use crate::{
1213
method_resolution::CrateImplBlocks,
@@ -18,9 +19,12 @@ use crate::{
1819
#[salsa::query_group(HirDatabaseStorage)]
1920
#[salsa::requires(salsa::Database)]
2021
pub trait HirDatabase: DefDatabase {
21-
#[salsa::invoke(crate::infer_query)]
22+
#[salsa::transparent]
2223
fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
2324

25+
#[salsa::invoke(crate::do_infer_query)]
26+
fn do_infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
27+
2428
#[salsa::invoke(crate::lower::ty_query)]
2529
#[salsa::cycle(crate::lower::ty_recover)]
2630
fn ty(&self, def: TyDefId) -> Ty;
@@ -104,6 +108,11 @@ pub trait HirDatabase: DefDatabase {
104108
) -> Option<crate::traits::Solution>;
105109
}
106110

111+
fn infer(db: &impl HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {
112+
let _p = profile("infer");
113+
db.do_infer(def)
114+
}
115+
107116
#[test]
108117
fn hir_database_is_object_safe() {
109118
fn _assert_object_safe(_: &dyn HirDatabase) {}

crates/ra_hir_ty/src/infer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ mod pat;
6262
mod coerce;
6363

6464
/// The entry point of type inference.
65-
pub fn infer_query(db: &impl HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {
66-
let _p = profile("infer_query");
65+
pub fn do_infer_query(db: &impl HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {
66+
let _p = profile("do_infer");
6767
let resolver = def.resolver(db);
6868
let mut ctx = InferenceContext::new(db, def, resolver);
6969

crates/ra_hir_ty/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ use crate::{
5858
use display::{HirDisplay, HirFormatter};
5959

6060
pub use autoderef::autoderef;
61-
pub use infer::{infer_query, InferTy, InferenceResult};
61+
pub use infer::{do_infer_query, InferTy, InferenceResult};
6262
pub use lower::CallableDef;
6363
pub use lower::{callable_item_sig, TyDefId, ValueTyDefId};
6464
pub use traits::{InEnvironment, Obligation, ProjectionPredicate, TraitEnvironment};

crates/ra_ide/src/change.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ impl RootDatabase {
273273
self.query(hir::db::BodyWithSourceMapQuery).sweep(sweep);
274274

275275
self.query(hir::db::ExprScopesQuery).sweep(sweep);
276-
self.query(hir::db::InferQuery).sweep(sweep);
276+
self.query(hir::db::DoInferQuery).sweep(sweep);
277277
self.query(hir::db::BodyQuery).sweep(sweep);
278278
}
279279

@@ -320,7 +320,7 @@ impl RootDatabase {
320320
hir::db::LangItemQuery
321321
hir::db::DocumentationQuery
322322
hir::db::ExprScopesQuery
323-
hir::db::InferQuery
323+
hir::db::DoInferQuery
324324
hir::db::TyQuery
325325
hir::db::ValueTyQuery
326326
hir::db::FieldTypesQuery

0 commit comments

Comments
 (0)