Lines Matching +full:2 +full:- +full:win

4 // Use of this source code is governed by the following BSD-style license:
42 // The algorithm keeps track of the best, 2nd best & 3rd best min
44 // the n'th best >= n-1'th best. It also makes sure that the three
50 // it has no value - the new min is <= everything else in the window
52 // every new min and overwrites 2nd & 3rd choices. The same property
53 // holds for 2nd & 3rd best.
69 pub fn new(val: T) -> Self { in new()
79 pub fn reset(&mut self, time: Instant, meas: T) -> T { in reset()
90 pub fn running_min(&mut self, win: Duration, time: Instant, meas: T) -> T { in running_min()
93 let delta_time = time.duration_since(self.estimate[2].time); in running_min()
96 if val.value <= self.estimate[0].value || delta_time > win { in running_min()
101 self.estimate[2] = val; in running_min()
103 } else if val.value <= self.estimate[2].value { in running_min()
104 self.estimate[2] = val; in running_min()
107 self.subwin_update(win, time, meas) in running_min()
111 pub fn _running_max(&mut self, win: Duration, time: Instant, meas: T) -> T { in _running_max()
114 let delta_time = time.duration_since(self.estimate[2].time); in _running_max()
117 if val.value >= self.estimate[0].value || delta_time > win { in _running_max()
122 self.estimate[2] = val; in _running_max()
124 } else if val.value >= self.estimate[2].value { in _running_max()
125 self.estimate[2] = val in _running_max()
128 self.subwin_update(win, time, meas) in _running_max()
131 /// As time advances, update the 1st, 2nd and 3rd estimates.
132 fn subwin_update(&mut self, win: Duration, time: Instant, meas: T) -> T { in subwin_update()
137 if delta_time > win { in subwin_update()
138 // Passed entire window without a new val so make 2nd estimate the in subwin_update()
139 // new val & 3rd estimate the new 2nd choice. we may have to iterate in subwin_update()
140 // this since our 2nd estimate may also be outside the window (we in subwin_update()
143 self.estimate[1] = self.estimate[2]; in subwin_update()
144 self.estimate[2] = val; in subwin_update()
146 if time.duration_since(self.estimate[0].time) > win { in subwin_update()
148 self.estimate[1] = self.estimate[2]; in subwin_update()
149 self.estimate[2] = val; in subwin_update()
152 delta_time > win.div_f32(4.0) in subwin_update()
155 // 2nd estimate from the 2nd quarter of the window. in subwin_update()
156 self.estimate[2] = val; in subwin_update()
158 } else if self.estimate[2].time == self.estimate[1].time && in subwin_update()
159 delta_time > win.div_f32(2.0) in subwin_update()
163 self.estimate[2] = val; in subwin_update()
189 assert_eq!(f.estimate[2].time, now); in reset_filter_rtt()
190 assert_eq!(f.estimate[2].value, rtt); in reset_filter_rtt()
208 assert_eq!(f.estimate[2].time, now); in reset_filter_bandwidth()
209 assert_eq!(f.estimate[2].value, bw); in reset_filter_bandwidth()
217 let win = Duration::from_millis(500); in get_windowed_min_rtt() localVariable
224 rtt_min = f.running_min(win, time, rtt_24); in get_windowed_min_rtt()
227 assert_eq!(f.estimate[2].value, rtt_24); in get_windowed_min_rtt()
230 rtt_min = f.running_min(win, time, rtt_25); in get_windowed_min_rtt()
233 assert_eq!(f.estimate[2].value, rtt_25); in get_windowed_min_rtt()
241 let win = Duration::from_millis(500); in get_windowed_min_bandwidth() localVariable
248 bw_min = f.running_min(win, time, bw_200); in get_windowed_min_bandwidth()
251 assert_eq!(f.estimate[2].value, bw_200); in get_windowed_min_bandwidth()
254 bw_min = f.running_min(win, time, bw_500); in get_windowed_min_bandwidth()
257 assert_eq!(f.estimate[2].value, bw_500); in get_windowed_min_bandwidth()
265 let win = Duration::from_millis(500); in get_windowed_max_rtt() localVariable
272 rtt_max = f._running_max(win, time, rtt_25); in get_windowed_max_rtt()
275 assert_eq!(f.estimate[2].value, rtt_25); in get_windowed_max_rtt()
278 rtt_max = f._running_max(win, time, rtt_24); in get_windowed_max_rtt()
281 assert_eq!(f.estimate[2].value, rtt_24); in get_windowed_max_rtt()
289 let win = Duration::from_millis(500); in get_windowed_max_bandwidth() localVariable
296 bw_max = f._running_max(win, time, bw_500); in get_windowed_max_bandwidth()
299 assert_eq!(f.estimate[2].value, bw_500); in get_windowed_max_bandwidth()
302 bw_max = f._running_max(win, time, bw_200); in get_windowed_max_bandwidth()
305 assert_eq!(f.estimate[2].value, bw_200); in get_windowed_max_bandwidth()
315 let win = Duration::from_secs(1); in get_windowed_min_estimates_rtt() localVariable
322 rtt_min = f.running_min(win, time, rtt_24); in get_windowed_min_estimates_rtt()
325 assert_eq!(f.estimate[2].value, rtt_24); in get_windowed_min_estimates_rtt()
328 rtt_min = f.running_min(win, time, rtt_25); in get_windowed_min_estimates_rtt()
331 assert_eq!(f.estimate[2].value, rtt_25); in get_windowed_min_estimates_rtt()
334 rtt_min = f.running_min(win, time, rtt_22); in get_windowed_min_estimates_rtt()
337 assert_eq!(f.estimate[2].value, rtt_22); in get_windowed_min_estimates_rtt()
347 let win = Duration::from_secs(1); in get_windowed_min_estimates_bandwidth() localVariable
354 bw_min = f.running_min(win, time, bw_400); in get_windowed_min_estimates_bandwidth()
357 assert_eq!(f.estimate[2].value, bw_400); in get_windowed_min_estimates_bandwidth()
360 bw_min = f.running_min(win, time, bw_500); in get_windowed_min_estimates_bandwidth()
363 assert_eq!(f.estimate[2].value, bw_500); in get_windowed_min_estimates_bandwidth()
366 bw_min = f.running_min(win, time, bw_200); in get_windowed_min_estimates_bandwidth()
369 assert_eq!(f.estimate[2].value, bw_200); in get_windowed_min_estimates_bandwidth()
379 let win = Duration::from_secs(1); in get_windowed_max_estimates_rtt() localVariable
386 rtt_max = f._running_max(win, time, rtt_24); in get_windowed_max_estimates_rtt()
389 assert_eq!(f.estimate[2].value, rtt_24); in get_windowed_max_estimates_rtt()
392 rtt_max = f._running_max(win, time, rtt_23); in get_windowed_max_estimates_rtt()
395 assert_eq!(f.estimate[2].value, rtt_23); in get_windowed_max_estimates_rtt()
398 rtt_max = f._running_max(win, time, rtt_26); in get_windowed_max_estimates_rtt()
401 assert_eq!(f.estimate[2].value, rtt_26); in get_windowed_max_estimates_rtt()
411 let win = Duration::from_secs(1); in get_windowed_max_estimates_bandwidth() localVariable
418 bw_max = f._running_max(win, time, bw_400); in get_windowed_max_estimates_bandwidth()
421 assert_eq!(f.estimate[2].value, bw_400); in get_windowed_max_estimates_bandwidth()
424 bw_max = f._running_max(win, time, bw_300); in get_windowed_max_estimates_bandwidth()
427 assert_eq!(f.estimate[2].value, bw_300); in get_windowed_max_estimates_bandwidth()
430 bw_max = f._running_max(win, time, bw_600); in get_windowed_max_estimates_bandwidth()
433 assert_eq!(f.estimate[2].value, bw_600); in get_windowed_max_estimates_bandwidth()