FAS 帧感知
这篇只按当前真实 bin/cpu/fas.json 与运行时代码解释 FAS。
1. 先说结论
按当前仓库磁盘内容:
- 付费版有独立的
bin/cpu/fas.json - 免费版当前没有
bin/cpu/fas.json
所以官网文档不能再把 FAS 写成免费版的常改主线功能。
2. FAS 是做什么的
FAS 当前负责:
- 感知前台应用帧率节奏
- 识别应该按哪个目标 FPS 档位运行
- 把目标 FPS、
margin_fps、kp提供给运行时控制层
它不是线程分配文件。
3. 主要文件
FAS 当前主文件是:
bin/cpu/fas.json
当前真实结构主要包含:
defaultsappsprojects_murong_remote
其中真正参与运行时主逻辑的核心是:
defaultsapps
4. 顶层字段逐个解释
defaults
- 全局默认 FAS 参数
- 当前主线字段:
default_target_fpsbase_margin_fpskp
apps
- 应用级 FPS 档位配置数组
projects
- 当前文件里会保留这个数组
- 但现阶段主运行时重点不是它
_murong_remote
- 这是 APK/远端同步留下的元数据区
- 当前常见内容有:
config_versionsynced_atmanaged_packageswatermark
文档应明确写出:它不是运行时核心控制字段。
5. defaults 里的字段逐个解释
default_target_fps
- 默认目标 FPS
- 当应用没有更具体的档位时,会回落到这里
base_margin_fps
- 默认帧率余量
- 运行时会用它修正目标 FPS 的控制边界
kp
- 默认比例控制系数
- 用来决定误差反馈有多激进
6. apps[] 里的字段逐个解释
friendly
- 应用显示名
package
- 应用包名
- 当前
fas.json这里主字段是单数package,不是packages
fps_profiles
- 该应用支持的 FPS 档位列表
7. fps_profiles[] 里的字段逐个解释
target_fps
- 这条档位的目标 FPS
margin_fps
- 该档位覆盖的帧率余量
- 没写时,运行时会回落到默认 margin 逻辑
kp
- 该档位覆盖的控制系数
- 没写时,运行时会回落到全局默认
kp
fallback
- 是否把这条档位作为回退档位
- 当当前 FPS 无法精确匹配时,运行时会优先选择合适的回退档位
8. 当前运行时怎么选档
按当前代码,FAS 主要会:
- 先按包名找到应用
- 再根据当前 FPS 在
fps_profiles里选最接近的目标档 - 如果没法直接命中,就用带
fallback: true的档位兜底 - 如果某档没写
margin_fps或kp,就回落到defaults
所以文档里应该把 fallback 解释成"回退档位",而不是泛泛写成备用标记。
9. 什么时候该改 FAS
适合:
- 某个游戏 FPS 档识别不准
- 某个游戏明明锁 60,却总按更高档去跑
- 想给特定游戏补
120 / 144 / 165等档位 - 想微调该档位的
margin_fps或kp
不适合:
- 想改单个线程绑核
- 想改
main / gfx / render / worker - 想改模式频率上限下限
这些应该去线程篇或动态调频篇。
10. 一句话理解
FAS 帧感知就是:
用
fas.json里的defaults + apps[].fps_profiles[]去告诉运行时"当前应用该按哪个目标 FPS 档位控制",它当前是付费版独立配置,不是免费版主线文件。
