@@ -186,27 +186,38 @@ sub compare_scaled_times {
186
186
187
187
my %times_by_scale ;
188
188
my %rates_by_scale ;
189
+ my %rates_by_perl ;
189
190
while (my ($perl , $scale_times ) = each %$times ) {
190
- while (my ($scale , $time ) = each %$scale_times ) {
191
- next unless defined $time ;
192
- my $bounded = $times_by_scale {$scale }{$perl } = max($time , $min_time );
193
- my $rate = $rates_by_scale {$scale }{$perl } = $scale / $bounded ;
194
- $max_rate = $rate if $max_rate < $rate ;
195
- }
191
+ while (my ($scale , $time ) = each %$scale_times ) {
192
+ next unless defined $time ;
193
+ my $bounded = $times_by_scale {$scale }{$perl } = max($time , $min_time );
194
+ my $rate = $rates_by_scale {$scale }{$perl } = $scale / $bounded ;
195
+ $rates_by_perl {$perl }{$scale } = $rate ;
196
+ $max_rate = $rate if $max_rate < $rate ;
197
+ }
196
198
}
197
199
198
200
my %relative_rates ;
199
201
while (my ($scale , $perl_rates ) = each %rates_by_scale ) {
200
- while (my ($perl , $rate ) = each %$perl_rates ) {
201
- $relative_rates {$scale }{$perl } = $rate / $max_rate ;
202
- }
202
+ while (my ($perl , $rate ) = each %$perl_rates ) {
203
+ $relative_rates {$scale }{$perl } = $rate / $max_rate ;
204
+ }
205
+ }
206
+
207
+ my %peak_rate ;
208
+ while (my ($perl , $scale_rates ) = each %rates_by_perl ) {
209
+ my @sorted = sort { $scale_rates -> {$b } <=> $scale_rates -> {$a } } keys %$scale_rates ;
210
+ my $fastest = $sorted [0];
211
+ my $rate = $scale_rates -> {$fastest };
212
+ $peak_rate {$perl } = { scale => $fastest , rate => $rate , relative => $rate / $max_rate };
203
213
}
204
214
205
215
return {
206
- times_by_scale => \%times_by_scale ,
207
- rates_by_scale => \%rates_by_scale ,
208
- relative_rates => \%relative_rates ,
209
- };
216
+ times_by_scale => \%times_by_scale ,
217
+ rates_by_scale => \%rates_by_scale ,
218
+ relative_rates => \%relative_rates ,
219
+ peak_rate => \%peak_rate ,
220
+ };
210
221
}
211
222
212
223
sub summarize_results_json {
0 commit comments