Skip to content

Commit 353f3a3

Browse files
committed
Auto merge of rust-lang#80071 - jyn514:timings, r=Mark-Simulacrum
Add more timing info to rustdoc This helped me confirm in rust-lang#79103 (comment) that get_blanket_impls is indeed what's taking all the time on stm32. r? `@Mark-Simulacrum`
2 parents 0fe1dc6 + ffa7a01 commit 353f3a3

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

src/librustdoc/clean/utils.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -558,10 +558,13 @@ crate fn get_auto_trait_and_blanket_impls(
558558
ty: Ty<'tcx>,
559559
param_env_def_id: DefId,
560560
) -> impl Iterator<Item = Item> {
561-
AutoTraitFinder::new(cx)
562-
.get_auto_trait_impls(ty, param_env_def_id)
563-
.into_iter()
564-
.chain(BlanketImplFinder::new(cx).get_blanket_impls(ty, param_env_def_id))
561+
let auto_impls = cx.sess().time("get_auto_trait_impls", || {
562+
AutoTraitFinder::new(cx).get_auto_trait_impls(ty, param_env_def_id)
563+
});
564+
let blanket_impls = cx.sess().time("get_blanket_impls", || {
565+
BlanketImplFinder::new(cx).get_blanket_impls(ty, param_env_def_id)
566+
});
567+
auto_impls.into_iter().chain(blanket_impls)
565568
}
566569

567570
crate fn register_res(cx: &DocContext<'_>, res: Res) -> DefId {

src/librustdoc/passes/collect_trait_impls.rs

+19-15
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ crate const COLLECT_TRAIT_IMPLS: Pass = Pass {
1616

1717
crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
1818
let mut synth = SyntheticImplCollector::new(cx);
19-
let mut krate = synth.fold_crate(krate);
19+
let mut krate = cx.sess().time("collect_synthetic_impls", || synth.fold_crate(krate));
2020

2121
let prims: FxHashSet<PrimitiveType> = krate.primitives.iter().map(|p| p.1).collect();
2222

2323
let crate_items = {
2424
let mut coll = ItemCollector::new();
25-
krate = coll.fold_crate(krate);
25+
krate = cx.sess().time("collect_items_for_trait_impls", || coll.fold_crate(krate));
2626
coll.items
2727
};
2828

@@ -39,16 +39,18 @@ crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
3939
// Also try to inline primitive impls from other crates.
4040
for &def_id in PrimitiveType::all_impls(cx.tcx).values().flatten() {
4141
if !def_id.is_local() {
42-
inline::build_impl(cx, None, def_id, None, &mut new_items);
42+
cx.sess().time("build_primitive_trait_impl", || {
43+
inline::build_impl(cx, None, def_id, None, &mut new_items);
4344

44-
// FIXME(eddyb) is this `doc(hidden)` check needed?
45-
if !cx.tcx.get_attrs(def_id).lists(sym::doc).has_word(sym::hidden) {
46-
let self_ty = cx.tcx.type_of(def_id);
47-
let impls = get_auto_trait_and_blanket_impls(cx, self_ty, def_id);
48-
let mut renderinfo = cx.renderinfo.borrow_mut();
45+
// FIXME(eddyb) is this `doc(hidden)` check needed?
46+
if !cx.tcx.get_attrs(def_id).lists(sym::doc).has_word(sym::hidden) {
47+
let self_ty = cx.tcx.type_of(def_id);
48+
let impls = get_auto_trait_and_blanket_impls(cx, self_ty, def_id);
49+
let mut renderinfo = cx.renderinfo.borrow_mut();
4950

50-
new_items.extend(impls.filter(|i| renderinfo.inlined.insert(i.def_id)));
51-
}
51+
new_items.extend(impls.filter(|i| renderinfo.inlined.insert(i.def_id)));
52+
}
53+
})
5254
}
5355
}
5456

@@ -151,11 +153,13 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
151153
if i.is_struct() || i.is_enum() || i.is_union() {
152154
// FIXME(eddyb) is this `doc(hidden)` check needed?
153155
if !self.cx.tcx.get_attrs(i.def_id).lists(sym::doc).has_word(sym::hidden) {
154-
self.impls.extend(get_auto_trait_and_blanket_impls(
155-
self.cx,
156-
self.cx.tcx.type_of(i.def_id),
157-
i.def_id,
158-
));
156+
self.cx.sess().time("get_auto_trait_and_blanket_synthetic_impls", || {
157+
self.impls.extend(get_auto_trait_and_blanket_impls(
158+
self.cx,
159+
self.cx.tcx.type_of(i.def_id),
160+
i.def_id,
161+
));
162+
});
159163
}
160164
}
161165

0 commit comments

Comments
 (0)