diff options
| author | Rich Kadel <richkadel@google.com> | 2020-10-22 20:28:16 -0700 |
|---|---|---|
| committer | Rich Kadel <richkadel@google.com> | 2020-11-05 18:24:14 -0800 |
| commit | 3291d28e9ac1173f033d240bc5f3f145c9c8dd59 (patch) | |
| tree | 9434df1af15a71dec68b47ed307e07a0d40efebb /compiler/rustc_mir/src/transform/coverage/counters.rs | |
| parent | b5020648fe294a1f139586e4243903d8c1a105b8 (diff) | |
| download | rust-3291d28e9ac1173f033d240bc5f3f145c9c8dd59.tar.gz rust-3291d28e9ac1173f033d240bc5f3f145c9c8dd59.zip | |
Adds coverage graphviz
Diffstat (limited to 'compiler/rustc_mir/src/transform/coverage/counters.rs')
| -rw-r--r-- | compiler/rustc_mir/src/transform/coverage/counters.rs | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/compiler/rustc_mir/src/transform/coverage/counters.rs b/compiler/rustc_mir/src/transform/coverage/counters.rs index 511ad937c24..c31f401780e 100644 --- a/compiler/rustc_mir/src/transform/coverage/counters.rs +++ b/compiler/rustc_mir/src/transform/coverage/counters.rs @@ -1,3 +1,7 @@ +use super::debug; + +use debug::DebugCounters; + use rustc_middle::mir::coverage::*; /// Manages the counter and expression indexes/IDs to generate `CoverageKind` components for MIR @@ -6,6 +10,7 @@ pub(crate) struct CoverageCounters { function_source_hash: u64, next_counter_id: u32, num_expressions: u32, + pub debug_counters: DebugCounters, } impl CoverageCounters { @@ -14,24 +19,46 @@ impl CoverageCounters { function_source_hash, next_counter_id: CounterValueReference::START.as_u32(), num_expressions: 0, + debug_counters: DebugCounters::new(), } } - pub fn make_counter(&mut self) -> CoverageKind { - CoverageKind::Counter { + /// Activate the `DebugCounters` data structures, to provide additional debug formatting + /// features when formating `CoverageKind` (counter) values. + pub fn enable_debug(&mut self) { + self.debug_counters.enable(); + } + + pub fn make_counter<F>(&mut self, debug_block_label_fn: F) -> CoverageKind + where + F: Fn() -> Option<String>, + { + let counter = CoverageKind::Counter { function_source_hash: self.function_source_hash, id: self.next_counter(), + }; + if self.debug_counters.is_enabled() { + self.debug_counters.add_counter(&counter, (debug_block_label_fn)()); } + counter } - pub fn make_expression( + pub fn make_expression<F>( &mut self, lhs: ExpressionOperandId, op: Op, rhs: ExpressionOperandId, - ) -> CoverageKind { + debug_block_label_fn: F, + ) -> CoverageKind + where + F: Fn() -> Option<String>, + { let id = self.next_expression(); - CoverageKind::Expression { id, lhs, op, rhs } + let expression = CoverageKind::Expression { id, lhs, op, rhs }; + if self.debug_counters.is_enabled() { + self.debug_counters.add_counter(&expression, (debug_block_label_fn)()); + } + expression } /// Counter IDs start from one and go up. |
