@@ -4,6 +4,8 @@ use std::iter::IntoIterator;
44use std:: time:: Duration ;
55use std:: time:: Instant ;
66
7+ use codspeed:: instrument_hooks:: InstrumentHooks ;
8+
79use crate :: black_box;
810use crate :: measurement:: { Measurement , WallTime } ;
911use crate :: BatchSize ;
@@ -93,13 +95,17 @@ impl<'a, M: Measurement> Bencher<'a, M> {
9395 R : FnMut ( ) -> O ,
9496 {
9597 self . iterated = true ;
98+
99+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
96100 let time_start = Instant :: now ( ) ;
97101 let start = self . measurement . start ( ) ;
98102 for _ in 0 ..self . iters {
99103 black_box ( routine ( ) ) ;
100104 }
101105 self . value = self . measurement . end ( start) ;
102106 self . elapsed_time = time_start. elapsed ( ) ;
107+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
108+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
103109 }
104110
105111 /// 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> {
153159 R : FnMut ( u64 ) -> M :: Value ,
154160 {
155161 self . iterated = true ;
162+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
156163 let time_start = Instant :: now ( ) ;
157164 self . value = routine ( self . iters ) ;
158165 self . elapsed_time = time_start. elapsed ( ) ;
166+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
167+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
159168 }
160169
161170 #[ doc( hidden) ]
@@ -282,9 +291,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
282291 for _ in 0 ..self . iters {
283292 let input = black_box ( setup ( ) ) ;
284293
294+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
285295 let start = self . measurement . start ( ) ;
286296 let output = routine ( input) ;
287297 let end = self . measurement . end ( start) ;
298+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
299+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
300+
288301 self . value = self . measurement . add ( & self . value , & end) ;
289302
290303 drop ( black_box ( output) ) ;
@@ -298,9 +311,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
298311 let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
299312 let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
300313
314+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
301315 let start = self . measurement . start ( ) ;
302316 outputs. extend ( inputs. into_iter ( ) . map ( & mut routine) ) ;
303317 let end = self . measurement . end ( start) ;
318+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
319+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
320+
304321 self . value = self . measurement . add ( & self . value , & end) ;
305322
306323 black_box ( outputs) ;
@@ -386,9 +403,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
386403 for _ in 0 ..self . iters {
387404 let mut input = black_box ( setup ( ) ) ;
388405
406+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
389407 let start = self . measurement . start ( ) ;
390408 let output = routine ( & mut input) ;
391409 let end = self . measurement . end ( start) ;
410+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
411+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
412+
392413 self . value = self . measurement . add ( & self . value , & end) ;
393414
394415 drop ( black_box ( output) ) ;
@@ -403,9 +424,13 @@ impl<'a, M: Measurement> Bencher<'a, M> {
403424 let mut inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
404425 let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
405426
427+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
406428 let start = self . measurement . start ( ) ;
407429 outputs. extend ( inputs. iter_mut ( ) . map ( & mut routine) ) ;
408430 let end = self . measurement . end ( start) ;
431+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
432+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
433+
409434 self . value = self . measurement . add ( & self . value , & end) ;
410435
411436 black_box ( outputs) ;
@@ -497,13 +522,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
497522 let AsyncBencher { b, runner } = self ;
498523 runner. block_on ( async {
499524 b. iterated = true ;
525+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
500526 let time_start = Instant :: now ( ) ;
501527 let start = b. measurement . start ( ) ;
502528 for _ in 0 ..b. iters {
503529 black_box ( routine ( ) . await ) ;
504530 }
505531 b. value = b. measurement . end ( start) ;
506532 b. elapsed_time = time_start. elapsed ( ) ;
533+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
534+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
507535 } ) ;
508536 }
509537
@@ -565,9 +593,12 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
565593 let AsyncBencher { b, runner } = self ;
566594 runner. block_on ( async {
567595 b. iterated = true ;
596+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
568597 let time_start = Instant :: now ( ) ;
569598 b. value = routine ( b. iters ) . await ;
570599 b. elapsed_time = time_start. elapsed ( ) ;
600+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
601+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
571602 } )
572603 }
573604
@@ -713,9 +744,13 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
713744 for _ in 0 ..b. iters {
714745 let input = black_box ( setup ( ) ) ;
715746
747+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
716748 let start = b. measurement . start ( ) ;
717749 let output = routine ( input) . await ;
718750 let end = b. measurement . end ( start) ;
751+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
752+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
753+
719754 b. value = b. measurement . add ( & b. value , & end) ;
720755
721756 drop ( black_box ( output) ) ;
@@ -729,12 +764,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
729764 let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
730765 let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
731766
767+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
732768 let start = b. measurement . start ( ) ;
733769 // Can't use .extend here like the sync version does
734770 for input in inputs {
735771 outputs. push ( routine ( input) . await ) ;
736772 }
737773 let end = b. measurement . end ( start) ;
774+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
775+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
776+
738777 b. value = b. measurement . add ( & b. value , & end) ;
739778
740779 black_box ( outputs) ;
@@ -826,9 +865,13 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
826865 for _ in 0 ..b. iters {
827866 let mut input = black_box ( setup ( ) ) ;
828867
868+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
829869 let start = b. measurement . start ( ) ;
830870 let output = routine ( & mut input) . await ;
831871 let end = b. measurement . end ( start) ;
872+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
873+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
874+
832875 b. value = b. measurement . add ( & b. value , & end) ;
833876
834877 drop ( black_box ( output) ) ;
@@ -843,12 +886,16 @@ impl<'a, 'b, A: AsyncExecutor, M: Measurement> AsyncBencher<'a, 'b, A, M> {
843886 let inputs = black_box ( ( 0 ..batch_size) . map ( |_| setup ( ) ) . collect :: < Vec < _ > > ( ) ) ;
844887 let mut outputs = Vec :: with_capacity ( batch_size as usize ) ;
845888
889+ let bench_start = InstrumentHooks :: current_timestamp ( ) ;
846890 let start = b. measurement . start ( ) ;
847891 // Can't use .extend here like the sync version does
848892 for mut input in inputs {
849893 outputs. push ( routine ( & mut input) . await ) ;
850894 }
851895 let end = b. measurement . end ( start) ;
896+ let bench_end = InstrumentHooks :: current_timestamp ( ) ;
897+ InstrumentHooks :: instance ( ) . add_benchmark_timestamps ( bench_start, bench_end) ;
898+
852899 b. value = b. measurement . add ( & b. value , & end) ;
853900
854901 black_box ( outputs) ;
0 commit comments