@@ -260,13 +260,29 @@ def write_comparison(args, old_stats, new_stats):
260
260
regressions = sum (1 for row in rows if row .delta > 0 )
261
261
262
262
if args .markdown :
263
+
264
+ def format_field (field , row , args ):
265
+ if field == 'name' and args .group_by_module :
266
+ return re .sub (r'^(\w+)\.' , r'\1<br/>' , row .name )
267
+ elif field == 'delta_pct' and args .github_emoji :
268
+ if row .delta_pct > 0 :
269
+ return str (row .delta_pct ) + " :no_entry:"
270
+ else :
271
+ return str (row .delta_pct ) + " :white_check_mark:"
272
+ else :
273
+ return str (vars (row )[field ])
274
+
263
275
out = args .output
264
276
out .write (' | ' .join (OutputRow ._fields ))
265
277
out .write ('\n ' )
266
278
out .write (' | ' .join ('---:' for _ in OutputRow ._fields ))
267
279
out .write ('\n ' )
268
280
for row in rows :
269
- out .write (' | ' .join (str (v ) for v in row ))
281
+ name = row .name
282
+ if args .group_by_module :
283
+ name
284
+ out .write (' | ' .join (format_field (f , row , args )
285
+ for f in OutputRow ._fields ))
270
286
out .write ('\n ' )
271
287
else :
272
288
out = csv .DictWriter (args .output , OutputRow ._fields ,
@@ -295,11 +311,18 @@ def compare_stats_dirs(args):
295
311
if len (args .remainder ) != 2 :
296
312
raise ValueError ("Expected exactly 2 stats-dirs" )
297
313
314
+ vargs = vars (args )
315
+ if args .select_stats_from_csv_baseline is not None :
316
+ b = read_stats_dict_from_csv (args .select_stats_from_csv_baseline )
317
+ if args .group_by_module :
318
+ pat = re .compile ('^\w+\.' )
319
+ vargs ['select_stat' ] = set (re .sub (pat , '' , k ) for k in b .keys ())
320
+ else :
321
+ vargs ['select_stat' ] = b .keys ()
322
+
298
323
(old , new ) = args .remainder
299
- old_stats = merge_all_jobstats (load_stats_dir (old , ** vars (args )),
300
- ** vars (args ))
301
- new_stats = merge_all_jobstats (load_stats_dir (new , ** vars (args )),
302
- ** vars (args ))
324
+ old_stats = merge_all_jobstats (load_stats_dir (old , ** vargs ), ** vargs )
325
+ new_stats = merge_all_jobstats (load_stats_dir (new , ** vargs ), ** vargs )
303
326
304
327
return write_comparison (args , old_stats .stats , new_stats .stats )
305
328
@@ -344,6 +367,9 @@ def main():
344
367
default = [],
345
368
action = "append" ,
346
369
help = "Select specific statistics" )
370
+ parser .add_argument ("--select-stats-from-csv-baseline" ,
371
+ type = argparse .FileType ('rb' , 0 ), default = None ,
372
+ help = "Select statistics present in a CSV baseline" )
347
373
parser .add_argument ("--exclude-timers" ,
348
374
default = False ,
349
375
action = "store_true" ,
@@ -364,6 +390,10 @@ def main():
364
390
default = False ,
365
391
action = "store_true" ,
366
392
help = "Write output in markdown table format" )
393
+ parser .add_argument ("--github-emoji" ,
394
+ default = False ,
395
+ action = "store_true" ,
396
+ help = "Add github-emoji indicators to markdown" )
367
397
modes = parser .add_mutually_exclusive_group (required = True )
368
398
modes .add_argument ("--catapult" , action = "store_true" ,
369
399
help = "emit a 'catapult'-compatible trace of events" )
0 commit comments