@@ -393,9 +393,7 @@ async fn compare_given_commits(
393
393
benchmark : test_case. 0 ,
394
394
profile : test_case. 1 ,
395
395
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 ( ) ,
399
397
results : ( a, b) ,
400
398
calc_new_sig,
401
399
} )
@@ -586,41 +584,50 @@ impl BenchmarkVariances {
586
584
from : ArtifactId ,
587
585
master_commits : & [ collector:: MasterCommit ] ,
588
586
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
+
590
603
// get all crates, cache, and profile combinations for the given stat
591
604
let query = selector:: Query :: new ( )
592
605
. set :: < String > ( Tag :: Benchmark , selector:: Selector :: All )
593
606
. set :: < String > ( Tag :: Scenario , selector:: Selector :: All )
594
607
. set :: < String > ( Tag :: Profile , selector:: Selector :: All )
595
608
. set ( Tag :: Metric , selector:: Selector :: One ( stat) ) ;
596
609
597
- let previous_commits = Arc :: new ( previous_commits (
598
- from,
599
- Self :: NUM_PREVIOUS_COMMITS ,
600
- master_commits,
601
- ) ) ;
602
610
let mut previous_commit_series = ctxt
603
611
. statistic_series ( query, previous_commits. clone ( ) )
604
612
. await ?;
605
613
606
- let mut variance_data: HashMap < ( Benchmark , Profile , Scenario ) , BenchmarkVariance > =
607
- HashMap :: new ( ) ;
608
614
for _ in previous_commits. iter ( ) {
609
615
for ( test_case, stat) in statistics_from_series ( & mut previous_commit_series) {
610
616
variance_data. entry ( test_case) . or_default ( ) . push ( stat) ;
611
617
}
612
618
}
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 ) ;
616
622
617
623
for ( ( bench, _, _) , results) in variance_data. iter_mut ( ) {
618
624
debug ! ( "Calculating variance for: {}" , bench) ;
619
625
results. calculate_description ( ) ;
620
626
}
621
- Ok ( Some ( Self {
627
+
628
+ Ok ( Self {
622
629
data : variance_data,
623
- } ) )
630
+ } )
624
631
}
625
632
}
626
633
0 commit comments