Skip to content

[iOS][功耗优化] 暂停恢复时的健康检查考虑 lazy 状态,减少非必要批量探测 #2

Description

@wangwei354

希望优化 iOS 从暂停状态恢复时的自动健康检查策略,在保留必要连通性验证的同时,减少未使用节点的批量探测及相关 CPU、网络栈和无线通信开销。

以下依据 Hako 提交 35c9bb6 。目前确认的是源码行为。

当前行为

stopPauseTracking := pause.RegisterTicker(ticker, hc.interval, func() { go hc.check() })

中,健康检查注册的恢复回调直接执行 hc.check():

stopPauseTracking := pause.RegisterTicker(
ticker, hc.interval,
func() { go hc.check() },
)

普通定时触发分支会判断 lazy 和最近使用时间:

if !hc.lazy || since < hc.interval {
hc.check()
}

但恢复回调没有经过这层判断。因此,当设备实际发生“暂停 → 恢复”转换时,已启动自动健康检查的 provider 即使配置了 lazy: true,也可能立即参与检查。

检查会遍历对应 provider 的节点;多个 provider 同时恢复时,可能形成较大范围的批量探测。实际范围仍受测试 URL、过滤条件和探测准入控制影响,并非必然
测试所有订阅节点。

另外,BoxService.Wake() (

func (s *BoxService) Wake() {
) 会调用
DeviceWake();Pause() 设置的一分钟兜底计时器
(
func (s *BoxService) armEndPauseTimer() {
)
也可以触发恢复。因此,恢复检查的发生不一定代表用户开始使用这些 provider。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions