fix(ncm): 离线重试改单调钟节奏闸,断网不再每个 tick 重试(M10)
根因(真机日志 19000100_000000_7534.log):meow_ui_time_ms() 在设备上返回坏值——
低 32 位是「开机秒数×1000」(无毫秒),高 32 位每次调用随机(REPORT §42)。
旧守卫 `!g_home_thr_on && (!g_offline_retry_ms || now - g_offline_retry_ms >= 30000)`
因此恒真:worker 一收工,下一个 tick 立刻再重试;真机 74s 内 10 次
(间隔 5-7s 只是失败请求本身的连接超时)。第二条链是 else 分支清零重试时刻,
online/offline 一抖动就再试。
修复:
- 新增 app/logic/retry_ctl.{h,c}:节奏闸只做差值,时钟由调用方给可信单调钟
(home.c 改传 core 的 ncm_monotonic_ms());回退不下溢(重定基准、不重试);
busy 单飞;在线/离线抖动不重置基准;首次进离线立即探测一次,之后严格 ≥30s。
- home_tick 不再使用入参 now(真机坏值无效化);新增 home_retry_reset()。
- 静默重试不再走完整 home_reload:新增 home_reload_ex(silent) 不预读盘
(旧实现每轮在 UI 线程同步读 playlists.bin)、home_apply_ex(keep_scroll)
保留滚动位置、worker 记 g_home_changed 决定是否需要重绘——旧实现每轮
home_apply() 复位滚动+整帧重绘,是「歌单列表滑动特别卡」的直接来源。
- worker 线程 pthread_detach(旧代码每轮泄漏线程栈)。
This commit is contained in:
1 parent
aa225a1973
commit
35a636ef42
4 files changed
+149
-27
No files matched your search
@@ -345,6 +345,7 @@ void home_touch_down(int x, int y);
|
||||
void home_touch_move(int x, int y);
|
||||
void home_reload(void); /* 刷新我的歌单(后台 worker,非阻塞) */
|
||||
void home_tick(uint64_t now); /* UI tick:检查歌单 worker 是否完成并刷新 */
|
||||
void home_retry_reset(void); /* M10:清离线自动重试节奏(页创建/登出/宿主测试) */
|
||||
int home_go_up(void); /* 左缘返回:到底则退出 */
|
||||
|
||||
/* playlist */
|
||||
|
||||
Reference in new issue
Block a user