Add ratio comparison menu action
This commit is contained in:
@@ -202,6 +202,7 @@ local $ENV{WAMR_USE_LINEAR_POOL_IN_TEXT} =
|
|||||||
# ========================================================================================= #
|
# ========================================================================================= #
|
||||||
|
|
||||||
# NOTE: The runner will prefix "-Wf," to each flag
|
# NOTE: The runner will prefix "-Wf," to each flag
|
||||||
|
# TODO: Exclude --wamr-exceptions from C builds automatically
|
||||||
my %catch_flag_map = (
|
my %catch_flag_map = (
|
||||||
"--catch-outer" => "--catch-outerspace",
|
"--catch-outer" => "--catch-outerspace",
|
||||||
"--catch-text" => "--catch-write-textsegment",
|
"--catch-text" => "--catch-write-textsegment",
|
||||||
|
|||||||
+93
-3
@@ -308,6 +308,94 @@ my %handlers = (
|
|||||||
0, @entries );
|
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 {
|
'12. Open Experiment in BinaryNinja' => sub {
|
||||||
my @selected_experiments = Util::select_experiment(1);
|
my @selected_experiments = Util::select_experiment(1);
|
||||||
my @paths =
|
my @paths =
|
||||||
@@ -487,7 +575,8 @@ my %handlers = (
|
|||||||
# Need to know which chart uses which datafile
|
# Need to know which chart uses which datafile
|
||||||
my @faults_charts = grep { /heatmap|scatter|sankey/ } @selected_charts;
|
my @faults_charts = grep { /heatmap|scatter|sankey/ } @selected_charts;
|
||||||
my @resultsdata_charts =
|
my @resultsdata_charts =
|
||||||
grep { /result$|combined_comparison/ } @selected_charts;
|
grep { /result$|combined_comparison|ratio_comparison|ratio_correlation/ }
|
||||||
|
@selected_charts;
|
||||||
|
|
||||||
my $faults_csv;
|
my $faults_csv;
|
||||||
my $resultsdata_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 $print_experiments = join " ", @selected_experiments;
|
||||||
my @path_experiments =
|
my @path_experiments =
|
||||||
map { "$local_archive_dir/$_" } @selected_experiments;
|
map { "$local_archive_dir/$_" } @selected_experiments;
|
||||||
@@ -531,7 +621,7 @@ my %handlers = (
|
|||||||
if defined $faults_csv && $chart =~ /heatmap|scatter|sankey/;
|
if defined $faults_csv && $chart =~ /heatmap|scatter|sankey/;
|
||||||
push @r_args, $resultsdata_csv
|
push @r_args, $resultsdata_csv
|
||||||
if defined $resultsdata_csv
|
if defined $resultsdata_csv
|
||||||
&& $chart =~ /result$|combined_comparison/;
|
&& $chart =~ /result$|combined_comparison|ratio_comparison|ratio_correlation/;
|
||||||
system(@r_args);
|
system(@r_args);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user