vsync-app 信号上行
应用层主要通过Choreographer 来请求、接收 VSYNC 信号,通知应用开始绘制界面,现在从收到Native层上报的 VSYNC 信号开始👀:
在 Choreographer 的内部类FrameDisplayEventReceiver.onVsync 方法中通过 handler 分发消息,在 run 方法中接受处理:
frameworks/base/core/java/android/view/Choreographer.java
doframe 方法主要做了几件事,计算帧率(掉帧打印),分发 CALLBACK_INPUT、CALLBACK_ANIMATION、CALLBACK_INSETS_ANIMATION、CALLBACK_TRAVERSAL、CALLBACK_COMMIT 事件,这里是应用处理输入事件、动画和界面绘制的关键:


其中 CALLBACK_TRAVERSAL 会调用 ViewRootImpl.scheduleTraversals
-> TraversalRunnable.doTraversal -> performTraversals
-> relayoutWindow
-> measure
-> layout
-> draw
relayoutW

本文深入探讨了Android中SurfaceControl的初始化过程,从vsync-app信号上行开始,详细介绍了SurfaceSession和SurfaceControl的native初始化,包括Choreographer如何处理VSYNC信号,以及在ViewRootImpl中如何创建和使用SurfaceControl。文章还分析了SurfaceFlinger进程中的Client::createSurface操作,最终形成一个完整的SurfaceControl初始化流程。
最低0.47元/天 解锁文章
1万+





