aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/db.rs
diff options
context:
space:
mode:
authorMichal Terepeta <[email protected]>2020-01-03 12:59:46 +0000
committerMichal Terepeta <[email protected]>2020-01-03 12:59:46 +0000
commit7cd6f12926295476d162e21e315ee72671985cd2 (patch)
tree56f4a050e3c9b57d829a7ff9998a939bee4cd480 /crates/ra_hir_def/src/db.rs
parente423cfe383a4a1f9f0b5459810587d50bf2a2b2d (diff)
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 <[email protected]>
Diffstat (limited to 'crates/ra_hir_def/src/db.rs')
-rw-r--r--crates/ra_hir_def/src/db.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/crates/ra_hir_def/src/db.rs b/crates/ra_hir_def/src/db.rs
index c55fd4111..a348f37bc 100644
--- a/crates/ra_hir_def/src/db.rs
+++ b/crates/ra_hir_def/src/db.rs
@@ -3,6 +3,7 @@ use std::sync::Arc;
3 3
4use hir_expand::{db::AstDatabase, HirFileId}; 4use hir_expand::{db::AstDatabase, HirFileId};
5use ra_db::{salsa, CrateId, SourceDatabase}; 5use ra_db::{salsa, CrateId, SourceDatabase};
6use ra_prof::profile;
6use ra_syntax::SmolStr; 7use ra_syntax::SmolStr;
7 8
8use crate::{ 9use crate::{
@@ -46,9 +47,12 @@ pub trait DefDatabase: InternDatabase + AstDatabase {
46 #[salsa::invoke(RawItems::raw_items_query)] 47 #[salsa::invoke(RawItems::raw_items_query)]
47 fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>; 48 fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>;
48 49
49 #[salsa::invoke(CrateDefMap::crate_def_map_query)] 50 #[salsa::transparent]
50 fn crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>; 51 fn crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>;
51 52
53 #[salsa::invoke(CrateDefMap::compute_crate_def_map)]
54 fn compute_crate_def_map(&self, krate: CrateId) -> Arc<CrateDefMap>;
55
52 #[salsa::invoke(StructData::struct_data_query)] 56 #[salsa::invoke(StructData::struct_data_query)]
53 fn struct_data(&self, id: StructId) -> Arc<StructData>; 57 fn struct_data(&self, id: StructId) -> Arc<StructData>;
54 #[salsa::invoke(StructData::union_data_query)] 58 #[salsa::invoke(StructData::union_data_query)]
@@ -104,3 +108,8 @@ pub trait DefDatabase: InternDatabase + AstDatabase {
104 #[salsa::invoke(Documentation::documentation_query)] 108 #[salsa::invoke(Documentation::documentation_query)]
105 fn documentation(&self, def: AttrDefId) -> Option<Documentation>; 109 fn documentation(&self, def: AttrDefId) -> Option<Documentation>;
106} 110}
111
112fn 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}