假如肉眼看到的画面能直接反映在调度上,也就是说以把调度器放在观看者的角度来决定性能,是否就能实现完美的性能控制和最大化体验?
FAS (Frame Aware Scheduling)就是这种调度概念,通过监视画面渲染来尽量控制性能以在保证渲染时间的同时实现最小化开销
-
fas-rs是运行在用户态的FAS(Frame Aware Scheduling)实现,对比核心思路一致但是在内核态的MI FEAS有着近乎在任何设备通用的兼容性和灵活性方面的优势- 对比其它用户态
FAS实现(如scene fas),fas-rs采用了侵入性更强的inline hook方法获取渲染时间,这带来了更准确的数据和更小的开销,然而这本质上是注入,可能被反作弊系统误判断,虽然我还没遇到过
- 为了最大化用户态的灵活性,
fas-rs有自己的一套插件系统,开发说明详见插件的模板仓库
-
-
keep_std
- 类型:
bool true: 永远在配置合并时保持标准配置的profile,保留本地配置的应用列表,其它地方和false相同 *false: 见配置合并的默认行为
- 类型:
-
userspace_governor
- 类型:
bool true: 开启内置用户空间调速器false: 关闭内置用户空间调速器
- 类型:
-
*: 默认配置
-
-
-
"package"=target_fpspackage: 字符串,应用包名target_fps: 一个数组(如[30,60,120,144])或者单个整数,表示游戏会渲染到的目标帧率,fas-rs会在运行时动态匹配
-
-
- mode:
- 目前
fas-rs还没有官方的切换模式的管理器,而是接入了scene的配置接口,如果你不用scene则默认使用balance的配置 - 如果你有在linux上编程的一些了解,向
/dev/fas_rs/mode节点写入4模式中的任意一个即可切换到对应模式,同时读取它也可以知道现在fas-rs所处的模式
- 目前
- 模式参数说明:
- margin(ms): 允许的掉帧余量,越小帧率越高,越大越省电(0 < margin < 1000)
- mode:
[config]
keep_std = true
userspace_governor = false
[game_list]
"com.hypergryph.arknights" = [30,60]
"com.miHoYo.Yuanshen" = [30,60]
"com.miHoYo.enterprise.NGHSoD" = [30,60,90]
"com.miHoYo.hkrpg" = [30,60]
"com.mojang.minecraftpe" = [60,120]
"com.netease.party" = [30,60]
"com.shangyoo.neon" = 60
"com.tencent.tmgp.pubgmhd" = [60,90,120]
"com.tencent.tmgp.sgame" = [30,60,90,120]
[powersave]
margin = 4
[balance]
margin = 3
[performance]
margin = 2
[fast]
margin = 1
-
- 删除本地配置中,标准配置不存在的配置
- 插入本地配置缺少,标准配置存在的配置
- 保留标准配置和本地配置都存在的配置
-
- 使用自动序列化和反序列化实现,无法保存注释等非序列化必须信息
- 安装时的自动合并配置不会马上应用,不然可能会影响现版本运行,而是会在下一次重启时用合并后的新配置替换掉本地的
-
-
模块每次安装都会自动调用一次
-
手动例
fas-rs merge /path/to/std/profile
-
# Termux
apt install rust zip ndk* clang binutils-is-llvm shfmt git-lfs python3
# Ubuntu(NDK is required)
apt install gcc-multilib git-lfs clang python3
# ruff(python lints & format)
pip install ruff
# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
# Cargo-ndk
cargo install cargo-ndk
# Clone
git clone https://github.com/shadow3aaa/fas-rs
cd fas-rs
# Compile
python3 ./make.py build --release