Skip to content

Commit 0751ab0

Browse files
committed
fix: keep short upload estimates monotonic
1 parent 87db9cb commit 0751ab0

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

  • apps/desktop/src-tauri/src/upload_health

apps/desktop/src-tauri/src/upload_health/timing.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ pub(super) fn upload_elapsed_after_rtt(
3535
};
3636

3737
match total_elapsed.checked_sub(rtt_elapsed) {
38-
Some(adjusted_elapsed) if adjusted_elapsed >= Duration::from_millis(50) => adjusted_elapsed,
38+
Some(adjusted_elapsed) if !adjusted_elapsed.is_zero() => {
39+
adjusted_elapsed.max(Duration::from_millis(50))
40+
}
3941
_ => total_elapsed,
4042
}
4143
}
@@ -148,7 +150,7 @@ mod tests {
148150

149151
#[test]
150152
fn keeps_total_elapsed_when_rtt_would_overcorrect() {
151-
for rtt in [500, 520, 600] {
153+
for rtt in [520, 600] {
152154
assert_eq!(
153155
upload_elapsed_after_rtt(
154156
Duration::from_millis(520),
@@ -159,6 +161,21 @@ mod tests {
159161
}
160162
}
161163

164+
#[test]
165+
fn faster_valid_uploads_do_not_report_lower_throughput_at_the_sample_floor() {
166+
let rtt = Some(Duration::from_millis(100));
167+
let faster = upload_elapsed_after_rtt(Duration::from_millis(149), rtt);
168+
let at_floor = upload_elapsed_after_rtt(Duration::from_millis(150), rtt);
169+
let slower = upload_elapsed_after_rtt(Duration::from_millis(151), rtt);
170+
171+
assert_eq!(faster, Duration::from_millis(50));
172+
assert_eq!(at_floor, Duration::from_millis(50));
173+
assert_eq!(slower, Duration::from_millis(51));
174+
assert!(
175+
upload_mbps_for_bytes(256 * 1024, faster) >= upload_mbps_for_bytes(256 * 1024, slower)
176+
);
177+
}
178+
162179
#[test]
163180
fn elapsed_is_positive_without_an_rtt_sample() {
164181
assert_eq!(

0 commit comments

Comments
 (0)