aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/db.rs
diff options
context:
space:
mode:
authorMichal Terepeta <[email protected]>2020-01-03 16:02:08 +0000
committerMichal Terepeta <[email protected]>2020-01-03 18:58:11 +0000
commitd6c2a59538c83b6141f7ab9596a9fde64f94c116 (patch)
tree77ce23e02956f78d7f9efe1a4eb6a7515ae3344c /crates/ra_hir_ty/src/db.rs
parent15d94cbffcb07fa910d715b2acef88109ae24d39 (diff)
Split `infer` query into two for better profiling
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]>
Diffstat (limited to 'crates/ra_hir_ty/src/db.rs')
-rw-r--r--crates/ra_hir_ty/src/db.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/crates/ra_hir_ty/src/db.rs b/crates/ra_hir_ty/src/db.rs
index d52f65b83..eb521c7a0 100644
--- a/crates/ra_hir_ty/src/db.rs
+++ b/crates/ra_hir_ty/src/db.rs
@@ -7,6 +7,7 @@ use hir_def::{
7}; 7};
8use ra_arena::map::ArenaMap; 8use ra_arena::map::ArenaMap;
9use ra_db::{salsa, CrateId}; 9use ra_db::{salsa, CrateId};
10use ra_prof::profile;
10 11
11use crate::{ 12use crate::{
12 method_resolution::CrateImplBlocks, 13 method_resolution::CrateImplBlocks,
@@ -18,9 +19,12 @@ use crate::{
18#[salsa::query_group(HirDatabaseStorage)] 19#[salsa::query_group(HirDatabaseStorage)]
19#[salsa::requires(salsa::Database)] 20#[salsa::requires(salsa::Database)]
20pub trait HirDatabase: DefDatabase { 21pub trait HirDatabase: DefDatabase {
21 #[salsa::invoke(crate::infer_query)] 22 #[salsa::transparent]
22 fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>; 23 fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
23 24
25 #[salsa::invoke(crate::do_infer_query)]
26 fn do_infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
27
24 #[salsa::invoke(crate::lower::ty_query)] 28 #[salsa::invoke(crate::lower::ty_query)]
25 #[salsa::cycle(crate::lower::ty_recover)] 29 #[salsa::cycle(crate::lower::ty_recover)]
26 fn ty(&self, def: TyDefId) -> Ty; 30 fn ty(&self, def: TyDefId) -> Ty;
@@ -104,6 +108,11 @@ pub trait HirDatabase: DefDatabase {
104 ) -> Option<crate::traits::Solution>; 108 ) -> Option<crate::traits::Solution>;
105} 109}
106 110
111fn infer(db: &impl HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {
112 let _p = profile("infer");
113 db.do_infer(def)
114}
115
107#[test] 116#[test]
108fn hir_database_is_object_safe() { 117fn hir_database_is_object_safe() {
109 fn _assert_object_safe(_: &dyn HirDatabase) {} 118 fn _assert_object_safe(_: &dyn HirDatabase) {}