Skip to content

OWC v1.4.10 — 复归累计确认 / cleanup 幂等化 / 归因修复

Latest

Choose a tag to compare

@Sillybomo Sillybomo released this 16 Sep 11:36

OWC v1.4.10

亮屏快充守护的稳定性修复版。四项改动,全部来自 2026-09-16 真机实测发现的问题。

核心语义不变:安全栏 = 保险丝(不到阈值不干涉,一到阈值立即熔断并完全交还系统)。
阈值全局统一,不区分游戏。


1. 复归确认「连续」→「累计/去尖刺」

问题:v1.4.8 的复归死区 + 连续 3 次确认,在真实游戏负载下从未走完过 3/3。

实测日志(异环 + 亮屏快充,2026-09-16 00:18~00:21):

时刻 CPU 状态
00:18:22 83300 复归确认中 1/3
00:18:27 94200 熔断持续(+10900,跨回熔断线)
00:19:21 91500 复归确认中 1/3
00:19:27 93800 熔断持续(+2300)
00:19:39 91500 复归确认中 1/3
00:19:44 93800 熔断持续
00:20:45 90700 复归确认中 1/3
00:20:51 93400 熔断持续

全日志统计:1/3 出现 4 次,2/3 与 3/3 各 0 次。

根因:单次采样尖刺(±5.5°C)比确认窗口更宽,"连续 N 次"是个永远攒不满的窗口。
分子恒为 1,紧接着必被一次撞线清零。

曾评估把 RESUME_CONFIRM 从 3 降到 2 —— 实测证明无效:分子只到 1,降为 2 同样攒不满。

修法:达标次数累加,尖刺不再立即清零;仅当「连续尖刺」超过容差才重置。
新增 RESUME_SPIKE_TOLERANCE=2。

熔断判定(TRIP_*)与保险丝行为零变化 —— 仅放宽"必须连续"。

2. cleanup 幂等化(根治 trap 并发重入)

问题:同一秒执行 4 次 restore。

实测日志:

00:11:18  守护进程退出,恢复所有系统状态 ×4
00:11:18  已交还 cool_down 降流控制权      ×4
00:11:38  守护进程退出 ×2   已交还 ×2

根因:trap cleanup EXIT INT TERM 三个信号指向同一函数,而函数内 exit 0
会再次触发 EXIT,叠加外部并发信号即造成重入。

修法:RESTORE_DONE 幂等标志 + mkdir 原子锁做退出互斥。

单测抓到的坑:初版在"抢锁失败"分支也置位了 RESTORE_DONE=1,会导致抢锁失败者
既不还原也不复位标志 ⇒ 锁释放后 restore 永不执行、系统状态静默卡住。
已修正为「抢锁失败不置位」,保留重试机会。

3. 来源=unknown 归因修复

问题:WARP_GUARD_SRC 只在真熔断时赋值,而守护退出 / 用户关磁贴 / 断充
都会直接调用 restore_warp_charge,此时为空 ⇒ 日志打印 来源=unknown。

修法:restore_warp_charge 接受归因参数,5 处调用点显式传入:

  • 过热熔断 → cpu / gpu / battery / shell
  • 守护退出 → shutdown
  • 用户操作 / 断充 → user

4. 运行位置统一 vtools/

问题:原设计把脚本拷入 tmp/ 运行,导致 tmp/ 与 vtools/ 各存一份内容相同的
warp_charge.sh,核查时无法判断"哪个在跑",且曾造成版本号滞后。

修法:脚本在 vtools/ 原地运行,tmp/ 只放运行时产物(日志/锁/过滤名单)。
warp_charge.sh 路径逻辑本就兼容两种位置,故本次只改 service.sh / watchdog.sh
两处启动方,核心脚本零改动。


验证

  • 复归状态机单测 21/21 通过(含「达标夹尖刺」—— v1.4.8 会失败的场景)
  • cleanup 幂等单测 11/11 通过(含上述初版 bug 点)
  • 四脚本语法检查全绿,无 CRLF
  • 真机热更验收:双守护 PPID=1 稳定存活,亮屏快充正常激活
    11984     1 sh .../OWC/vtools/warp_charge.sh
    12165     1 sh .../OWC/vtools/watchdog.sh
    19:29:28  亮屏快充已激活(充电接入|游戏=0)
    
  • 归因修复当场验证生效:日志打出 来源=shutdown(旧版此处为 unknown)

升级

直接刷入 OWC_v1.4.10.zip 覆盖安装即可,无需清数据。
App(控制中心磁贴)随包更新,APK 沿用旧版签名,可正常覆盖。

versionCode 18 → 19。


@author bomo