self-profile: Cache more query key strings when doing self-profiling.
This commit is contained in:
parent
3fbed1739c
commit
08d951768f
@ -1,8 +1,9 @@
|
||||
use crate::ty::context::TyCtxt;
|
||||
use crate::ty::WithOptConstParam;
|
||||
use measureme::{StringComponent, StringId};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::profiling::SelfProfiler;
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIndex, LocalDefId, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use rustc_hir::definitions::DefPathData;
|
||||
use rustc_query_system::query::QueryCache;
|
||||
use rustc_query_system::query::QueryState;
|
||||
@ -154,6 +155,49 @@ impl SpecIntoSelfProfilingString for DefIndex {
|
||||
}
|
||||
}
|
||||
|
||||
impl SpecIntoSelfProfilingString for LocalDefId {
|
||||
fn spec_to_self_profile_string(
|
||||
&self,
|
||||
builder: &mut QueryKeyStringBuilder<'_, '_, '_>,
|
||||
) -> StringId {
|
||||
builder.def_id_to_string_id(DefId { krate: LOCAL_CRATE, index: self.local_def_index })
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: SpecIntoSelfProfilingString> SpecIntoSelfProfilingString for WithOptConstParam<T> {
|
||||
fn spec_to_self_profile_string(
|
||||
&self,
|
||||
builder: &mut QueryKeyStringBuilder<'_, '_, '_>,
|
||||
) -> StringId {
|
||||
// We print `WithOptConstParam` values as tuples to make them shorter
|
||||
// and more readable, without losing information:
|
||||
//
|
||||
// "WithOptConstParam { did: foo::bar, const_param_did: Some(foo::baz) }"
|
||||
// becomes "(foo::bar, foo::baz)" and
|
||||
// "WithOptConstParam { did: foo::bar, const_param_did: None }"
|
||||
// becomes "(foo::bar, _)".
|
||||
|
||||
let did = StringComponent::Ref(self.did.to_self_profile_string(builder));
|
||||
|
||||
let const_param_did = if let Some(const_param_did) = self.const_param_did {
|
||||
let const_param_did = builder.def_id_to_string_id(const_param_did);
|
||||
StringComponent::Ref(const_param_did)
|
||||
} else {
|
||||
StringComponent::Value("_")
|
||||
};
|
||||
|
||||
let components = [
|
||||
StringComponent::Value("("),
|
||||
did,
|
||||
StringComponent::Value(", "),
|
||||
const_param_did,
|
||||
StringComponent::Value(")"),
|
||||
];
|
||||
|
||||
builder.profiler.alloc_string(&components[..])
|
||||
}
|
||||
}
|
||||
|
||||
impl<T0, T1> SpecIntoSelfProfilingString for (T0, T1)
|
||||
where
|
||||
T0: SpecIntoSelfProfilingString,
|
||||
|
Loading…
x
Reference in New Issue
Block a user