From 8841d74ac592d9adaf6f310fed6edd343905e3e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 16 May 2026 00:22:10 -0400 Subject: [PATCH] test(web-surface): lock active cadence to 120hz --- .../ely_app/src/shell/web_surface_cadence.rs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/crates/ely_app/src/shell/web_surface_cadence.rs b/crates/ely_app/src/shell/web_surface_cadence.rs index e546984..9bddfd1 100644 --- a/crates/ely_app/src/shell/web_surface_cadence.rs +++ b/crates/ely_app/src/shell/web_surface_cadence.rs @@ -128,6 +128,42 @@ mod tests { ACTIVE_POLL_INTERVAL, IDLE_POLL_INTERVAL, WebSurfaceInputKind, WebSurfacePollCadence, }; + const FRAME_BUDGET_120HZ: Duration = Duration::from_micros(8_333); + + #[test] + fn active_poll_interval_fits_120hz_budget() { + assert!(ACTIVE_POLL_INTERVAL <= FRAME_BUDGET_120HZ); + } + + #[test] + fn active_inputs_hold_120hz_poll_cadence() { + for input_kind in [ + WebSurfaceInputKind::Scroll, + WebSurfaceInputKind::Click, + WebSurfaceInputKind::Text, + WebSurfaceInputKind::Hover, + ] { + let start = Instant::now(); + let mut cadence = WebSurfacePollCadence::default(); + + cadence.note_ensure(input_kind, false, start); + cadence.note_poll_submitted(start); + + assert!(cadence.next_poll_delay(start) <= FRAME_BUDGET_120HZ); + } + } + + #[test] + fn loading_frames_hold_120hz_poll_cadence() { + let start = Instant::now(); + let mut cadence = WebSurfacePollCadence::default(); + + cadence.note_frame("loading", start); + cadence.note_poll_submitted(start); + + assert!(cadence.next_poll_delay(start) <= FRAME_BUDGET_120HZ); + } + #[test] fn idle_poll_uses_low_frequency_after_submission() { let start = Instant::now();