@@ -4,6 +4,8 @@ use std::iter::IntoIterator;
4
4
use std:: time:: Duration ;
5
5
use std:: time:: Instant ;
6
6
7
+ use codspeed:: instrument_hooks:: InstrumentHooks ;
8
+
7
9
use crate :: black_box;
8
10
use crate :: measurement:: { Measurement , WallTime } ;
9
11
use crate :: BatchSize ;
@@ -93,13 +95,17 @@ impl<'a, M: Measurement> Bencher<'a, M> {
93
95
R : FnMut ( ) -> O ,
94
96
{
95
97
self . iterated = true ;
98
+
99
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
96
100
let time_start = Instant :: now ( ) ;
97
101
let start = self . measurement . start ( ) ;
98
102
for _ in 0 ..self . iters {
99
103
black_box ( routine ( ) ) ;
100
104
}
101
105
self . value = self . measurement . end ( start) ;
102
106
self . elapsed_time = time_start. elapsed ( ) ;
107
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
108
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
103
109
}
104
110
105
111
/// Times a `routine` by executing it many times and relying on `routine` to measure its own execution time.
@@ -153,9 +159,12 @@ impl<'a, M: Measurement> Bencher<'a, M> {
153
159
R : FnMut ( u64 ) -> M :: Value ,
154
160
{
155
161
self . iterated = true ;
162
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
156
163
let time_start = Instant :: now ( ) ;
157
164
self . value = routine ( self . iters ) ;
158
165
self . elapsed_time = time_start. elapsed ( ) ;
166
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
167
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
159
168
}
160
169
161
170
#[ doc( hidden) ]
@@ -282,9 +291,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
282
291
for _ in 0 ..self . iters {
283
292
let input = black_box ( setup ( ) ) ;
284
293
294
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
285
295
let start = self . measurement . start ( ) ;
286
296
let output = routine ( input) ;
287
297
let end = self . measurement . end ( start) ;
298
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
299
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
300
+
288
301
self . value = self . measurement . add ( & self . value , & end) ;
289
302
290
303
drop ( black_box ( output) ) ;
@@ -298,9 +311,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
298
311
let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
299
312
let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
300
313
314
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
301
315
let start = self . measurement . start ( ) ;
302
316
outputs. extend ( inputs. into_iter ( ) . map ( & mut routine) ) ;
303
317
let end = self . measurement . end ( start) ;
318
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
319
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
320
+
304
321
self . value = self . measurement . add ( & self . value , & end) ;
305
322
306
323
black_box ( outputs) ;
@@ -386,9 +403,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
386
403
for _ in 0 ..self . iters {
387
404
let mut input = black_box ( setup ( ) ) ;
388
405
406
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
389
407
let start = self . measurement . start ( ) ;
390
408
let output = routine ( & mut input) ;
391
409
let end = self . measurement . end ( start) ;
410
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
411
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
412
+
392
413
self . value = self . measurement . add ( & self . value , & end) ;
393
414
394
415
drop ( black_box ( output) ) ;
@@ -403,9 +424,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
403
424
let mut inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
404
425
let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
405
426
427
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
406
428
let start = self . measurement . start ( ) ;
407
429
outputs. extend ( inputs. iter_mut ( ) . map ( & mut routine) ) ;
408
430
let end = self . measurement . end ( start) ;
431
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
432
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
433
+
409
434
self . value = self . measurement . add ( & self . value , & end) ;
410
435
411
436
black_box ( outputs) ;
@@ -497,13 +522,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
497
522
let AsyncBencher { b, runner } = self ;
498
523
runner. block_on ( async {
499
524
b. iterated = true ;
525
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
500
526
let time_start = Instant :: now ( ) ;
501
527
let start = b. measurement . start ( ) ;
502
528
for _ in 0 ..b. iters {
503
529
black_box ( routine ( ) . await ) ;
504
530
}
505
531
b. value = b. measurement . end ( start) ;
506
532
b. elapsed_time = time_start. elapsed ( ) ;
533
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
534
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
507
535
} ) ;
508
536
}
509
537
@@ -565,9 +593,12 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
565
593
let AsyncBencher { b, runner } = self ;
566
594
runner. block_on ( async {
567
595
b. iterated = true ;
596
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
568
597
let time_start = Instant :: now ( ) ;
569
598
b. value = routine ( b. iters ) . await ;
570
599
b. elapsed_time = time_start. elapsed ( ) ;
600
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
601
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
571
602
} )
572
603
}
573
604
@@ -713,9 +744,13 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
713
744
for _ in 0 ..b. iters {
714
745
let input = black_box ( setup ( ) ) ;
715
746
747
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
716
748
let start = b. measurement . start ( ) ;
717
749
let output = routine ( input) . await ;
718
750
let end = b. measurement . end ( start) ;
751
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
752
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
753
+
719
754
b. value = b. measurement . add ( & b. value , & end) ;
720
755
721
756
drop ( black_box ( output) ) ;
@@ -729,12 +764,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
729
764
let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
730
765
let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
731
766
767
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
732
768
let start = b. measurement . start ( ) ;
733
769
// Can't use .extend here like the sync version does
734
770
for input in inputs {
735
771
outputs. push ( routine ( input) . await ) ;
736
772
}
737
773
let end = b. measurement . end ( start) ;
774
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
775
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
776
+
738
777
b. value = b. measurement . add ( & b. value , & end) ;
739
778
740
779
black_box ( outputs) ;
@@ -826,9 +865,13 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
826
865
for _ in 0 ..b. iters {
827
866
let mut input = black_box ( setup ( ) ) ;
828
867
868
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
829
869
let start = b. measurement . start ( ) ;
830
870
let output = routine ( & mut input) . await ;
831
871
let end = b. measurement . end ( start) ;
872
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
873
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
874
+
832
875
b. value = b. measurement . add ( & b. value , & end) ;
833
876
834
877
drop ( black_box ( output) ) ;
@@ -843,12 +886,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
843
886
let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
844
887
let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
845
888
889
+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
846
890
let start = b. measurement . start ( ) ;
847
891
// Can't use .extend here like the sync version does
848
892
for mut input in inputs {
849
893
outputs. push ( routine ( & mut input) . await ) ;
850
894
}
851
895
let end = b. measurement . end ( start) ;
896
+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
897
+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
898
+
852
899
b. value = b. measurement . add ( & b. value , & end) ;
853
900
854
901
black_box ( outputs) ;
0 commit comments