Make -Z time-passes
less noisy
- Add the module name to `pre_AST_expansion_passes` and don't make it a verbose event (since it normally doesn't take very long, and it's emitted many times) - Don't make the following rustdoc events verbose; they're emitted many times. + build_extern_trait_impl + build_local_trait_impl + build_primitive_trait_impl + get_auto_trait_impls + get_blanket_trait_impls - Remove `get_auto_trait_and_blanket_synthetic_impls`; it's wholly covered by get_{auto,blanket}_trait_impls and not very useful.
This commit is contained in:
parent
65767e5653
commit
3b8f1b7883
5 changed files with 35 additions and 24 deletions
|
@ -929,7 +929,9 @@ pub struct ExtCtxt<'a> {
|
||||||
pub force_mode: bool,
|
pub force_mode: bool,
|
||||||
pub expansions: FxHashMap<Span, Vec<String>>,
|
pub expansions: FxHashMap<Span, Vec<String>>,
|
||||||
/// Called directly after having parsed an external `mod foo;` in expansion.
|
/// Called directly after having parsed an external `mod foo;` in expansion.
|
||||||
pub(super) extern_mod_loaded: Option<&'a dyn Fn(&ast::Crate)>,
|
///
|
||||||
|
/// `Ident` is the module name.
|
||||||
|
pub(super) extern_mod_loaded: Option<&'a dyn Fn(&ast::Crate, Ident)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ExtCtxt<'a> {
|
impl<'a> ExtCtxt<'a> {
|
||||||
|
@ -937,7 +939,7 @@ impl<'a> ExtCtxt<'a> {
|
||||||
sess: &'a Session,
|
sess: &'a Session,
|
||||||
ecfg: expand::ExpansionConfig<'a>,
|
ecfg: expand::ExpansionConfig<'a>,
|
||||||
resolver: &'a mut dyn ResolverExpand,
|
resolver: &'a mut dyn ResolverExpand,
|
||||||
extern_mod_loaded: Option<&'a dyn Fn(&ast::Crate)>,
|
extern_mod_loaded: Option<&'a dyn Fn(&ast::Crate, Ident)>,
|
||||||
) -> ExtCtxt<'a> {
|
) -> ExtCtxt<'a> {
|
||||||
ExtCtxt {
|
ExtCtxt {
|
||||||
sess,
|
sess,
|
||||||
|
|
|
@ -1407,7 +1407,7 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
|
||||||
proc_macros: vec![],
|
proc_macros: vec![],
|
||||||
};
|
};
|
||||||
if let Some(extern_mod_loaded) = self.cx.extern_mod_loaded {
|
if let Some(extern_mod_loaded) = self.cx.extern_mod_loaded {
|
||||||
extern_mod_loaded(&krate);
|
extern_mod_loaded(&krate, ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
*old_mod = krate.module;
|
*old_mod = krate.module;
|
||||||
|
|
|
@ -33,7 +33,7 @@ use rustc_session::lint;
|
||||||
use rustc_session::output::{filename_for_input, filename_for_metadata};
|
use rustc_session::output::{filename_for_input, filename_for_metadata};
|
||||||
use rustc_session::search_paths::PathKind;
|
use rustc_session::search_paths::PathKind;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::{Ident, Symbol};
|
||||||
use rustc_span::{FileName, RealFileName};
|
use rustc_span::{FileName, RealFileName};
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_typeck as typeck;
|
use rustc_typeck as typeck;
|
||||||
|
@ -211,8 +211,13 @@ pub fn register_plugins<'a>(
|
||||||
Ok((krate, lint_store))
|
Ok((krate, lint_store))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pre_expansion_lint(sess: &Session, lint_store: &LintStore, krate: &ast::Crate) {
|
fn pre_expansion_lint(
|
||||||
sess.time("pre_AST_expansion_lint_checks", || {
|
sess: &Session,
|
||||||
|
lint_store: &LintStore,
|
||||||
|
krate: &ast::Crate,
|
||||||
|
crate_name: &str,
|
||||||
|
) {
|
||||||
|
sess.prof.generic_activity_with_arg("pre_AST_expansion_lint_checks", crate_name).run(|| {
|
||||||
rustc_lint::check_ast_crate(
|
rustc_lint::check_ast_crate(
|
||||||
sess,
|
sess,
|
||||||
lint_store,
|
lint_store,
|
||||||
|
@ -233,7 +238,7 @@ fn configure_and_expand_inner<'a>(
|
||||||
metadata_loader: &'a MetadataLoaderDyn,
|
metadata_loader: &'a MetadataLoaderDyn,
|
||||||
) -> Result<(ast::Crate, Resolver<'a>)> {
|
) -> Result<(ast::Crate, Resolver<'a>)> {
|
||||||
tracing::trace!("configure_and_expand_inner");
|
tracing::trace!("configure_and_expand_inner");
|
||||||
pre_expansion_lint(sess, lint_store, &krate);
|
pre_expansion_lint(sess, lint_store, &krate, crate_name);
|
||||||
|
|
||||||
let mut resolver = Resolver::new(sess, &krate, crate_name, metadata_loader, &resolver_arenas);
|
let mut resolver = Resolver::new(sess, &krate, crate_name, metadata_loader, &resolver_arenas);
|
||||||
rustc_builtin_macros::register_builtin_macros(&mut resolver);
|
rustc_builtin_macros::register_builtin_macros(&mut resolver);
|
||||||
|
@ -295,7 +300,9 @@ fn configure_and_expand_inner<'a>(
|
||||||
..rustc_expand::expand::ExpansionConfig::default(crate_name.to_string())
|
..rustc_expand::expand::ExpansionConfig::default(crate_name.to_string())
|
||||||
};
|
};
|
||||||
|
|
||||||
let extern_mod_loaded = |k: &ast::Crate| pre_expansion_lint(sess, lint_store, k);
|
let extern_mod_loaded = |k: &ast::Crate, ident: Ident| {
|
||||||
|
pre_expansion_lint(sess, lint_store, k, &*ident.name.as_str())
|
||||||
|
};
|
||||||
let mut ecx = ExtCtxt::new(&sess, cfg, &mut resolver, Some(&extern_mod_loaded));
|
let mut ecx = ExtCtxt::new(&sess, cfg, &mut resolver, Some(&extern_mod_loaded));
|
||||||
|
|
||||||
// Expand macros now!
|
// Expand macros now!
|
||||||
|
|
|
@ -487,12 +487,16 @@ crate fn get_auto_trait_and_blanket_impls(
|
||||||
ty: Ty<'tcx>,
|
ty: Ty<'tcx>,
|
||||||
param_env_def_id: DefId,
|
param_env_def_id: DefId,
|
||||||
) -> impl Iterator<Item = Item> {
|
) -> impl Iterator<Item = Item> {
|
||||||
let auto_impls = cx.sess().time("get_auto_trait_impls", || {
|
let auto_impls = cx
|
||||||
AutoTraitFinder::new(cx).get_auto_trait_impls(ty, param_env_def_id)
|
.sess()
|
||||||
});
|
.prof
|
||||||
let blanket_impls = cx.sess().time("get_blanket_impls", || {
|
.generic_activity("get_auto_trait_impls")
|
||||||
BlanketImplFinder::new(cx).get_blanket_impls(ty, param_env_def_id)
|
.run(|| AutoTraitFinder::new(cx).get_auto_trait_impls(ty, param_env_def_id));
|
||||||
});
|
let blanket_impls = cx
|
||||||
|
.sess()
|
||||||
|
.prof
|
||||||
|
.generic_activity("get_blanket_impls")
|
||||||
|
.run(|| BlanketImplFinder::new(cx).get_blanket_impls(ty, param_env_def_id));
|
||||||
auto_impls.into_iter().chain(blanket_impls)
|
auto_impls.into_iter().chain(blanket_impls)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
|
||||||
|
|
||||||
for &cnum in cx.tcx.crates().iter() {
|
for &cnum in cx.tcx.crates().iter() {
|
||||||
for &(did, _) in cx.tcx.all_trait_implementations(cnum).iter() {
|
for &(did, _) in cx.tcx.all_trait_implementations(cnum).iter() {
|
||||||
cx.tcx.sess.time("build_extern_trait_impl", || {
|
cx.tcx.sess.prof.generic_activity("build_extern_trait_impl").run(|| {
|
||||||
inline::build_impl(cx, None, did, None, &mut new_items);
|
inline::build_impl(cx, None, did, None, &mut new_items);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
|
||||||
// Also try to inline primitive impls from other crates.
|
// Also try to inline primitive impls from other crates.
|
||||||
for &def_id in PrimitiveType::all_impls(cx.tcx).values().flatten() {
|
for &def_id in PrimitiveType::all_impls(cx.tcx).values().flatten() {
|
||||||
if !def_id.is_local() {
|
if !def_id.is_local() {
|
||||||
cx.sess().time("build_primitive_trait_impl", || {
|
cx.tcx.sess.prof.generic_activity("build_primitive_trait_impls").run(|| {
|
||||||
inline::build_impl(cx, None, def_id, None, &mut new_items);
|
inline::build_impl(cx, None, def_id, None, &mut new_items);
|
||||||
|
|
||||||
// FIXME(eddyb) is this `doc(hidden)` check needed?
|
// FIXME(eddyb) is this `doc(hidden)` check needed?
|
||||||
|
@ -59,7 +59,7 @@ crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
|
||||||
for &trait_did in cx.tcx.all_traits(LOCAL_CRATE).iter() {
|
for &trait_did in cx.tcx.all_traits(LOCAL_CRATE).iter() {
|
||||||
for &impl_node in cx.tcx.hir().trait_impls(trait_did) {
|
for &impl_node in cx.tcx.hir().trait_impls(trait_did) {
|
||||||
let impl_did = cx.tcx.hir().local_def_id(impl_node);
|
let impl_did = cx.tcx.hir().local_def_id(impl_node);
|
||||||
cx.tcx.sess.time("build_local_trait_impl", || {
|
cx.tcx.sess.prof.generic_activity("build_local_trait_impl").run(|| {
|
||||||
let mut extra_attrs = Vec::new();
|
let mut extra_attrs = Vec::new();
|
||||||
let mut parent = cx.tcx.parent(impl_did.to_def_id());
|
let mut parent = cx.tcx.parent(impl_did.to_def_id());
|
||||||
while let Some(did) = parent {
|
while let Some(did) = parent {
|
||||||
|
@ -177,13 +177,11 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
|
||||||
if i.is_struct() || i.is_enum() || i.is_union() {
|
if i.is_struct() || i.is_enum() || i.is_union() {
|
||||||
// FIXME(eddyb) is this `doc(hidden)` check needed?
|
// FIXME(eddyb) is this `doc(hidden)` check needed?
|
||||||
if !self.cx.tcx.get_attrs(i.def_id).lists(sym::doc).has_word(sym::hidden) {
|
if !self.cx.tcx.get_attrs(i.def_id).lists(sym::doc).has_word(sym::hidden) {
|
||||||
self.cx.sess().time("get_auto_trait_and_blanket_synthetic_impls", || {
|
self.impls.extend(get_auto_trait_and_blanket_impls(
|
||||||
self.impls.extend(get_auto_trait_and_blanket_impls(
|
self.cx,
|
||||||
self.cx,
|
self.cx.tcx.type_of(i.def_id),
|
||||||
self.cx.tcx.type_of(i.def_id),
|
i.def_id,
|
||||||
i.def_id,
|
));
|
||||||
));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue