1、window
找到有问题的窗口查看关键的参数 mDrawState确认窗口绘制状态 isOnScreen、isVisible当前窗口已经是可见,并显示到屏幕上 NO_SURFACE、DRAW_PENDING这两个状态表示应用端没有完成对应的surface申请和绘制,此类问题需要应用端查看;COMMIT_DRAW_PENDING、READY_TO_SHOW,表示应用端已经完成绘制并上报状态给WMS,则需要WMS查看显示控制流程。
窗口显示相关方法 | 工作内容解释 |
---|---|
addWindow | App向WMS请求添加窗口记录,会在WMS里新建WindowState(NO_SURFACE) |
relayoutWindow | App向WMS申请surface用于绘制,执行后window拥有了surface(NO_SURFACE->DRAW_PENDING) |
finishDrawingWindow | App在surface上完成绘制后,通知WMS(DRAW_PENDING->COMMIT_DRAW_PENDING) |
commitFinishDrawingLocked | WMS遍历window,对于完成绘制的window(COMMIT_DRAW_PENDING->READY_TO_SHOW) |
performShowLocked | 判断系统是否允许窗口显示isReadyForDisplay(READY_TO_SHOW->HAS_DRAWN) |
showSurfaceRobustlyLocked | 对HAS_DRAWN状态的窗口,用SurfaceControl通知SurfaceFlinger显示出来 |
如果dump上没有显示绘制状态则可以在日志中搜索:*windowmanager.mDrawState