@@ -284,7 +284,7 @@ def compare_command_logic(args, project_name, project_version):
284
284
(
285
285
detected_regressions ,
286
286
table_output ,
287
- total_improvements ,
287
+ improvements_list ,
288
288
regressions_list ,
289
289
total_stable ,
290
290
total_unstable ,
@@ -332,6 +332,7 @@ def compare_command_logic(args, project_name, project_version):
332
332
args .improvement_str ,
333
333
)
334
334
total_regressions = len (regressions_list )
335
+ total_improvements = len (improvements_list )
335
336
prepare_regression_comment (
336
337
auto_approve ,
337
338
baseline_branch ,
@@ -359,6 +360,7 @@ def compare_command_logic(args, project_name, project_version):
359
360
verbose ,
360
361
args .regressions_percent_lower_limit ,
361
362
regressions_list ,
363
+ improvements_list ,
362
364
)
363
365
return (
364
366
detected_regressions ,
@@ -398,6 +400,7 @@ def prepare_regression_comment(
398
400
verbose ,
399
401
regressions_percent_lower_limit ,
400
402
regressions_list = [],
403
+ improvements_list = [],
401
404
):
402
405
if total_comparison_points > 0 :
403
406
comment_body = "### Automated performance analysis summary\n \n "
@@ -424,18 +427,27 @@ def prepare_regression_comment(
424
427
comparison_summary += "- Detected a total of {} improvements above the improvement water line.\n " .format (
425
428
total_improvements
426
429
)
430
+ if len (improvements_list ) > 0 :
431
+ regression_values = [l [1 ] for l in improvements_list ]
432
+ regression_df = pd .DataFrame (regression_values )
433
+ median_regression = round (float (regression_df .median ().iloc [0 ]), 1 )
434
+ max_regression = round (float (regression_df .max ().iloc [0 ]), 1 )
435
+ min_regression = round (float (regression_df .min ().iloc [0 ]), 1 )
436
+
437
+ comparison_summary += f" - Median/Common-Case improvement was { median_regression } % and ranged from [{ min_regression } %,{ max_regression } %].\n "
438
+
427
439
if total_regressions > 0 :
428
440
comparison_summary += "- Detected a total of {} regressions bellow the regression water line {}.\n " .format (
429
441
total_regressions , regressions_percent_lower_limit
430
442
)
431
443
if len (regressions_list ) > 0 :
432
444
regression_values = [l [1 ] for l in regressions_list ]
433
445
regression_df = pd .DataFrame (regression_values )
434
- median_regression = round (float (regression_df .median ().iloc [0 ]), 2 )
435
- max_regression = round (float (regression_df .max ().iloc [0 ]), 2 )
436
- min_regression = round (float (regression_df .min ().iloc [0 ]), 2 )
446
+ median_regression = round (float (regression_df .median ().iloc [0 ]), 1 )
447
+ max_regression = round (float (regression_df .max ().iloc [0 ]), 1 )
448
+ min_regression = round (float (regression_df .min ().iloc [0 ]), 1 )
437
449
438
- comparison_summary += f" - Median/Common-Case regression was { median_regression } %% and ranged from [{ min_regression } ,{ max_regression } ] %% .\n "
450
+ comparison_summary += f" - Median/Common-Case regression was { median_regression } % and ranged from [{ min_regression } % ,{ max_regression } %] .\n "
439
451
440
452
comment_body += comparison_summary
441
453
comment_body += "\n "
@@ -704,8 +716,8 @@ def compute_regression_table(
704
716
table_name = "" ,
705
717
headers = [
706
718
"Test Case" ,
707
- "Baseline {} (median obs. +- std.dev)" . format ( baseline_str ) ,
708
- "Comparison {} (median obs. +- std.dev)" . format ( comparison_str ) ,
719
+ f "Baseline { baseline_github_org } / { baseline_github_repo } { baseline_str } (median obs. +- std.dev)" ,
720
+ f "Comparison { comparison_github_org } / { comparison_github_repo } { comparison_str } (median obs. +- std.dev)" ,
709
721
"% change ({})" .format (metric_mode ),
710
722
"Note" ,
711
723
],
@@ -727,8 +739,8 @@ def compute_regression_table(
727
739
table_name = "" ,
728
740
headers = [
729
741
"Test Case" ,
730
- "Baseline {} (median obs. +- std.dev)" . format ( baseline_str ) ,
731
- "Comparison {} (median obs. +- std.dev)" . format ( comparison_str ) ,
742
+ f "Baseline { baseline_github_org } / { baseline_github_repo } { baseline_str } (median obs. +- std.dev)" ,
743
+ f "Comparison { comparison_github_org } / { comparison_github_repo } { comparison_str } (median obs. +- std.dev)" ,
732
744
"% change ({})" .format (metric_mode ),
733
745
"Note" ,
734
746
],
@@ -737,7 +749,7 @@ def compute_regression_table(
737
749
writer_regressions .dump (mystdout , False )
738
750
table_output += mystdout .getvalue ()
739
751
table_output += "\n \n "
740
- test_names_str = "|" .join (improvements_list )
752
+ test_names_str = "|" .join ([ l [ 0 ] for l in improvements_list ] )
741
753
table_output += f"Improvements test regexp names: { test_names_str } \n \n "
742
754
mystdout .close ()
743
755
sys .stdout = old_stdout
@@ -748,8 +760,8 @@ def compute_regression_table(
748
760
table_name = "" ,
749
761
headers = [
750
762
"Test Case" ,
751
- "Baseline {} (median obs. +- std.dev)" . format ( baseline_str ) ,
752
- "Comparison {} (median obs. +- std.dev)" . format ( comparison_str ) ,
763
+ f "Baseline { baseline_github_org } / { baseline_github_repo } { baseline_str } (median obs. +- std.dev)" ,
764
+ f "Comparison { comparison_github_org } / { comparison_github_repo } { comparison_str } (median obs. +- std.dev)" ,
753
765
"% change ({})" .format (metric_mode ),
754
766
"Note" ,
755
767
],
@@ -766,7 +778,7 @@ def compute_regression_table(
766
778
return (
767
779
detected_regressions ,
768
780
table_output ,
769
- total_improvements ,
781
+ improvements_list ,
770
782
regressions_list ,
771
783
total_stable ,
772
784
total_unstable ,
@@ -1098,7 +1110,12 @@ def from_rts_to_regression_table(
1098
1110
logging .error ("Detected a ZeroDivisionError. {}" .format (e .__str__ ()))
1099
1111
pass
1100
1112
unstable = False
1101
- if baseline_v != "N/A" and comparison_v != "N/A" :
1113
+ if (
1114
+ baseline_v != "N/A"
1115
+ and comparison_pct_change != "N/A"
1116
+ and comparison_v != "N/A"
1117
+ and baseline_pct_change != "N/A"
1118
+ ):
1102
1119
if comparison_pct_change > 10.0 or baseline_pct_change > 10.0 :
1103
1120
note = "UNSTABLE (very high variance)"
1104
1121
unstable = True
@@ -1119,6 +1136,10 @@ def from_rts_to_regression_table(
1119
1136
percentage_change = (
1120
1137
float (baseline_v ) / float (comparison_v ) - 1
1121
1138
) * 100.0
1139
+ else :
1140
+ logging .warn (
1141
+ f"Missing data for test { test_name } . baseline_v={ baseline_v } (pct_change={ baseline_pct_change } ), comparison_v={ comparison_v } (pct_change={ comparison_pct_change } ) "
1142
+ )
1122
1143
if baseline_v != "N/A" or comparison_v != "N/A" :
1123
1144
detected_regression = False
1124
1145
detected_improvement = False
@@ -1170,7 +1191,7 @@ def from_rts_to_regression_table(
1170
1191
table_regressions .append (line )
1171
1192
1172
1193
if detected_improvement :
1173
- improvements_list .append (test_name )
1194
+ improvements_list .append ([ test_name , percentage_change ] )
1174
1195
table_improvements .append (line )
1175
1196
1176
1197
if unstable :
@@ -1325,23 +1346,25 @@ def get_v_pct_change_and_largest_var(
1325
1346
_ , comparison_v = comparison_datapoints [0 ]
1326
1347
for tuple in comparison_datapoints :
1327
1348
if last_n < 0 or (last_n > 0 and len (comparison_values ) < last_n ):
1328
- comparison_values .append (tuple [1 ])
1329
- comparison_df = pd .DataFrame (comparison_values )
1330
- comparison_median = float (comparison_df .median ().iloc [0 ])
1331
- comparison_v = comparison_median
1332
- comparison_std = float (comparison_df .std ().iloc [0 ])
1333
- if verbose :
1334
- logging .info (
1335
- "comparison_datapoints: {} value: {}; std-dev: {}; median: {}" .format (
1336
- comparison_datapoints ,
1337
- comparison_v ,
1338
- comparison_std ,
1339
- comparison_median ,
1349
+ if tuple [1 ] > 0.0 :
1350
+ comparison_values .append (tuple [1 ])
1351
+ if len (comparison_values ) > 0 :
1352
+ comparison_df = pd .DataFrame (comparison_values )
1353
+ comparison_median = float (comparison_df .median ().iloc [0 ])
1354
+ comparison_v = comparison_median
1355
+ comparison_std = float (comparison_df .std ().iloc [0 ])
1356
+ if verbose :
1357
+ logging .info (
1358
+ "comparison_datapoints: {} value: {}; std-dev: {}; median: {}" .format (
1359
+ comparison_datapoints ,
1360
+ comparison_v ,
1361
+ comparison_std ,
1362
+ comparison_median ,
1363
+ )
1340
1364
)
1341
- )
1342
- comparison_pct_change = (comparison_std / comparison_median ) * 100.0
1343
- if comparison_pct_change > largest_variance :
1344
- largest_variance = comparison_pct_change
1365
+ comparison_pct_change = (comparison_std / comparison_median ) * 100.0
1366
+ if comparison_pct_change > largest_variance :
1367
+ largest_variance = comparison_pct_change
1345
1368
return comparison_pct_change , comparison_v , largest_variance
1346
1369
1347
1370
0 commit comments