Skip to content

Commit 18f5b87

Browse files
Merge pull request #1009 from tgnottingham/variance-fix
Fix determination of whether or not to calculate variance
2 parents a6eb310 + 8120c94 commit 18f5b87

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

site/src/comparison.rs

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,7 @@ async fn compare_given_commits(
393393
benchmark: test_case.0,
394394
profile: test_case.1,
395395
scenario: test_case.2,
396-
variance: variances
397-
.as_ref()
398-
.and_then(|v| v.data.get(&test_case).cloned()),
396+
variance: variances.data.get(&test_case).cloned(),
399397
results: (a, b),
400398
calc_new_sig,
401399
})
@@ -586,41 +584,50 @@ impl BenchmarkVariances {
586584
from: ArtifactId,
587585
master_commits: &[collector::MasterCommit],
588586
stat: String,
589-
) -> Result<Option<Self>, BoxedError> {
587+
) -> Result<Self, BoxedError> {
588+
let mut variance_data = HashMap::new();
589+
590+
let previous_commits = Arc::new(previous_commits(
591+
from,
592+
Self::NUM_PREVIOUS_COMMITS,
593+
master_commits,
594+
));
595+
596+
// Return early if we don't have enough data to calculate variance.
597+
if previous_commits.len() < Self::MIN_PREVIOUS_COMMITS {
598+
return Ok(Self {
599+
data: variance_data,
600+
});
601+
}
602+
590603
// get all crates, cache, and profile combinations for the given stat
591604
let query = selector::Query::new()
592605
.set::<String>(Tag::Benchmark, selector::Selector::All)
593606
.set::<String>(Tag::Scenario, selector::Selector::All)
594607
.set::<String>(Tag::Profile, selector::Selector::All)
595608
.set(Tag::Metric, selector::Selector::One(stat));
596609

597-
let previous_commits = Arc::new(previous_commits(
598-
from,
599-
Self::NUM_PREVIOUS_COMMITS,
600-
master_commits,
601-
));
602610
let mut previous_commit_series = ctxt
603611
.statistic_series(query, previous_commits.clone())
604612
.await?;
605613

606-
let mut variance_data: HashMap<(Benchmark, Profile, Scenario), BenchmarkVariance> =
607-
HashMap::new();
608614
for _ in previous_commits.iter() {
609615
for (test_case, stat) in statistics_from_series(&mut previous_commit_series) {
610616
variance_data.entry(test_case).or_default().push(stat);
611617
}
612618
}
613-
if variance_data.len() < Self::MIN_PREVIOUS_COMMITS {
614-
return Ok(None);
615-
}
619+
620+
// Only retain test cases for which we have enough data to calculate variance.
621+
variance_data.retain(|_, v| v.data.len() >= Self::MIN_PREVIOUS_COMMITS);
616622

617623
for ((bench, _, _), results) in variance_data.iter_mut() {
618624
debug!("Calculating variance for: {}", bench);
619625
results.calculate_description();
620626
}
621-
Ok(Some(Self {
627+
628+
Ok(Self {
622629
data: variance_data,
623-
}))
630+
})
624631
}
625632
}
626633

0 commit comments

Comments
 (0)