Expose some details about introspection (#195)
* Expose some details about introspection, such that custom Stats implementations can use them * Make the functions public * Fix formatting
This commit is contained in:
parent
574a274be6
commit
08263f7ade
@ -688,6 +688,32 @@ impl ClientPerfStats {
|
|||||||
// Set that the current stage is being used
|
// Set that the current stage is being used
|
||||||
self.stages_used[stage_index] = true;
|
self.stages_used[stage_index] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn elapsed_cycles(&self) -> u64 {
|
||||||
|
self.current_time - self.start_time
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn manager_cycles(&self) -> u64 {
|
||||||
|
self.manager
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn scheduler_cycles(&self) -> u64 {
|
||||||
|
self.scheduler
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn used_stages(
|
||||||
|
&self,
|
||||||
|
) -> impl Iterator<Item = (usize, &[u64; PerfFeature::Count as usize])> {
|
||||||
|
let used = self.stages_used.clone();
|
||||||
|
self.stages
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter(move |(stage_index, _)| used[*stage_index as usize])
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn feedbacks(&self) -> impl Iterator<Item = (usize, &u64)> {
|
||||||
|
self.feedbacks.iter().enumerate()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "introspection")]
|
#[cfg(feature = "introspection")]
|
||||||
@ -695,7 +721,7 @@ impl core::fmt::Display for ClientPerfStats {
|
|||||||
#[allow(clippy::cast_precision_loss)]
|
#[allow(clippy::cast_precision_loss)]
|
||||||
fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> {
|
fn fmt(&self, f: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> {
|
||||||
// Calculate the elapsed time from the stats
|
// Calculate the elapsed time from the stats
|
||||||
let elapsed: f64 = (self.current_time - self.start_time) as f64;
|
let elapsed: f64 = self.elapsed_cycles() as f64;
|
||||||
|
|
||||||
// Calculate the percentages for each benchmark
|
// Calculate the percentages for each benchmark
|
||||||
let scheduler_percent = self.scheduler as f64 / elapsed;
|
let scheduler_percent = self.scheduler as f64 / elapsed;
|
||||||
@ -714,12 +740,8 @@ impl core::fmt::Display for ClientPerfStats {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Calculate each stage
|
// Calculate each stage
|
||||||
for (stage_index, features) in self.stages.iter().enumerate() {
|
// Make sure we only iterate over used stages
|
||||||
// Make sure this stage is actually used before dumping its information
|
for (stage_index, features) in self.used_stages() {
|
||||||
if !self.stages_used[stage_index as usize] {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write the stage header
|
// Write the stage header
|
||||||
writeln!(f, " Stage {}:", stage_index)?;
|
writeln!(f, " Stage {}:", stage_index)?;
|
||||||
|
|
||||||
@ -742,7 +764,7 @@ impl core::fmt::Display for ClientPerfStats {
|
|||||||
writeln!(f, " {:6.4}: {:?}", feature_percent, feature)?;
|
writeln!(f, " {:6.4}: {:?}", feature_percent, feature)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (feedback_index, feedback) in self.feedbacks.iter().enumerate() {
|
for (feedback_index, feedback) in self.feedbacks() {
|
||||||
// Calculate this current stage's percentage
|
// Calculate this current stage's percentage
|
||||||
let feedback_percent = *feedback as f64 / elapsed;
|
let feedback_percent = *feedback as f64 / elapsed;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user