perf(app): defer web poll after ensure

This commit is contained in:
2026-05-16 04:40:34 -04:00
parent 654f661237
commit df092f285c
2 changed files with 8 additions and 2 deletions
@@ -62,6 +62,7 @@ impl WebSurfaceRuntime {
let user_navigation_input = input_requests_history_navigation(&input); let user_navigation_input = input_requests_history_navigation(&input);
let next_scroll_offset = input.scroll_offset; let next_scroll_offset = input.scroll_offset;
let submitted_at = Instant::now();
let started_loading = { let started_loading = {
let session = session_for_scope(&mut self.sessions, tab.id(), scope.clone()); let session = session_for_scope(&mut self.sessions, tab.id(), scope.clone());
let started_loading = session.started_loading(&requested_url, size, zoom_percent); let started_loading = session.started_loading(&requested_url, size, zoom_percent);
@@ -75,7 +76,7 @@ impl WebSurfaceRuntime {
session.size = size; session.size = size;
session.zoom_percent = zoom_percent; session.zoom_percent = zoom_percent;
session.scroll_offset = next_scroll_offset; session.scroll_offset = next_scroll_offset;
session.cadence.note_ensure(input_kind, started_loading, Instant::now()); session.cadence.note_ensure(input_kind, started_loading, submitted_at);
started_loading started_loading
}; };
@@ -103,6 +104,9 @@ impl WebSurfaceRuntime {
return Err("Servo worker was created but is no longer registered".to_string()); return Err("Servo worker was created but is no longer registered".to_string());
}; };
scoped.worker.submit_ensure(request); scoped.worker.submit_ensure(request);
if let Some(session) = self.sessions.get_mut(tab.id()) {
session.cadence.note_poll_submitted(submitted_at);
}
log_ensure_submitted(tab, size, input_kind.label(), enqueued_at, started_loading); log_ensure_submitted(tab, size, input_kind.label(), enqueued_at, started_loading);
Ok(WebSurfaceEnsureResult { requested_url, started_loading }) Ok(WebSurfaceEnsureResult { requested_url, started_loading })
@@ -128,7 +128,9 @@ fn store_tick_delay_tracks_runtime_cadence() -> Result<(), String> {
WebSurfaceInputOutcome::Applied, WebSurfaceInputOutcome::Applied,
); );
assert!(store.ensure_surface(&tab, ProfileDataMode::Transient, &[])); assert!(store.ensure_surface(&tab, ProfileDataMode::Transient, &[]));
assert_eq!(store.next_tick_delay(&visible), Duration::ZERO); let ensure_delay = store.next_tick_delay(&visible);
assert!(ensure_delay > Duration::ZERO);
assert!(ensure_delay <= ACTIVE_POLL_INTERVAL);
let _ = store.tick(&visible); let _ = store.tick(&visible);
let delay = store.next_tick_delay(&visible); let delay = store.next_tick_delay(&visible);