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 1603063 : pub fn get(&self) -> Duration {
10 1603063 : self.accum
11 1603063 : }
12 240 : pub fn guard(&mut self) -> impl Drop + '_ {
13 240 : let start = Instant::now();
14 240 : scopeguard::guard(start, |last_wait_at| {
15 240 : self.accum += Instant::now() - last_wait_at;
16 240 : })
17 240 : }
18 :
19 96 : pub async fn measure<Fut, O>(&mut self, fut: Fut) -> O
20 96 : where
21 96 : Fut: Future<Output = O>,
22 96 : {
23 96 : let _guard = self.guard();
24 96 : fut.await
25 0 : }
26 : }
|