Files
metin2-client/docs/XIAOMI8LITE-ADAPTATION-20260930.md
T

84 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`。