diff --git a/cloud/playwright_browser.py b/cloud/playwright_browser.py index 03e00ab..f106b0c 100644 --- a/cloud/playwright_browser.py +++ b/cloud/playwright_browser.py @@ -312,10 +312,16 @@ class Browser: pass cdp.on("Page.screencastFrame", _on_frame) + # everyNthFrame 1: full frame rate during motion. + # Static pages cost nothing extra (frames only arrive + # on repaint, and the bridge writes only changed + # bytes), so dropping the frame-skip buys + # responsiveness exactly when it matters -- scrolling, + # dragging, animation -- without a static-page tax. cdp.send("Page.startScreencast", {"format": "jpeg", "quality": 60, "maxWidth": 1280, "maxHeight": 800, - "everyNthFrame": 2}) + "everyNthFrame": 1}) self._cdp = cdp self._cdp_page = self._page except Exception: # noqa: BLE001 - screencast is best-effort diff --git a/cloud/tests/test_playwright.py b/cloud/tests/test_playwright.py index 43867bd..e9706d3 100644 --- a/cloud/tests/test_playwright.py +++ b/cloud/tests/test_playwright.py @@ -256,7 +256,7 @@ class BrowserTest(unittest.TestCase): self.assertIn(("Page.startScreencast", {"format": "jpeg", "quality": 60, "maxWidth": 1280, "maxHeight": 800, - "everyNthFrame": 2}), + "everyNthFrame": 1}), [(m, p) for m, p in self.page.cdp.sent]) handler = self.page.cdp.handlers["Page.screencastFrame"] handler({"sessionId": "s1", "data": "FRAMEDATA"})