edit | blame | history | raw

2026-06-29 性能日志

用户目标

用户当前使用 V2.1.37 (build 20260629.0059),反馈每次识别后等待时间变长。用户同意先加入精确性能日志,不先盲改识别或粘贴逻辑。

已完成事项

  • 确认当前问题排查方向:先把录音停止、尾部等待、模型识别、后处理、等待热键释放、macOS 粘贴链路拆成可观测耗时段。
  • 在主识别流水线加入 PERF 前缀日志。
  • 在 macOS 剪贴板粘贴链路加入 PERF paste_clipboard_done 内部耗时日志。
  • 运行 gofmt
  • 运行 go test ./...,测试通过;存在当前环境下的 macOS 链接版本 warning,但无测试失败。
  • 运行 git diff --check,通过。
  • 用户确认生成诊断 DMG 后,递增到 2.1.38 (build 20260629.2014)
  • 已创建源码 commit 9d4f977026bbb4516f8cc97f715c0dc28bf2a13f
  • 已创建本地 tag v2.1.38-build20260629.2014-diagnostic
  • 已生成 arm64 本地诊断 DMG,并通过 hdiutil verify

关键决策

  • 本轮只加诊断日志,不改变录音、识别、尾部保护、粘贴、UI 文案和版本号。
  • 日志不额外记录音频内容;仅记录采样数、音频时长、文本 rune 数和分段耗时。
  • 日志统一使用 PERF 前缀,便于从 app.log 中筛选。
  • 本轮诊断包是本地诊断候选包,不是 App Store 上传包;最低系统版本为 macOS 14.0

文件变更

  • /Users/ar/Projects/PrivateVoice/privatevoice.src/app.go
  • 新增识别流水线 PERF 日志。
  • 记录 release tail wait、stop audio、voice activity check、recognize、postprocess、history、hotkey release wait、paste、pipeline total 等耗时。
  • /Users/ar/Projects/PrivateVoice/privatevoice.src/internal/input/paste_darwin.go
  • 新增 macOS 粘贴内部 PERF paste_clipboard_done 日志。
  • 记录辅助权限检查、剪贴板快照、写剪贴板、剪贴板校验、Cmd+V 和总耗时。
  • /Users/ar/Projects/PrivateVoice/privatevoice.src/build/darwin/Info.plist
  • 更新版本为 2.1.38,build 为 20260629.2014
  • /Users/ar/Projects/PrivateVoice/privatevoice.src/frontend/package.json
  • 更新版本为 2.1.38
  • /Users/ar/Projects/PrivateVoice/privatevoice.src/frontend/package-lock.json
  • 更新版本为 2.1.38
  • /Users/ar/Projects/PrivateVoice/CHANGELOG.md
  • 新增 v2.1.38 性能诊断包说明。
  • /Users/ar/Projects/PrivateVoice/Release/PrivateVoice-Dictation-2.1.38-build20260629.2014-diagnostic/
  • 新增诊断 DMG、SHA256SUMS.txtRELEASE_MANIFEST.md

未决问题

  • 需要用户安装并使用诊断包几天,复现慢感后再读取 PERF 日志判断慢在尾部等待、模型识别还是粘贴链路。
  • 项目未找到 CODEGRAPH.md,本轮未做 CODEGRAPH 更新;manifest 已记录该事实。

后续建议

  • 用户安装诊断 DMG 后,先复现 3-5 句短句和 2-3 句长句。
  • 重点检查 PERF pipeline_done total_msPERF recognize_done recognize_msPERF paste_done paste_msPERF paste_clipboard_done verify_ms
  • 如果主要慢在尾部等待,可评估把 SenseVoice 的 defaultReleaseTailDelay300ms 降到更小值,同时回归“首字/尾字不丢”。