ASR-Android/docs/M2_STRESS_TEST.md

58 lines
2.8 KiB
Markdown

# 「会中手动成稿」共存压测方案
> 需求变更后取代原"会中自动滚动"压测(2026-09-11):滚动机制已拆除,
> 现行为 = 点「生成纪要」→ 对截至当时已定稿的字幕成稿,录音转写全程不停;
> 增量笔记(.notes.json)使第二次及以后的点击只处理新增句子(分钟级)。
>
> 通过线:录音零丢帧、定稿不超时不劣化、成稿期间 UI 不卡死、多次点击增量正确。
## 1. 准备
1. 安装 `build-check/summarize-manual-debug.apk`。
2. 测试音频:任意真实会议录音(日语最佳)≥30 分钟,播放器开单曲循环凑 2~3 小时。
3. 手机充电、屏幕常亮(锁屏/Doze 会干扰后台线程)。
4. 如要卸载旧版重装:`adb pull /sdcard/Android/data/com.k2fsa.sherpa.onnx/files/models/ D:\sherpa-models-backup` 备份模型,装完 push 回去。
## 2. 日志采集(PowerShell 开三个窗口)
```powershell
# 窗1:App 主日志(SLOT 对账 / SUMMARIZE / ROLLING 续跑标记)
adb logcat -s sherpa-onnx SummarizeLlmJni | Tee-Object D:\stress-app.log
# 窗2:每 5 分钟采样 RSS 与电池温度
while ($true) {
adb shell dumpsys meminfo com.k2fsa.sherpa.onnx | Select-String "TOTAL RSS"
adb shell dumpsys battery | Select-String "temperature|level"
Start-Sleep 300
} | Tee-Object D:\stress-rss.log
# 窗3:录音丢帧(看 s: 恒 0、m: 不增长)
adb logcat | Select-String "audioRecordData" | Tee-Object D:\stress-audio.log
```
## 3. 跑测步骤
1. Start 录音,循环播放会议音频。
2. 约 1 小时后点「生成纪要」→(第 1 次)全量流水线 → 出稿。**记录耗时 T1**。生成期间字幕应继续实时更新。
3. 再过 1 小时点第二次 → 日志应出现 `SUMMARIZE resume from notes at N/M`,只消化新增段,**记录耗时 T2**(应远小于 T1)。
4. 会议结束 Stop → 再点第三次出终稿。
5. 取回产物:
```powershell
adb exec-out run-as com.k2fsa.sherpa.onnx tar -C files/meetings -c . > D:\stress-out.tar
```
应看到 `<会话>.jsonl`(全量转写)、`<会话>.notes.json`(断点笔记)、`<会话>.md`(每次覆盖为最新终稿)。
## 4. 判读标准(把三个 log + 三份 md 发我)
| 项 | 通过线 | 依据 |
|---|---|---|
| 录音零丢帧 | `s:0` 恒 0,`m:` 在成稿窗口内不增长 | stress-audio.log |
| 定稿不劣化 | 成稿的 1~2 分钟窗口里 `SLOT … RESULT=TIMEOUT` 频率不高于基线 | stress-app.log |
| 增量正确 | 第 2/3 次点击 `resume from notes` 命中,T2 << T1;终稿 .md 覆盖全程且无重复条目 | stress-app.log + .md |
| 资源 | 引擎驻留只在生成期间(~3.5GB RSS 峰值,完成即回落);温度 >45°C 时记录掉速 | stress-rss.log |
| 质量 | 三次纪要人工评审"无漏关键决定";出典时间戳可回查 .jsonl | .md |
## 5. 红线回归
`MainActivity` 顶部 `summarizeEnabled=false` → 无按钮、无会话文件、行为与加摘要功能前一致。