Skip to content

Commit f74b0b9

Browse files
committed
Type-erase query stats.
1 parent 9249a52 commit f74b0b9

File tree

5 files changed

+52
-34
lines changed

5 files changed

+52
-34
lines changed

compiler/rustc_middle/src/dep_graph/dep_node.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@ use crate::traits::query::{
6060
};
6161
use crate::ty::subst::{GenericArg, SubstsRef};
6262
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
63+
use rustc_middle::ty::query;
6364

6465
use rustc_data_structures::fingerprint::Fingerprint;
6566
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX};
6667
use rustc_hir::definitions::DefPathHash;
6768
use rustc_hir::HirId;
69+
use rustc_query_system::query::QueryAccessors;
6870
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
6971
use rustc_span::symbol::Symbol;
7072
use std::hash::Hash;
@@ -84,6 +86,8 @@ pub trait DepKindTrait: std::fmt::Debug + Sync {
8486

8587
fn force_from_dep_node(&self, tcx: TyCtxt<'_>, dep_node: &DepNode) -> bool;
8688

89+
fn query_stats(&self, tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats>;
90+
8791
fn try_load_from_on_disk_cache(&self, tcx: TyCtxt<'_>, dep_node: &DepNode);
8892
}
8993

@@ -199,6 +203,18 @@ macro_rules! define_dep_kinds {
199203
false
200204
}
201205

206+
#[inline]
207+
fn query_stats(&self, tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats> {
208+
let ret = query::stats::stats::<
209+
query::Query<'_>,
210+
<query::queries::$variant<'_> as QueryAccessors<TyCtxt<'_>>>::Cache,
211+
>(
212+
stringify!($variant),
213+
&tcx.queries.$variant,
214+
);
215+
Some(ret)
216+
}
217+
202218
#[inline]
203219
fn try_load_from_on_disk_cache<'tcx>(&self, tcx: TyCtxt<'tcx>, dep_node: &DepNode) {
204220
use rustc_query_system::query::QueryDescription;
@@ -412,6 +428,11 @@ impl DepKindTrait for dep_kind::Null {
412428
bug!("force_from_dep_node: encountered {:?}", _dep_node);
413429
}
414430

431+
#[inline]
432+
fn query_stats(&self, _tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats> {
433+
None
434+
}
435+
415436
#[inline]
416437
fn try_load_from_on_disk_cache<'tcx>(&self, _tcx: TyCtxt<'tcx>, _dep_node: &DepNode) {}
417438
}
@@ -453,6 +474,11 @@ impl DepKindTrait for dep_kind::CrateMetadata {
453474
bug!("force_from_dep_node: encountered {:?}", _dep_node);
454475
}
455476

477+
#[inline]
478+
fn query_stats(&self, _tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats> {
479+
None
480+
}
481+
456482
#[inline]
457483
fn try_load_from_on_disk_cache<'tcx>(&self, _tcx: TyCtxt<'tcx>, _dep_node: &DepNode) {}
458484
}
@@ -493,6 +519,11 @@ impl DepKindTrait for dep_kind::TraitSelect {
493519
bug!("force_from_dep_node: encountered {:?}", _dep_node);
494520
}
495521

522+
#[inline]
523+
fn query_stats(&self, _tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats> {
524+
None
525+
}
526+
496527
#[inline]
497528
fn try_load_from_on_disk_cache<'tcx>(&self, _tcx: TyCtxt<'tcx>, _dep_node: &DepNode) {}
498529
}
@@ -534,6 +565,11 @@ impl DepKindTrait for dep_kind::CompileCodegenUnit {
534565
bug!("force_from_dep_node: encountered {:?}", _dep_node);
535566
}
536567

568+
#[inline]
569+
fn query_stats(&self, _tcx: TyCtxt<'_>) -> Option<query::stats::QueryStats> {
570+
None
571+
}
572+
537573
#[inline]
538574
fn try_load_from_on_disk_cache<'tcx>(&self, _tcx: TyCtxt<'tcx>, _dep_node: &DepNode) {}
539575
}

compiler/rustc_middle/src/dep_graph/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub use rustc_query_system::dep_graph::{
1616

1717
pub use dep_node::{
1818
dep_kind, label_strs, DepConstructor, DepKind, DepKindIndex, DepKindTrait, DepNode, DepNodeExt,
19+
DEP_KINDS,
1920
};
2021

2122
pub type DepGraph = rustc_query_system::dep_graph::DepGraph<DepKind>;

compiler/rustc_middle/src/ty/query/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ mod plumbing;
6464
pub(crate) use rustc_query_system::query::CycleError;
6565
use rustc_query_system::query::*;
6666

67-
mod stats;
67+
crate mod stats;
6868
pub use self::stats::print_stats;
6969

7070
#[cfg(parallel_compiler)]

compiler/rustc_middle/src/ty/query/plumbing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ macro_rules! define_queries_struct {
515515
providers: IndexVec<CrateNum, Providers>,
516516
fallback_extern_providers: Box<Providers>,
517517

518-
$($(#[$attr])* $name: QueryState<
518+
$($(#[$attr])* pub(crate) $name: QueryState<
519519
crate::dep_graph::DepKind,
520520
<TyCtxt<$tcx> as QueryContext>::Query,
521521
<queries::$name<$tcx> as QueryAccessors<TyCtxt<'tcx>>>::Cache,

compiler/rustc_middle/src/ty/query/stats.rs

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
use crate::ty::query::queries;
1+
use crate::dep_graph::{self, DepKind};
22
use crate::ty::TyCtxt;
33
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
4-
use rustc_query_system::query::{QueryAccessors, QueryCache, QueryContext, QueryState};
4+
use rustc_query_system::query::{QueryCache, QueryState};
55

66
use std::any::type_name;
7-
use std::hash::Hash;
87
use std::mem;
98
#[cfg(debug_assertions)]
109
use std::sync::atomic::Ordering;
@@ -26,7 +25,7 @@ impl KeyStats for DefId {
2625
}
2726

2827
#[derive(Clone)]
29-
struct QueryStats {
28+
pub struct QueryStats {
3029
name: &'static str,
3130
cache_hits: usize,
3231
key_size: usize,
@@ -37,9 +36,8 @@ struct QueryStats {
3736
local_def_id_keys: Option<usize>,
3837
}
3938

40-
fn stats<D, Q, C>(name: &'static str, map: &QueryState<D, Q, C>) -> QueryStats
39+
crate fn stats<Q, C>(name: &'static str, map: &QueryState<DepKind, Q, C>) -> QueryStats
4140
where
42-
D: Copy + Clone + Eq + Hash,
4341
Q: Clone,
4442
C: QueryCache,
4543
{
@@ -65,7 +63,15 @@ where
6563
}
6664

6765
pub fn print_stats(tcx: TyCtxt<'_>) {
68-
let queries = query_stats(tcx);
66+
let mut queries = Vec::new();
67+
68+
for dk in dep_graph::DEP_KINDS {
69+
if let Some(fragment) = dk.query_stats(tcx) {
70+
queries.push(fragment)
71+
}
72+
}
73+
74+
let queries = queries;
6975

7076
if cfg!(debug_assertions) {
7177
let hits: usize = queries.iter().map(|s| s.cache_hits).sum();
@@ -118,28 +124,3 @@ pub fn print_stats(tcx: TyCtxt<'_>) {
118124
println!(" {} - {} = ({}%)", q.name, local, (local as f64 * 100.0) / total);
119125
}
120126
}
121-
122-
macro_rules! print_stats {
123-
(<$tcx:tt>
124-
$($(#[$attr:meta])* [$($modifiers:tt)*] fn $name:ident($K:ty) -> $V:ty,)*
125-
) => {
126-
fn query_stats(tcx: TyCtxt<'_>) -> Vec<QueryStats> {
127-
let mut queries = Vec::new();
128-
129-
$(
130-
queries.push(stats::<
131-
crate::dep_graph::DepKind,
132-
<TyCtxt<'_> as QueryContext>::Query,
133-
<queries::$name<'_> as QueryAccessors<TyCtxt<'_>>>::Cache,
134-
>(
135-
stringify!($name),
136-
&tcx.queries.$name,
137-
));
138-
)*
139-
140-
queries
141-
}
142-
}
143-
}
144-
145-
rustc_query_append! { [print_stats!][<'tcx>] }

0 commit comments

Comments
 (0)