@@ -370,22 +370,41 @@ fn histograms(c: &mut Criterion) {
370370 ) ;
371371 }
372372 }
373- group. bench_function ( "CollectOne" , |b| benchmark_collect_histogram ( b, 1 ) ) ;
374- group. bench_function ( "CollectFive" , |b| benchmark_collect_histogram ( b, 5 ) ) ;
375- group. bench_function ( "CollectTen" , |b| benchmark_collect_histogram ( b, 10 ) ) ;
376- group. bench_function ( "CollectTwentyFive" , |b| benchmark_collect_histogram ( b, 25 ) ) ;
373+
374+ for metrics_count in [ 1 , 20 ] {
375+ for ( attribute_sets_count, attribs_count) in [ ( 1 , 0 ) , ( 1 , 10 ) , ( 500 , 10 ) ] {
376+ group. bench_function (
377+ format ! ( "Collect_{metrics_count}Metrics_{attribute_sets_count}AttribSets_{attribs_count}Attribs" ) ,
378+ |b| benchmark_collect_histogram ( b, metrics_count, attribute_sets_count, attribs_count) ,
379+ ) ;
380+ }
381+ }
377382}
378383
379- fn benchmark_collect_histogram ( b : & mut Bencher , n : usize ) {
384+ fn benchmark_collect_histogram (
385+ b : & mut Bencher ,
386+ metrics_count : usize ,
387+ attribute_sets_count : usize ,
388+ attribs_count : usize ,
389+ ) {
380390 let r = SharedReader ( Arc :: new ( ManualReader :: default ( ) ) ) ;
381- let mtr = SdkMeterProvider :: builder ( )
382- . with_reader ( r. clone ( ) )
383- . build ( )
384- . meter ( "sdk/metric/bench/histogram" ) ;
385-
386- for i in 0 ..n {
387- let h = mtr. u64_histogram ( format ! ( "fake_data_{i}" ) ) . build ( ) ;
388- h. record ( 1 , & [ ] ) ;
391+
392+ let provider = SdkMeterProvider :: builder ( ) . with_reader ( r. clone ( ) ) . build ( ) ;
393+ let mtr = provider. meter ( "sdk/metric/bench/histogram" ) ;
394+ let mut rng = rand:: thread_rng ( ) ;
395+
396+ for m in 0 ..metrics_count {
397+ let h = mtr. u64_histogram ( format ! ( "fake_data_{m}" ) ) . build ( ) ;
398+ for _att in 0 ..attribute_sets_count {
399+ let mut attributes: Vec < KeyValue > = Vec :: new ( ) ;
400+ for _i in 0 ..attribs_count {
401+ attributes. push ( KeyValue :: new (
402+ format ! ( "K{}" , rng. gen_range:: <i32 , _>( 0 ..20 ) ) ,
403+ format ! ( "V{}" , rng. gen_range:: <i32 , _>( 0 ..20 ) ) ,
404+ ) )
405+ }
406+ h. record ( 1 , & attributes)
407+ }
389408 }
390409
391410 let mut rm = ResourceMetrics {
@@ -394,8 +413,8 @@ fn benchmark_collect_histogram(b: &mut Bencher, n: usize) {
394413 } ;
395414
396415 b. iter ( || {
397- let _ = r. collect ( & mut rm) ;
398- assert_eq ! ( rm. scope_metrics[ 0 ] . metrics. len( ) , n ) ;
416+ r. collect ( & mut rm) . unwrap ( ) ;
417+ assert_eq ! ( rm. scope_metrics[ 0 ] . metrics. len( ) , metrics_count ) ;
399418 } )
400419}
401420
0 commit comments