Skip to content

[Performance][macOS] CDP 断开后 injector watcher 仍常驻并高频重试,导致系统明显卡顿 #218

Description

@saulzj

问题描述

安装并启用 Codex Dream Skin 后,电脑出现明显卡顿。检查发现:当 Codex 的 CDP 端口不可用时,Dream Skin 的 injector watcher 仍由 launchctl 常驻运行,并持续请求已经消失的 127.0.0.1:9341 端点。

watcher 的请求退避最多只到 500ms,也就是端口不可用时仍会约每秒尝试 2 次;错误日志每 2 秒写入一次 fetch failed。与此同时,当前 CSS 包含多处大面积 backdrop-filter: blur(...),可能进一步增加窗口合成负担。

实际结果

CDP 已不可用,但后台任务仍保持运行:

session=stale
label=Skin 异常
port=9341
injector=false
cdp=false
theme=路飞·首次二档·暗黑
applied_theme=路飞·首次二档·暗黑

launchctl print gui/501/com.openai.codex-dream-skin-studio.injector 仍显示:

state = running
active count = 1
program = .../cua_node/bin/node
arguments = ... injector.mjs --watch --port 9341 ...

injector-error.log 中出现连续错误:

[dream-skin] 2026-07-22T15:52:39.646Z fetch failed
[dream-skin] 2026-07-22T15:52:41.652Z fetch failed
[dream-skin] 2026-07-22T15:52:43.657Z fetch failed
[dream-skin] 2026-07-22T15:52:45.664Z fetch failed
[dream-skin] 2026-07-22T15:52:47.674Z fetch failed

本次诊断时日志中已有 355 条 fetch failed

对应循环的最大退避仅为 500ms:

await new Promise((resolve) => setTimeout(resolve, discoveryDelayMs));
discoveryDelayMs = Math.min(500, Math.round(discoveryDelayMs * 1.6));

当前 dream-skin.css 中有 8 处 backdrop-filter: blur(...)

期望结果

建议至少采取其中一种方式:

  1. 连续多次无法访问 CDP 后自动退出 watcher,并移除/停止对应 launchd job。
  2. 在 Codex 退出后采用更长的指数退避(例如逐步延长到 30–60 秒),停止重复写入相同错误。
  3. 检测到记录的 Codex PID 已退出时立即停止 watcher。
  4. 提供“轻量模式”,禁用 backdrop-filter、大面积阴影和透明合成。
  5. Pause / Restore 操作应确保 watcher 和 launchd job 一并终止。

复现步骤

  1. 在 macOS 安装 Codex Dream Skin。
  2. 应用任意自定义背景主题。
  3. 正常关闭或重启 Codex,使原 CDP 端点消失。
  4. 等待几分钟。
  5. 检查 launchctl job、injector-error.log 和 Dream Skin status。
  6. 可以看到 watcher 仍在运行,且日志持续追加 fetch failed;系统操作明显变卡。

环境

  • macOS: 26.5 (Build 25F71)
  • Architecture: arm64
  • Codex: 26.715.72359
  • Codex Dream Skin Studio: 1.2.0
  • Repository commit: e776fa6d5361a2bdd5c1614674397681e7b00874
  • Bundled Node.js: v24.14.0
  • CDP port: 9341

补充说明

由于本机受管理目录权限限制,安装后仅将 STATE_ROOT~/Library/Application Support/CodexDreamSkinStudio 调整到了 ~/.codex/codex-dream-skin-state。除此之外:

  • scripts/injector.mjs 未修改
  • assets/dream-skin.css 未修改
  • watcher、launchctl job 和 CDP 逻辑均保持仓库原样

因此状态目录位置不应影响高频重试循环本身。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingstatus: consideringMaintainer likes the idea, evaluating for a future merge

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions