Skip to content

Commit a3b6e89

Browse files
committed
Add tracing spans to macro generated database
1 parent 52d8ae7 commit a3b6e89

File tree

12 files changed

+78
-128
lines changed

12 files changed

+78
-128
lines changed

crates/hir-def/src/attr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ impl AttrsWithOwner {
348348
.raw_attrs(AttrOwner::ModItem(definition_tree_id.value.into()))
349349
.clone(),
350350
ModuleOrigin::BlockExpr { id, .. } => {
351-
let tree = db.block_item_tree_query(id);
351+
let tree = db.block_item_tree(id);
352352
tree.raw_attrs(AttrOwner::TopLevel).clone()
353353
}
354354
}

crates/hir-def/src/db.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,10 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + Upcast<dyn ExpandDataba
8787
fn file_item_tree(&self, file_id: HirFileId) -> Arc<ItemTree>;
8888

8989
#[salsa::invoke(ItemTree::block_item_tree_query)]
90-
fn block_item_tree_query(&self, block_id: BlockId) -> Arc<ItemTree>;
91-
92-
#[salsa::invoke(crate_def_map_wait)]
93-
#[salsa::transparent]
94-
fn crate_def_map(&self, krate: CrateId) -> Arc<DefMap>;
90+
fn block_item_tree(&self, block_id: BlockId) -> Arc<ItemTree>;
9591

9692
#[salsa::invoke(DefMap::crate_def_map_query)]
97-
fn crate_def_map_query(&self, krate: CrateId) -> Arc<DefMap>;
93+
fn crate_def_map(&self, krate: CrateId) -> Arc<DefMap>;
9894

9995
/// Computes the block-level `DefMap`.
10096
#[salsa::invoke(DefMap::block_def_map_query)]
@@ -253,11 +249,6 @@ fn include_macro_invoc(db: &dyn DefDatabase, krate: CrateId) -> Vec<(MacroCallId
253249
.collect()
254250
}
255251

256-
fn crate_def_map_wait(db: &dyn DefDatabase, krate: CrateId) -> Arc<DefMap> {
257-
let _p = tracing::span!(tracing::Level::INFO, "crate_def_map:wait").entered();
258-
db.crate_def_map_query(krate)
259-
}
260-
261252
fn crate_supports_no_std(db: &dyn DefDatabase, crate_id: CrateId) -> bool {
262253
let file = db.crate_graph()[crate_id].root_file_id;
263254
let item_tree = db.file_item_tree(file.into());

crates/hir-def/src/item_tree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ impl TreeId {
392392

393393
pub(crate) fn item_tree(&self, db: &dyn DefDatabase) -> Arc<ItemTree> {
394394
match self.block {
395-
Some(block) => db.block_item_tree_query(block),
395+
Some(block) => db.block_item_tree(block),
396396
None => db.file_item_tree(self.file),
397397
}
398398
}

crates/hir-ty/src/db.rs

Lines changed: 2 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,8 @@ use hir_expand::name::Name;
3131

3232
#[salsa::query_group(HirDatabaseStorage)]
3333
pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
34-
#[salsa::invoke(infer_wait)]
35-
#[salsa::transparent]
36-
fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
37-
3834
#[salsa::invoke(crate::infer::infer_query)]
39-
fn infer_query(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
35+
fn infer(&self, def: DefWithBodyId) -> Arc<InferenceResult>;
4036

4137
// region:mir
4238

@@ -258,17 +254,8 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
258254
env: Arc<TraitEnvironment>,
259255
) -> Ty;
260256

261-
#[salsa::invoke(trait_solve_wait)]
262-
#[salsa::transparent]
263-
fn trait_solve(
264-
&self,
265-
krate: CrateId,
266-
block: Option<BlockId>,
267-
goal: crate::Canonical<crate::InEnvironment<crate::Goal>>,
268-
) -> Option<crate::Solution>;
269-
270257
#[salsa::invoke(crate::traits::trait_solve_query)]
271-
fn trait_solve_query(
258+
fn trait_solve(
272259
&self,
273260
krate: CrateId,
274261
block: Option<BlockId>,
@@ -284,38 +271,6 @@ pub trait HirDatabase: DefDatabase + Upcast<dyn DefDatabase> {
284271
) -> chalk_ir::ProgramClauses<Interner>;
285272
}
286273

287-
fn infer_wait(db: &dyn HirDatabase, def: DefWithBodyId) -> Arc<InferenceResult> {
288-
let detail = match def {
289-
DefWithBodyId::FunctionId(it) => db.function_data(it).name.display(db.upcast()).to_string(),
290-
DefWithBodyId::StaticId(it) => {
291-
db.static_data(it).name.clone().display(db.upcast()).to_string()
292-
}
293-
DefWithBodyId::ConstId(it) => db
294-
.const_data(it)
295-
.name
296-
.clone()
297-
.unwrap_or_else(Name::missing)
298-
.display(db.upcast())
299-
.to_string(),
300-
DefWithBodyId::VariantId(it) => {
301-
db.enum_variant_data(it).name.display(db.upcast()).to_string()
302-
}
303-
DefWithBodyId::InTypeConstId(it) => format!("in type const {it:?}"),
304-
};
305-
let _p = tracing::span!(tracing::Level::INFO, "infer:wait", ?detail).entered();
306-
db.infer_query(def)
307-
}
308-
309-
fn trait_solve_wait(
310-
db: &dyn HirDatabase,
311-
krate: CrateId,
312-
block: Option<BlockId>,
313-
goal: crate::Canonical<crate::InEnvironment<crate::Goal>>,
314-
) -> Option<crate::Solution> {
315-
let _p = tracing::span!(tracing::Level::INFO, "trait_solve::wait").entered();
316-
db.trait_solve_query(krate, block, goal)
317-
}
318-
319274
#[test]
320275
fn hir_database_is_object_safe() {
321276
fn _assert_object_safe(_: &dyn HirDatabase) {}

crates/hir/src/db.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
//!
55
//! But we need this for at least LRU caching at the query level.
66
pub use hir_def::db::{
7-
AttrsQuery, BlockDefMapQuery, BlockItemTreeQueryQuery, BodyQuery, BodyWithSourceMapQuery,
8-
ConstDataQuery, ConstVisibilityQuery, CrateDefMapQueryQuery, CrateLangItemsQuery,
9-
CrateSupportsNoStdQuery, DefDatabase, DefDatabaseStorage, EnumDataQuery,
10-
EnumVariantDataWithDiagnosticsQuery, ExprScopesQuery, ExternCrateDeclDataQuery,
11-
FieldVisibilitiesQuery, FieldsAttrsQuery, FieldsAttrsSourceMapQuery, FileItemTreeQuery,
12-
FunctionDataQuery, FunctionVisibilityQuery, GenericParamsQuery, ImplDataWithDiagnosticsQuery,
13-
ImportMapQuery, InternAnonymousConstQuery, InternBlockQuery, InternConstQuery, InternDatabase,
14-
InternDatabaseStorage, InternEnumQuery, InternExternBlockQuery, InternExternCrateQuery,
15-
InternFunctionQuery, InternImplQuery, InternInTypeConstQuery, InternMacro2Query,
16-
InternMacroRulesQuery, InternProcMacroQuery, InternStaticQuery, InternStructQuery,
17-
InternTraitAliasQuery, InternTraitQuery, InternTypeAliasQuery, InternUnionQuery,
18-
InternUseQuery, LangItemQuery, Macro2DataQuery, MacroRulesDataQuery, ProcMacroDataQuery,
19-
StaticDataQuery, StructDataWithDiagnosticsQuery, TraitAliasDataQuery,
20-
TraitDataWithDiagnosticsQuery, TypeAliasDataQuery, UnionDataWithDiagnosticsQuery,
7+
AttrsQuery, BlockDefMapQuery, BodyQuery, BodyWithSourceMapQuery, ConstDataQuery,
8+
ConstVisibilityQuery, CrateLangItemsQuery, CrateSupportsNoStdQuery, DefDatabase,
9+
DefDatabaseStorage, EnumDataQuery, EnumVariantDataWithDiagnosticsQuery, ExprScopesQuery,
10+
ExternCrateDeclDataQuery, FieldVisibilitiesQuery, FieldsAttrsQuery, FieldsAttrsSourceMapQuery,
11+
FileItemTreeQuery, FunctionDataQuery, FunctionVisibilityQuery, GenericParamsQuery,
12+
ImplDataWithDiagnosticsQuery, ImportMapQuery, InternAnonymousConstQuery, InternBlockQuery,
13+
InternConstQuery, InternDatabase, InternDatabaseStorage, InternEnumQuery,
14+
InternExternBlockQuery, InternExternCrateQuery, InternFunctionQuery, InternImplQuery,
15+
InternInTypeConstQuery, InternMacro2Query, InternMacroRulesQuery, InternProcMacroQuery,
16+
InternStaticQuery, InternStructQuery, InternTraitAliasQuery, InternTraitQuery,
17+
InternTypeAliasQuery, InternUnionQuery, InternUseQuery, LangItemQuery, Macro2DataQuery,
18+
MacroRulesDataQuery, ProcMacroDataQuery, StaticDataQuery, StructDataWithDiagnosticsQuery,
19+
TraitAliasDataQuery, TraitDataWithDiagnosticsQuery, TypeAliasDataQuery,
20+
UnionDataWithDiagnosticsQuery,
2121
};
2222
pub use hir_expand::db::{
2323
AstIdMapQuery, DeclMacroExpanderQuery, ExpandDatabase, ExpandDatabaseStorage,

crates/ide-db/src/apply_change.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ impl RootDatabase {
9191
crate::symbol_index::LocalRootsQuery
9292
crate::symbol_index::LibraryRootsQuery
9393
// HirDatabase
94-
hir::db::InferQueryQuery
9594
hir::db::MirBodyQuery
9695
hir::db::BorrowckQuery
9796
hir::db::TyQuery
@@ -130,12 +129,10 @@ impl RootDatabase {
130129
hir::db::FnDefVarianceQuery
131130
hir::db::AdtVarianceQuery
132131
hir::db::AssociatedTyValueQuery
133-
hir::db::TraitSolveQueryQuery
134132
hir::db::ProgramClausesForChalkEnvQuery
135133

136134
// DefDatabase
137135
hir::db::FileItemTreeQuery
138-
hir::db::CrateDefMapQueryQuery
139136
hir::db::BlockDefMapQuery
140137
hir::db::StructDataWithDiagnosticsQuery
141138
hir::db::UnionDataWithDiagnosticsQuery
@@ -165,7 +162,6 @@ impl RootDatabase {
165162
hir::db::FunctionVisibilityQuery
166163
hir::db::ConstVisibilityQuery
167164
hir::db::CrateSupportsNoStdQuery
168-
hir::db::BlockItemTreeQueryQuery
169165
hir::db::ExternCrateDeclDataQuery
170166
hir::db::InternAnonymousConstQuery
171167
hir::db::InternExternCrateQuery

crates/ide-db/src/lib.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,6 @@ impl RootDatabase {
216216

217217
// DefDatabase
218218
hir_db::FileItemTreeQuery
219-
hir_db::CrateDefMapQueryQuery
220219
hir_db::BlockDefMapQuery
221220
hir_db::StructDataWithDiagnosticsQuery
222221
hir_db::UnionDataWithDiagnosticsQuery
@@ -248,7 +247,6 @@ impl RootDatabase {
248247
hir_db::CrateSupportsNoStdQuery
249248

250249
// HirDatabase
251-
hir_db::InferQueryQuery
252250
hir_db::MirBodyQuery
253251
hir_db::BorrowckQuery
254252
hir_db::TyQuery
@@ -287,7 +285,6 @@ impl RootDatabase {
287285
hir_db::FnDefVarianceQuery
288286
hir_db::AdtVarianceQuery
289287
hir_db::AssociatedTyValueQuery
290-
hir_db::TraitSolveQueryQuery
291288
hir_db::ProgramClausesForChalkEnvQuery
292289

293290
// SymbolsDatabase

crates/salsa/salsa-macros/src/query_group.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,24 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream
235235

236236
queries_with_storage.push(fn_name);
237237

238+
let tracing = if let QueryStorage::Memoized = query.storage {
239+
let s = format!("{trait_name}::{fn_name}");
240+
Some(quote! {
241+
let _p = tracing::span!(tracing::Level::DEBUG, #s, #(#key_names = tracing::field::debug(&#key_names)),*).entered();
242+
})
243+
} else {
244+
None
245+
}
246+
.into_iter();
247+
238248
query_fn_definitions.extend(quote! {
239249
fn #fn_name(&self, #(#key_names: #keys),*) -> #value {
250+
#(#tracing),*
240251
// Create a shim to force the code to be monomorphized in the
241252
// query crate. Our experiments revealed that this makes a big
242253
// difference in total compilation time in rust-analyzer, though
243254
// it's not totally obvious why that should be.
244-
fn __shim(db: &(dyn #trait_name + '_), #(#key_names: #keys),*) -> #value {
255+
fn __shim(db: &(dyn #trait_name + '_), #(#key_names: #keys),*) -> #value {
245256
salsa::plumbing::get_query_table::<#qt>(db).get((#(#key_names),*))
246257
}
247258
__shim(self, #(#key_names),*)

crates/salsa/src/derived.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ where
136136
) -> std::fmt::Result {
137137
let slot_map = self.slot_map.read();
138138
let key = slot_map.get_index(index as usize).unwrap().0;
139-
write!(fmt, "{}({:?})", Q::QUERY_NAME, key)
139+
write!(fmt, "{}::{}({:?})", std::any::type_name::<Q>(), Q::QUERY_NAME, key)
140140
}
141141

142142
fn maybe_changed_after(
@@ -146,13 +146,13 @@ where
146146
revision: Revision,
147147
) -> bool {
148148
debug_assert!(revision < db.salsa_runtime().current_revision());
149-
let read = self.slot_map.read();
150-
let Some((key, slot)) = read.get_index(index as usize) else {
151-
return false;
149+
let (key, slot) = {
150+
let read = self.slot_map.read();
151+
let Some((key, slot)) = read.get_index(index as usize) else {
152+
return false;
153+
};
154+
(key.clone(), slot.clone())
152155
};
153-
let (key, slot) = (key.clone(), slot.clone());
154-
// note: this drop is load-bearing. removing it would causes deadlocks.
155-
drop(read);
156156
slot.maybe_changed_after(db, revision, &key)
157157
}
158158

crates/salsa/tests/cycles.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ fn cycle_memoized() {
171171
let cycle = extract_cycle(|| db.memoized_a());
172172
expect![[r#"
173173
[
174-
"memoized_a(())",
175-
"memoized_b(())",
174+
"cycles::MemoizedAQuery::memoized_a(())",
175+
"cycles::MemoizedBQuery::memoized_b(())",
176176
]
177177
"#]]
178178
.assert_debug_eq(&cycle.unexpected_participants(&db));
@@ -184,8 +184,8 @@ fn cycle_volatile() {
184184
let cycle = extract_cycle(|| db.volatile_a());
185185
expect![[r#"
186186
[
187-
"volatile_a(())",
188-
"volatile_b(())",
187+
"cycles::VolatileAQuery::volatile_a(())",
188+
"cycles::VolatileBQuery::volatile_b(())",
189189
]
190190
"#]]
191191
.assert_debug_eq(&cycle.unexpected_participants(&db));
@@ -222,8 +222,8 @@ fn inner_cycle() {
222222
let cycle = err.unwrap_err().cycle;
223223
expect![[r#"
224224
[
225-
"cycle_a(())",
226-
"cycle_b(())",
225+
"cycles::CycleAQuery::cycle_a(())",
226+
"cycles::CycleBQuery::cycle_b(())",
227227
]
228228
"#]]
229229
.assert_debug_eq(&cycle);
@@ -262,8 +262,8 @@ fn cycle_revalidate_unchanged_twice() {
262262
Err(
263263
Error {
264264
cycle: [
265-
"cycle_a(())",
266-
"cycle_b(())",
265+
"cycles::CycleAQuery::cycle_a(())",
266+
"cycles::CycleBQuery::cycle_b(())",
267267
],
268268
},
269269
)
@@ -344,8 +344,8 @@ fn cycle_mixed_1() {
344344
Err(
345345
Error {
346346
cycle: [
347-
"cycle_b(())",
348-
"cycle_c(())",
347+
"cycles::CycleBQuery::cycle_b(())",
348+
"cycles::CycleCQuery::cycle_c(())",
349349
],
350350
},
351351
)
@@ -371,9 +371,9 @@ fn cycle_mixed_2() {
371371
Err(
372372
Error {
373373
cycle: [
374-
"cycle_a(())",
375-
"cycle_b(())",
376-
"cycle_c(())",
374+
"cycles::CycleAQuery::cycle_a(())",
375+
"cycles::CycleBQuery::cycle_b(())",
376+
"cycles::CycleCQuery::cycle_c(())",
377377
],
378378
},
379379
)
@@ -400,16 +400,16 @@ fn cycle_deterministic_order() {
400400
Err(
401401
Error {
402402
cycle: [
403-
"cycle_a(())",
404-
"cycle_b(())",
403+
"cycles::CycleAQuery::cycle_a(())",
404+
"cycles::CycleBQuery::cycle_b(())",
405405
],
406406
},
407407
),
408408
Err(
409409
Error {
410410
cycle: [
411-
"cycle_a(())",
412-
"cycle_b(())",
411+
"cycles::CycleAQuery::cycle_a(())",
412+
"cycles::CycleBQuery::cycle_b(())",
413413
],
414414
},
415415
),
@@ -445,24 +445,24 @@ fn cycle_multiple() {
445445
Err(
446446
Error {
447447
cycle: [
448-
"cycle_a(())",
449-
"cycle_b(())",
448+
"cycles::CycleAQuery::cycle_a(())",
449+
"cycles::CycleBQuery::cycle_b(())",
450450
],
451451
},
452452
),
453453
Err(
454454
Error {
455455
cycle: [
456-
"cycle_a(())",
457-
"cycle_b(())",
456+
"cycles::CycleAQuery::cycle_a(())",
457+
"cycles::CycleBQuery::cycle_b(())",
458458
],
459459
},
460460
),
461461
Err(
462462
Error {
463463
cycle: [
464-
"cycle_a(())",
465-
"cycle_b(())",
464+
"cycles::CycleAQuery::cycle_a(())",
465+
"cycles::CycleBQuery::cycle_b(())",
466466
],
467467
},
468468
),
@@ -485,7 +485,7 @@ fn cycle_recovery_set_but_not_participating() {
485485
let r = extract_cycle(|| drop(db.cycle_a()));
486486
expect![[r#"
487487
[
488-
"cycle_c(())",
488+
"cycles::CycleCQuery::cycle_c(())",
489489
]
490490
"#]]
491491
.assert_debug_eq(&r.all_participants(&db));

0 commit comments

Comments
 (0)