绘制慢啊,卡顿啊,看过多少trace ,没有时间看代码,有时间看看,顺便记录下概要!!!
桌面点击启动activity ,会走PerformlaunchActivity 和 performResumeActivity
performResumeActivity 里面
1、执行onResume
2、wm.addView,创建viewRootImp,调用其setView
viewRootimp.setView
1、硬件加速
2、requestLayout()开始绘制流程,这里会丢一个traversal 类型callback,并请求vsync
2、创建inputchannel 、windowInputReciver
3、windowsession.addToDisplay 创建windowState 并建立window 和 inputchannel 通路
performTraversal
1、vsync 到来,执行runnable traversal,执行measure
2、通过windowsession.relayout 请求layoutwindow
relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);
relayoutWindow
1、创建surfacecontrol ,就surfacecontrol 跟SF bufferqueuelayer layer 关联上了,performsurfacleplacement 大刷新及更新focus window
参考
Android画面显示流程分析(4)_presentandgetreleasefences_长安想胖的博客-CSDN博客
3、surface 跟ANativeWindow 关联起来,跟 BufferQueue 生产者消费者模型关联起来
ThreadedRenderer 通过jni 层RendorProxy 跟 RendorThread 交互
4、draw
参考
理解Android硬件加速原理的小白文 - 简书 (jianshu.com)
Android硬件加速(二)-RenderThread与OpenGL GPU渲染 - 简书 (jianshu.com)
RendorThread 里面也有vsync ,版本差异? 不是trasaction.apply() 提交SF 时,SF 请求vsync ?