From df092f285cb540786f5541fd60b65c7a45eb7c19 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 04:40:34 -0400 Subject: [PATCH] perf(app): defer web poll after ensure --- crates/ely_app/src/shell/web_surface_runtime.rs | 6 +++++- crates/ely_app/src/shell/web_surface_runtime_tests.rs | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/ely_app/src/shell/web_surface_runtime.rs b/crates/ely_app/src/shell/web_surface_runtime.rs index cdd3885..abbe03d 100644 --- a/crates/ely_app/src/shell/web_surface_runtime.rs +++ b/crates/ely_app/src/shell/web_surface_runtime.rs @@ -62,6 +62,7 @@ impl WebSurfaceRuntime { let user_navigation_input = input_requests_history_navigation(&input); let next_scroll_offset = input.scroll_offset; + let submitted_at = Instant::now(); let started_loading = { let session = session_for_scope(&mut self.sessions, tab.id(), scope.clone()); let started_loading = session.started_loading(&requested_url, size, zoom_percent); @@ -75,7 +76,7 @@ impl WebSurfaceRuntime { session.size = size; session.zoom_percent = zoom_percent; 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 }; @@ -103,6 +104,9 @@ impl WebSurfaceRuntime { return Err("Servo worker was created but is no longer registered".to_string()); }; 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); Ok(WebSurfaceEnsureResult { requested_url, started_loading }) diff --git a/crates/ely_app/src/shell/web_surface_runtime_tests.rs b/crates/ely_app/src/shell/web_surface_runtime_tests.rs index 82150b4..f5c60d4 100644 --- a/crates/ely_app/src/shell/web_surface_runtime_tests.rs +++ b/crates/ely_app/src/shell/web_surface_runtime_tests.rs @@ -128,7 +128,9 @@ fn store_tick_delay_tracks_runtime_cadence() -> Result<(), String> { WebSurfaceInputOutcome::Applied, ); 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 delay = store.next_tick_delay(&visible);