记
开发日志
← 返回日志

一个诊断包定责三件事:1.12.2 的证据链

NovaPlayer

反馈三连,先不猜

1.12.1 到用户真机后,报回来三件事:

  • 画面是出来了,但两侧留着宽边,像个浮窗没贴满舞台;
  • 点视频不暂停;
  • 关掉播放回到详情页,主窗左移、左侧边栏切出屏幕。

三件事看着像三个 bug。这次没急着改,先让用户在设置里导出诊断包——应用自 1.9.1 起就带这个功能:日志、硬件自检、引擎轨迹打包带走,密码令牌一律脱敏。

engine 行:你看的根本不是原生模式

诊断里 engine 一行写得明明白白:sessionFallback=true,原因 fit-check-failed。

翻译过来:自动档确实以 libmpv 原生模式起了播,但 1.12.1 新加的贴合自检没通过,整场悄悄回退成了跟随窗。浮窗感、两侧宽边、点不动(跟随窗的窗面会吞点击)、右下角的「遥控」形态文案——全是回退形态的样子,一件都对得上。

自检为什么没过,记录里也有:五点采样全部打在别的窗口上,原生窗的矩形回读是空的。而舞台同步记录里 scaleFactor=1——这台机器是 125% 缩放。DPI 倍率读错一位,窗口按错误倍率落位,位置必然对不上,列为头号嫌疑。

winbounds 行:恢复被「跳过」了

窗口位置轨迹行记着三段:启动时正常、起播前正常、关播时——post-play-skipped-state。

关播那一刻主窗正处于最大化状态,1.12.1 的恢复逻辑一看状态与快照不符,整段跳过了恢复,把窗口留在了跑偏的位置。不是恢复错了,是压根没恢复。

按证据开方

1.12.2 四条,全部有出处:

  1. 查 DPI 倍率获取与 DIP↔物理像素换算,修原生窗矩形回读;
  2. 窗口快照纳入状态:最大化就按最大化记,恢复时先还原状态再套位置,不许整段跳过;
  3. 搜索框文字再右移一档(用户同批反馈);
  4. 搜索历史下拉抬层级,不再被大图盖住下半截。

这一篇的教训很朴素:能失败着寄回来的日志,比十张截图都值钱。 播放器 1.9.1 埋下的诊断包,在两个版本之后把三件事一次说清——这类「给未来的自己留证据」的投入,回报率意外地高。