OS3.0 Skia Vulkan Pipeline Cache 方案适配与Bug流转说明
本说明文档用于指导TR4-PipelineCache帧间数据缓存技术方案及排期评估方案的预置及Bug流转流程的说明
- 此说明只针对该方案生效,原有方案(OS3.0之前或hwui使用GLES)按该Skia Cache Miss 1.0方案适配更新说明执行
- pipeline info与shade cache的spirv与机型、驱动无关,pipeline info与shader cache可复用
- 为了避免分层造成的影响,建议运行cache 工具脚本运行所有场景提取pipeline info与shader cache
适配条件
- UI形状改变(矩形→圆角矩形)、新增效果(模糊,取色,更改透明度)、开发第一次CreateGraphicsPipeline时间变长,影响GPU相关的场景,需要运行预制脚本并提交预制cache
- pad或phone UI 不一致
适配过程
这里以XXX平台适配为例,具体说明适配过程
-
检查是否hwui使用vulkan,若输出Pipeline=Skia (OpenGL),请按Skia Cache Miss 1.0方案适配更新说明适配
adb shell dumpsys gfxinfo com.miui.home | grep Pipeline-
生成cache
-
刷机:建议刷最新版的daliy包
-
运行适配脚本https://git.n.xiaomi.com/zs15/cachemiss
-
咨询@任晓蕾 加入开发权限或加入新场景
-
OS3.0预制,切换到分支 vulkan_cache,建立python虚拟环境
-
python -m venv .venv #激活虚拟环境 source .venv/Script/activate #安装依赖 pip install -r requirements.txt -
需配置src/cachemiss/config_1.yml 的设备号
-
-

#切换到git仓目库,执行
./pull_and_test_vulkan_cache.sh-
非第一次适配,需用通过合并程序生成pipeline info与shader cache,咨询@袁林
https://git.n.xiaomi.com/ae-arch/graphics/pipelinecache
-
提交change
参考该commit:https://gerrit.pt.mioffice.cn/c/device/xiaomi/dijun/+/5349513
-
下载代码
需要下载的代码仓:
device/xiaomi/[机型名称],比如对于O2S,其对应的仓为device/xiaomi/dijun所在分支可以通过步骤一中Rom的product组件下的manifest查询,如O2S的product下的manifest
当前O2S的product组件下的
device/xiaomi/dijun仓,使用master-25q2分支-
修改mk文件
在mk文件中加入代码
# pipeline infos PRODUCT_COPY_FILES += \ $(call find-copy-subdir-files,*,device/xiaomi/dijun/product/miui/cn/pipeline_infos,$(TARGET_COPY_OUT_PRODUCT)/etc/pipeline_infos) -

-
提交change
https://gerrit.pt.mioffice.cn/c/device/xiaomi/dijun/+/5349513
-
打包验证
抓取trace,使用sql语句查询是否有相应条目存在:若无该条目,则change可合入
SELECT * FROM slice WHERE name LIKE '%CreateGraphicsPipeline%' AND dur > 1000000
预置责任
- 测试: 测试人员,cache工具脚本开发人员
- 业务:上层开发人员,包括:ROM包发布,锁屏,壁纸,桌面,systemui 等
- 开发:底层开发人员,包括:性能,基础体验,架构等
适配 OS3.0 新机型
- 业务使用测试提供的脚本,拉取并生成数据,置入数据,提测
- 测试通过后,合入代码与数据即可
- 若测试不通过,转给开发修复bug,修复后,自测通过后,再转到第1步

Vulkna pipeline cache Bug jira 流转
- 测试: 测试人员,cache工具脚本开发人员
- 业务:上层开发人员,包括:ROM包发布,锁屏,壁纸,桌面,systemui 等
- 开发:底层开发人员,包括:性能,基础体验,架构等
测试发现cache miss bug
- 测试通过Trace发现Skia vulkan cache miss,其中 CreateGraphicsPipeline Slice条目 大于1ms,明确复现场景后,jira提BUG给业务
- 业务明确是否为cache工具脚本新场景,若新场景,需要cache工具脚本开发人员(@王明 ,@任晓蕾 ,@张爽 ,@王红军 )加入新场景,若不是新场景,转到d
注:sf发生cachemiss暂不属于该BUG流程,若sf发生cache miss,可转给framework处理
- 相关场景业务运行cache 工具脚本后,按该文档预置入新数据至rom查看是否cache miss
- 若未发生cache miss 提交新数据后提测,若发生cache miss后,转到d
- Pipeline cache 开发人员(@王月 ,@袁林 )调试该cache miss问题,自测通过后,再执行b
- 测试确认无cache miss后,执行合关,结束 若发生cache miss,转到 d

后续规划
云数据库流程
开发阶段
- 通过feature flag开启上传pipeline info与shader cache
- 开发与测试过程中,无感上传分层Pipeline info与shader cache至内部云端数据库
发布阶段
- 按机型找到对应分层的Pipeline info与shader cache预置入rom,提测是否cache miss
- 若cache miss发生,由开发解决后,再发布