From a2bd19b6e2cc632c285a86f8aabf1b8f43a5190d Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Wed, 22 Jul 2026 00:16:22 +0200 Subject: [PATCH] Add ratio comparison menu action --- scripts/build.pl | 1 + scripts/menu.pl | 96 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 3 deletions(-) diff --git a/scripts/build.pl b/scripts/build.pl index 6b522d5..a89c2a9 100755 --- a/scripts/build.pl +++ b/scripts/build.pl @@ -202,6 +202,7 @@ local $ENV{WAMR_USE_LINEAR_POOL_IN_TEXT} = # ========================================================================================= # # NOTE: The runner will prefix "-Wf," to each flag +# TODO: Exclude --wamr-exceptions from C builds automatically my %catch_flag_map = ( "--catch-outer" => "--catch-outerspace", "--catch-text" => "--catch-write-textsegment", diff --git a/scripts/menu.pl b/scripts/menu.pl index eeb7f6c..12ffabd 100644 --- a/scripts/menu.pl +++ b/scripts/menu.pl @@ -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); } },