Line data Source code
1 : use std::time::{Duration, Instant};
2 :
3 : #[derive(Default)]
4 : pub struct ElapsedAccum {
5 : accum: Duration,
6 : }
7 :
8 : impl ElapsedAccum {
9 481436 : pub fn get(&self) -> Duration {
10 481436 : self.accum
11 481436 : }
12 80 : pub fn guard(&mut self) -> impl Drop + '_ {
13 80 : let start = Instant::now();
14 80 : scopeguard::guard(start, |last_wait_at| {
15 80 : self.accum += Instant::now() - last_wait_at;
16 80 : })
17 80 : }
18 :
19 32 : pub async fn measure<Fut, O>(&mut self, fut: Fut) -> O
20 32 : where
21 32 : Fut: Future<Output = O>,
22 32 : {
23 32 : let _guard = self.guard();
24 32 : fut.await
25 0 : }
26 : }
|