- M7 launcher 重写 5 期(虚拟化宫格/meow_theme 单一权威/横幅动画/自定义 PIN 键盘) - OOM 通用化(cachegov 上收 SDK)、自动切歌根治、meowpanel jv_free 泄漏修复、Hello 滚动卡顿修复 - ncm 歌词 UI / 媒体通知封面 / 封面分辨率 640 - 5 bug 修复:ncm 后台化 UI 叠层+点击穿透、再进 ncm 桌面叠层、播放页新旧 UI 叠层抢刷脏区(meow_ui_gfx 恢复边沿整帧重画)、PIN 亮屏亮度跳(keys.c meow_panel_on 按 settings_brightness_clamped 恢复)、通知中心封面显歌单封面(cover.c save_cover_raw 加 is_song + 命中块守卫) - 四 App 统一重链新 meow_ui.a 51caee4a;M6.19=0.8.19 固件 2d2331f2 推卡自刷验收全绿
83 lines
4.4 KiB
C
83 lines
4.4 KiB
C
/*
|
||
* meow_cachegov.h — 磁盘缓存 page-cache 治理 SDK 库(A 的主导/治本侧)。
|
||
*
|
||
* 归属(devdocs/plan/ARCHITECTURE_PRINCIPLES.md ③混合,2026-09-02 用户定案):
|
||
* - A(DONTNEED 热路径,需要 read_pos) → 随 SDK 库(本文件,进程内直读 read_pos,无 IPC)。
|
||
* - C(设备级 /proc/meminfo Cached 监控降载)→ 归系统服务 meow_svc_perf;本模块只读其共享状态
|
||
* 文件(MEOW_CACHEGOV_C_FILE)作为「降载」信号,供 App 查询。
|
||
* - App(如 ncm)侧只调本库接口:登记文件 + read_pos 回调 + tick + drop_finished + 查询降载,
|
||
* 不写自己的治理算法。
|
||
*
|
||
* 权威方案:devdocs/plan/OOM_PAGECACHE_GOVERNANCE.md。红线:**L2(丢 read_pos 前方)禁止**,
|
||
* 本库绝不 drop `[read_pos, ...)` 任何未解码区。
|
||
*
|
||
* 分级(§2.2):
|
||
* L0(默认,安全): 曲终/commit 后对整文件 posix_fadvise(DONTNEED)——播放器已退出解码循环。
|
||
* L1(可选,主杠杆): 播放中丢已读前缀 `[0, read_pos-keep_hot)`,保 keep_hot 窗口供倒带;
|
||
* 仅 drop_mode>=1 且 A 未回退到 ≥2 时执行。
|
||
* L2(禁止,红线): 绝不丢 read_pos 前方/当前未解码页。
|
||
*
|
||
* underrun 回退(§2.3,SDK 内置):App 在 pread 慢(数据在盘上但 >threshold ms)处上报
|
||
* meow_cachegov_note_refault();本库滚窗 10s,超门限逐级回退(放大 keep_hot → 降 L0 → 关 A)。
|
||
*
|
||
* 接口按 OOM 文档 §4.2 + §4.4;值语义与 mem_watch 的「滞回三档」风格对齐(自含:pthread + meow_log)。
|
||
*/
|
||
#ifndef MEOW_CACHEGOV_H
|
||
#define MEOW_CACHEGOV_H
|
||
|
||
#include <stddef.h>
|
||
#include <stdint.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
typedef struct meow_cachegov_cfg {
|
||
int enabled; /* 总开关:0=A 完全不丢页(register/tick/drop_finished 全部 no-op) */
|
||
int cached_threshold_kb; /* 保留:C 侧阈值归 svc_perf(本库恒 0,只读不控,防误用) */
|
||
int dirty_warn_kb; /* 保留:同上(svc_perf 用;本库只透传日志) */
|
||
size_t keep_hot_bytes; /* L1 保留窗口:read_pos 之后保多少不丢(回退时自动放大) */
|
||
size_t min_hot_ahead; /* L2 红线:read_pos 前方至少保多少——仅防御注释,**绝不参与 drop** */
|
||
int drop_mode; /* 0=仅曲终(L0);1=曲终+播放中丢已读前缀(L0+L1,配 seek 回退) */
|
||
int refault_backoff; /* 10s 窗口内 refault 触发回退的门限(次数) */
|
||
} meow_cachegov_cfg_t;
|
||
|
||
/* 登记本次治理的缓存文件(正式缓存文件路径 + 大小 + read_pos 回调 + 回调 ctx)。
|
||
* 返回 0=ok / 负=错。重复 path 幂等(替换条目)。 */
|
||
int meow_cachegov_register(const char *path, uint64_t size,
|
||
uint64_t (*read_pos_fn)(void *ctx), void *ctx);
|
||
|
||
/* 注销该 path 的治理条目(曲终/切歌后清理)。返回 0=找到并删 / 负=不在册。 */
|
||
int meow_cachegov_unregister(const char *path);
|
||
|
||
/* 周期调用(播放循环节拍 / 监控线程均可):
|
||
* ① 按回退档执行 L1 丢弃(丢已读前缀 [0, read_pos-keep_hot));
|
||
* ② 评估 refault 滚窗做逐级回退。 */
|
||
int meow_cachegov_tick(void);
|
||
|
||
/* 曲终/commit 后:对刚播完文件做整文件 L0 DONTNEED + 注销该条目。
|
||
* 回退档>=3(A 整体关闭)时不丢页(L0 也被关,见 §2.3 步骤 3)。 */
|
||
int meow_cachegov_drop_finished(const char *path);
|
||
|
||
/* 下载/预取方查询(1=应暂停)。数据源 = A 侧回退硬暂停 OR svc_perf C(Cached 超阈值)降载。 */
|
||
int meow_cachegov_download_paused(void);
|
||
int meow_cachegov_prefetch_paused(void);
|
||
|
||
/* 设置/读取治理配置(运行时覆盖编译期默认)。 */
|
||
int meow_cachegov_set_cfg(const meow_cachegov_cfg_t *cfg);
|
||
int meow_cachegov_get_cfg(meow_cachegov_cfg_t *cfg);
|
||
|
||
/* ---- refault 上报 + A 回退状态(underrun 检测,§2.3)---- */
|
||
/* App 在 pread 慢(数据已在盘上、读出 >threshold ms)处上报一次 refault。线程安全。 */
|
||
void meow_cachegov_note_refault(void);
|
||
/* A 当前回退档:0=正常 1=keep_hot 放大 2=降 L0(L1 关) 3=A 关。 */
|
||
int meow_cachegov_backoff_level(void);
|
||
|
||
/* ---- 宿主测试桩(设备永不调用;-1=真实时钟,>=0 时用注入值替代 monotonic 时钟)---- */
|
||
void meow_cachegov_test_set_time_ms(int64_t t);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* MEOW_CACHEGOV_H */
|