diff --git a/plugins/_browser/api/ws_browser.py b/plugins/_browser/api/ws_browser.py index 6e24b268c..ec5e137b3 100644 --- a/plugins/_browser/api/ws_browser.py +++ b/plugins/_browser/api/ws_browser.py @@ -11,7 +11,7 @@ from helpers.ws_manager import WsResult from plugins._browser.helpers.runtime import get_runtime, list_runtime_sessions -FRAME_IDLE_POLL_SECONDS = 0.05 +FRAME_READ_TIMEOUT_SECONDS = 0.5 FRAME_RETRY_DELAY_SECONDS = 0.5 FRAME_STATE_REFRESH_SECONDS = 0.75 SNAPSHOT_STATE_POLL_SECONDS = 0.75 @@ -445,11 +445,14 @@ class WsBrowser(WsHandler): last_state_refresh = now try: - frame = await runtime.call("pop_screencast_frame", stream_id) + frame = await runtime.call( + "read_screencast_frame", + stream_id, + timeout=FRAME_READ_TIMEOUT_SECONDS, + ) except KeyError: break - if frame is None: - await asyncio.sleep(FRAME_IDLE_POLL_SECONDS) + except TimeoutError: continue frame["context_id"] = context_id diff --git a/tests/test_browser_agent_regressions.py b/tests/test_browser_agent_regressions.py index fff617ce5..eef2e141b 100644 --- a/tests/test_browser_agent_regressions.py +++ b/tests/test_browser_agent_regressions.py @@ -1162,7 +1162,10 @@ def test_browser_viewer_defaults_to_live_screencast_with_snapshot_fallback(): assert "initial_viewport = self._viewport_from_data(data)" in ws_browser assert '"set_viewport"' in ws_browser assert "start_screencast" in ws_browser - assert "pop_screencast_frame" in ws_browser + assert "read_screencast_frame" in ws_browser + assert "FRAME_READ_TIMEOUT_SECONDS" in ws_browser + assert "FRAME_IDLE_POLL_SECONDS" not in ws_browser + assert "except TimeoutError:" in ws_browser assert "stop_screencast" in ws_browser assert "viewer_transport == VIEWER_TRANSPORT_SCREENCAST" in ws_browser assert '"viewer_transport": viewer_transport' in ws_browser