@@ -311,21 +311,9 @@ impl Divan {
311
311
if should_compute_stats {
312
312
let stats = bench_context. compute_stats ( ) ;
313
313
{
314
- // WARNING: Keep in sync with `codspeed-divan-compat::uri::generate`
315
- // Not worth doing the work of actually using the same code since this fork
316
- // is temporary
317
- let name = bench_entry. display_name ( ) . to_string ( ) ;
318
- let file = bench_entry. meta ( ) . location . file ;
319
- let mut module_path = bench_entry
320
- . meta ( )
321
- . module_path_components ( )
322
- . skip ( 1 )
323
- . collect :: < Vec < _ > > ( )
324
- . join ( "::" ) ;
325
- if !module_path. is_empty ( ) {
326
- module_path. push_str ( "::" ) ;
327
- }
328
- let uri = format ! ( "{file}::{module_path}{name}" ) ;
314
+ let CodspeedBench { bench_name, uri } =
315
+ generate_codspeed_bench_name ( & bench_entry, bench_display_name) ;
316
+
329
317
let iter_per_round = bench_context. samples . sample_size ;
330
318
let times_ns: Vec < _ > = bench_context
331
319
. samples
@@ -336,7 +324,7 @@ impl Divan {
336
324
let max_time_ns = options. max_time . map ( |t| t. as_nanos ( ) ) ;
337
325
:: codspeed:: walltime:: collect_raw_walltime_results (
338
326
"divan" ,
339
- name ,
327
+ bench_name ,
340
328
uri,
341
329
iter_per_round,
342
330
max_time_ns,
@@ -383,6 +371,76 @@ impl Divan {
383
371
}
384
372
}
385
373
374
+ struct CodspeedBench {
375
+ bench_name : String ,
376
+ uri : String ,
377
+ }
378
+
379
+ /// Generates a Codspeed benchmark name and URI
380
+ ///
381
+ /// WARNING: Keep in sync with `codspeed-divan-compat::uri::generate`
382
+ /// Not worth doing the work of actually using the same code since this fork
383
+ /// is temporary
384
+ fn generate_codspeed_bench_name (
385
+ bench_entry : & AnyBenchEntry ,
386
+ closure_bench_display_name : & str ,
387
+ ) -> CodspeedBench {
388
+ let bench_function_name = bench_entry. meta ( ) . display_name ;
389
+
390
+ let ( bench_type_name, bench_arg_name) = {
391
+ let bench_function_or_type_name = bench_entry. display_name ( ) . to_string ( ) ;
392
+
393
+ let type_name = if bench_function_or_type_name == bench_function_name {
394
+ None
395
+ } else {
396
+ Some ( bench_function_or_type_name)
397
+ } ;
398
+
399
+ let arg_name = match type_name. as_ref ( ) {
400
+ None => {
401
+ if closure_bench_display_name == bench_function_name {
402
+ None
403
+ } else {
404
+ Some ( closure_bench_display_name)
405
+ }
406
+ }
407
+ Some ( type_name) => {
408
+ if closure_bench_display_name == type_name {
409
+ None
410
+ } else {
411
+ Some ( closure_bench_display_name)
412
+ }
413
+ }
414
+ } ;
415
+
416
+ ( type_name, arg_name)
417
+ } ;
418
+
419
+ let mut bench_name = bench_function_name. to_string ( ) ;
420
+
421
+ match ( bench_type_name, bench_arg_name) {
422
+ ( None , None ) => { }
423
+ ( Some ( type_name) , None ) => {
424
+ bench_name. push_str ( format ! ( "[{type_name}]" ) . as_str ( ) ) ;
425
+ }
426
+ ( None , Some ( arg_name) ) => {
427
+ bench_name. push_str ( format ! ( "[{arg_name}]" ) . as_str ( ) ) ;
428
+ }
429
+ ( Some ( type_name) , Some ( arg_name) ) => {
430
+ bench_name. push_str ( format ! ( "[{type_name}, {arg_name}]" ) . as_str ( ) ) ;
431
+ }
432
+ }
433
+
434
+ let file = bench_entry. meta ( ) . location . file ;
435
+ let mut module_path =
436
+ bench_entry. meta ( ) . module_path_components ( ) . skip ( 1 ) . collect :: < Vec < _ > > ( ) . join ( "::" ) ;
437
+ if !module_path. is_empty ( ) {
438
+ module_path. push_str ( "::" ) ;
439
+ }
440
+ let uri = format ! ( "{file}::{module_path}{bench_name}" ) ;
441
+ CodspeedBench { bench_name, uri }
442
+ }
443
+
386
444
/// Makes `Divan::skip_regex` input polymorphic.
387
445
pub trait SkipRegex {
388
446
fn skip_regex ( self , divan : & mut Divan ) ;
0 commit comments