Add ratio comparison menu action
This commit is contained in:
+93
-3
@@ -308,6 +308,94 @@ my %handlers = (
|
||||
0, @entries );
|
||||
},
|
||||
|
||||
'11b. Compare to Baseline' => sub {
|
||||
|
||||
my $baseline = Util::select_experiment(0);
|
||||
|
||||
my @selected_experiments = Util::select_experiment(1);
|
||||
|
||||
# TODO: Fails silently if not every selected experiment has this datafile
|
||||
my $resultsdata_csv =
|
||||
Util::pick_data_file( "$local_archive_dir/$baseline", "resultsdata" );
|
||||
|
||||
my %all_results;
|
||||
foreach my $experiment ( $baseline, @selected_experiments ) {
|
||||
|
||||
my $data = Text::CSV_XS::csv(
|
||||
in => "$local_archive_dir/$experiment/$resultsdata_csv",
|
||||
headers => 'auto'
|
||||
);
|
||||
|
||||
foreach my $row (@$data) {
|
||||
$all_results{$experiment}{ $row->{benchmark} }
|
||||
{ $row->{resulttype} } = $row->{faults};
|
||||
}
|
||||
}
|
||||
|
||||
my @benchs = ( 'ip', 'mem', 'regs' );
|
||||
my @markers = (
|
||||
'OK_MARKER', 'FAIL_MARKER',
|
||||
'DETECTED_MARKER', 'TIMEOUT',
|
||||
'TRAP', 'WRITE_TEXTSEGMENT',
|
||||
'ACCESS_OUTERSPACE', 'GROUP1_MARKER'
|
||||
);
|
||||
|
||||
my $heading = sprintf( "%5s %20s %50s ", "BENCH", "TYPE", $baseline );
|
||||
my $subheading = sprintf( "%5s %20s %50s ",
|
||||
"", "", Util::read_experiment_info($baseline) );
|
||||
foreach my $experiment (@selected_experiments) {
|
||||
$heading .= sprintf( "%50s ", $experiment );
|
||||
$subheading .=
|
||||
sprintf( "%50s ", Util::read_experiment_info($experiment) );
|
||||
}
|
||||
|
||||
my @entries = ( $heading, $subheading, "" );
|
||||
foreach my $benchmark (@benchs) {
|
||||
foreach my $marker (@markers) {
|
||||
my $entry = sprintf( "%5s %20s ", $benchmark, $marker );
|
||||
|
||||
if ( exists $all_results{$baseline}{$benchmark}{$marker} ) {
|
||||
$entry .= sprintf(
|
||||
"%50s ",
|
||||
Util::format_number_sep(
|
||||
$all_results{$baseline}{$benchmark}{$marker}
|
||||
)
|
||||
);
|
||||
}
|
||||
else {
|
||||
$entry .= sprintf( "%50s ", "" );
|
||||
}
|
||||
|
||||
foreach my $experiment (@selected_experiments) {
|
||||
if ( exists $all_results{$baseline}{$benchmark}{$marker}
|
||||
and
|
||||
exists $all_results{$experiment}{$benchmark}{$marker}
|
||||
and $all_results{$baseline}{$benchmark}{$marker} != 0 )
|
||||
{
|
||||
my $factor =
|
||||
$all_results{$experiment}{$benchmark}{$marker} /
|
||||
$all_results{$baseline}{$benchmark}{$marker};
|
||||
$entry .=
|
||||
sprintf( "%50s ", sprintf( "%.2fx", $factor ) );
|
||||
}
|
||||
else {
|
||||
$entry .= sprintf( "%50s ", "" );
|
||||
}
|
||||
}
|
||||
|
||||
push @entries, $entry;
|
||||
}
|
||||
push @entries, "";
|
||||
}
|
||||
|
||||
TUI::select_from_list(
|
||||
"Baseline: $baseline — Comparing "
|
||||
. scalar(@selected_experiments)
|
||||
. " Experiments",
|
||||
0, @entries
|
||||
);
|
||||
},
|
||||
|
||||
'12. Open Experiment in BinaryNinja' => sub {
|
||||
my @selected_experiments = Util::select_experiment(1);
|
||||
my @paths =
|
||||
@@ -487,7 +575,8 @@ my %handlers = (
|
||||
# Need to know which chart uses which datafile
|
||||
my @faults_charts = grep { /heatmap|scatter|sankey/ } @selected_charts;
|
||||
my @resultsdata_charts =
|
||||
grep { /result$|combined_comparison/ } @selected_charts;
|
||||
grep { /result$|combined_comparison|ratio_comparison|ratio_correlation/ }
|
||||
@selected_charts;
|
||||
|
||||
my $faults_csv;
|
||||
my $resultsdata_csv;
|
||||
@@ -519,7 +608,8 @@ my %handlers = (
|
||||
}
|
||||
}
|
||||
|
||||
my @combined_charts = grep { /combined/ } @selected_charts;
|
||||
my @combined_charts =
|
||||
grep { /combined|ratio_comparison|ratio_correlation/ } @selected_charts;
|
||||
my $print_experiments = join " ", @selected_experiments;
|
||||
my @path_experiments =
|
||||
map { "$local_archive_dir/$_" } @selected_experiments;
|
||||
@@ -531,7 +621,7 @@ my %handlers = (
|
||||
if defined $faults_csv && $chart =~ /heatmap|scatter|sankey/;
|
||||
push @r_args, $resultsdata_csv
|
||||
if defined $resultsdata_csv
|
||||
&& $chart =~ /result$|combined_comparison/;
|
||||
&& $chart =~ /result$|combined_comparison|ratio_comparison|ratio_correlation/;
|
||||
system(@r_args);
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user