鸿蒙综合讨论/黑屏排查:surface 与 EGL 首帧

黑屏排查:surface 与 EGL 首帧

黑屏是移植应用最吓人的故障形态:应用明明在跑,画面就是黑的。这篇按定位路径讲透黑屏排查。

▍黑屏的分型
先分两型:从未亮过(启动即黑)与中途变黑(用着用着黑)。启动黑偏初始化问题(库没加载、上下文没建、首帧没画);中途黑偏表面生命周期问题(表面销毁没重建、渲染线程死了)。分型靠日志时间线:黑屏发生时刻前后各看十秒。

▍渲染侧三查
查一,加载链:库加载日志逐个核对(加载失败会报缺哪个库或哪个符号——musl 的严格性下,版本号依赖名与段对齐问题是常客,见 ELF 纪律篇)。查二,上下文与表面创建序列:首帧时间线的编号日志走到哪一步断的(显示连接、配置、上下文、表面、首绘、交换)。查三,提交计数:渲染线程是否还在提交帧。计数增长而黑——问题在消费侧;计数不动——问题在渲染侧。这一分界是黑屏排查最重要的一刀。

▍消费侧两查
查四,表面代际:表面销毁与重建的日志核对(模式切换、页面切换触发),僵尸表面(渲染往已销毁表面提交)是中途黑的高发根因。查五,机型特性:个别机型纹理消费慢热,首帧要连续多轮强制刷新才上屏(真实工程实测连刷四轮才稳)——机型相关的首黑,先试这个便宜解。

▍证据纪律
黑屏结论必须双通道:截图(真黑还是画面在但暗?部分区域黑还是全黑?)加日志(渲染侧走到哪)。截图不可信场景(合成路径差异)用帧直存对照。

▍快捷清单
按命中率排序:库加载失败(看错误日志)——环境变量晚了(字体与目录初始化异常)——首帧序列断点——表面生命周期——消费侧机型特性——驱动异常(降软渲染档验证:软渲染能亮就是 GPU 路径问题)。多数黑屏在前三项就命中。

▍预防
首帧编号日志与提交计数是黑屏自检的两件标配,工程开工就埋上,出事时直接读数。

免费无广告的安装包可以在官网下载体验。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。