84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
# Mi 8 Lite 真机适配(2026-09-30)
|
||
|
||
已在连接的 Mi 8 Lite 上安装优化版 Android 客户端。相同村庄、24 只测试怪物(总计 28 个 actor)、
|
||
60% 场景分辨率、MSAA 1×、30 FPS 上限下,完整场景从约 4.9 FPS 提高到约 30 FPS;
|
||
默认 75% 场景分辨率、MSAA 2× 也达到约 30 FPS,UI 保持 2280×1080 屏幕分辨率。
|
||
|
||
## 设备与方法
|
||
|
||
- Xiaomi Mi 8 Lite(platina),Snapdragon 660 / Adreno 512,4 GB RAM,2280×1080 / 60 Hz。
|
||
- LineageOS 22.2-20260103-UNOFFICIAL-platina,Android 15 / API 35;本轮没有更换系统或 GPU 驱动。
|
||
- APK 内的原生代码以 Release 构建;使用同一份中文资源,版本替换通过 `adb install -r` 保留资源。
|
||
- 本地测试服 `metin2_map_a1`,`--fake-mobs 24`;完整场景包含地形、角色、特效、触控与 UI。
|
||
- 每次排除加载后第一个 2 秒窗口,再取 6 个 2 秒窗口平均;完整场景做重复测试。
|
||
- 手机经 USB 充电,电池温度约 28–32°C;电流/功率读数不可用,本轮不能评价续航或长期热降频。
|
||
|
||
## 实现
|
||
|
||
1. 每次绘制的固定管线状态由动态 storage buffer 改为 std140 动态 uniform buffer,
|
||
使 GPU 使用适合常量广播的访问路径;1264 字节布局保持一致,骨骼调色板仍用 storage buffer。
|
||
2. 片元管线按两个纹理阶段的操作、参数及透明测试开关/函数进行 specialization,
|
||
编译时排除不使用的混合与 discard 分支;透明参考值、雾、材质因子仍是动态参数。
|
||
管线缓存包含全部 specialization 值,避免不同材质误用同一管线。
|
||
3. Android Adreno 512 在没有保存帧率偏好时默认省电模式(30 FPS);保存设置和显式测试参数优先。
|
||
场景分辨率、抗锯齿及其他 GPU 的初始帧率设置保持原有默认值。
|
||
4. 修复 Android 切后台时显示 Surface 丢失导致的退出:获取图像和提交显示均处理
|
||
`VK_ERROR_SURFACE_LOST_KHR`,下一次 SDL 生命周期处理后重建 Surface、交换链与显示信号量。
|
||
5. 性能工具支持选择场景分辨率、MSAA 和帧率上限,并允许新安装设备的性能日志目录为空。
|
||
|
||
`--generic-shaders` / `MT_GENERIC_SHADERS=1` 可关闭片元专用化用于诊断,仍保留 uniform buffer 优化。
|
||
|
||
## 测量
|
||
|
||
| 构建 / 完整场景 | 场景比例 / MSAA | 平均 FPS | GPU ms |
|
||
| --- | --- | ---: | ---: |
|
||
| 优化前 | 0.60 / 1× | 4.88 | 205.51 |
|
||
| 优化前重复 | 0.60 / 1× | 4.87 | 205.54 |
|
||
| 仅 uniform buffer | 0.60 / 1× | 11.80 | 84.91 |
|
||
| 仅 uniform buffer 重复 | 0.60 / 1× | 11.73 | 85.16 |
|
||
| 加片元 specialization | 0.60 / 1× | 29.97 | 26.94 |
|
||
| 加片元 specialization 重复 | 0.60 / 1× | 30.00 | 26.37 |
|
||
| 优化后较高画质 | 0.75 / 2× | 30.02 | 27.33 |
|
||
| 优化后全分辨率测试 | 1.00 / 2× | 30.03 | 29.54 |
|
||
|
||
仅跳过地形的分段测试:优化前 15.45 FPS / GPU 64.72 ms,uniform buffer 后 29.98 FPS / 26.87 ms,
|
||
再专用化后 30.05 FPS / 21.06 ms。正常版本保留地形;分段测试只用于定位开销。
|
||
|
||
60% 同参数对比约提升 6.1 倍,GPU 时间减少约 87%。FPS 已触及测试上限,不能据此推算 60 FPS 能力。
|
||
实时动画导致重复启动时的绘制数略有变化;录制帧的对比另用完全一致的绘制数据。
|
||
|
||
这些结果说明此前低帧率有很大的客户端渲染优化空间;它们不能单独证明驱动没有其他问题。
|
||
|
||
## 画面与功能验证
|
||
|
||
录制村庄的完整绘制数据,对优化前、uniform buffer 版及专用化版分别回放;
|
||
另回放已有的刺客技能和目标透明度混合捕获。屏幕像素比较排除动态 FPS 显示矩形
|
||
`x=[140,340), y=[0,50)` 后,三种场景均为 **0 个不同像素**;目标透明度捕获连 FPS 区域也完全相同。
|
||
这是对选定捕获的回归检查,未覆盖所有地图和技能。
|
||
|
||
Android Release 和 macOS Release 构建通过;真机默认配置、移动、背包、切前后台与正常登录启动的结果
|
||
见下方最终测试结果及截图。测试结束恢复正常服务器选择界面,没有自动登录测试账号。
|
||
|
||
## 原始证据
|
||
|
||
所有文件在 `build/qa/xiaomi8lite-adaptation-20260930/`(构建产物,不入 Git):
|
||
|
||
- `baseline/`、`ubo/`、`specialized/`、`quality75/`、`quality100/`:CSV、截图、内存快照、汇总 JSON。
|
||
- `default-profile.csv` / `default-profile.json`:最终安装版的默认参数测试。
|
||
- `adaptation.mtdr`、`*-replay.bmp`、`baseline-assassin-skill.bmp` / `final-assassin-skill.bmp`、
|
||
`baseline-destalpha.bmp` / `final-destalpha.bmp`、`pixel-comparison.json`:相同绘制数据回放及像素差异。
|
||
- `movement.png`、`inventory.png`、`resume.png`、`normal-login.png`:功能截图。
|
||
- `final.apk`:最终已安装版本;`resume-build.log` / `macos-build.log`:最终构建记录。
|
||
|
||
本轮没有进行真实服务器的账号登录、多人战斗、长时间挂机和副本压力测试;30 FPS 结论适用于上述测试场景。
|
||
|
||
## 最终安装版结果
|
||
|
||
未传分辨率、MSAA、帧率参数时,日志确认 `msaa=2 render_scale=0.750000 fps_mode=0 fps_cap=30`。
|
||
6 个有效窗口平均 29.98 FPS、GPU 27.20 ms,帧时间 p95 平均 33.80 ms,RSS 约 565 MB。
|
||
触控移动和背包打开通过截图检查。切后台测试中 Surface 在 present 阶段丢失,恢复前台后重建成功,
|
||
进程 PID 10734 保持不变,原游戏场景和背包继续显示;随后在服务器选择界面重复两次切前后台,
|
||
PID 11014 同样保持不变(`resume-cycles.json`)。最终恢复服务器选择界面,崩溃缓冲区为空。
|
||
|
||
最终 APK SHA256:`c414589acf29c1fe71dc6efc8ccf6526847a90116bbf4f0b399f4caee4ed15cf`。
|