From fafc0734c774142db9dafa1f5ce7393746cfda88 Mon Sep 17 00:00:00 2001 From: host Date: Fri, 30 Oct 2026 13:50:18 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20screencast=20=E9=9A=94=E5=B8=A7?= =?UTF-8?q?=E6=94=B9=E6=AF=8F=E5=B8=A7=EF=BC=8C=E8=B7=9F=E6=89=8B=E4=BC=98?= =?UTF-8?q?=E5=85=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Page.startScreencast everyNthFrame 2 -> 1,画质 q60、尺寸 1280x800 不动。静态页不产生额外成本(帧只在重绘时来, 且 #187 起桥只写变化的帧字节);收益全部落在真正需要跟 手的时候:滚动、拖拽、动画期间帧率翻倍。测试断言同步。 --- cloud/playwright_browser.py | 8 +++++++- cloud/tests/test_playwright.py | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) 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"})