导引
按键到activity的处理流程
PhoneWindowManager
Activity.attach
SystemServer.startOtherService()
inputManager = new InputManagerService(context);
wm = WindowManagerService.main(context, inputManager,
mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
!mFirstBoot, mOnlyCore, new PhoneWindowManager());
ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,
DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
/* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
mActivityManagerService.setWindowManager(wm);
wm.onInitReady();
inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
inputManager.start();
mDisplayManagerService.windowManagerAndInputReady();
导引:
launcher界面显示
ActivityThread.handleResumeActivity
wm.addView(decor, l) //ViewManager wm = a.getWindowManager();
WindowManagerImpl.addView
mGlobal.addView
ViewRootImpl.setView
requestLayout()
checkThread()
scheduleTraversals()
mHandler.getLooper().getQueue().postSyncBarrier()
mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null)
Choreographer.postCallbackDelayed()
Choreographer.postCallbackDelayedInternal
Choreographer.scheduleFrameLocked
DisplayEventReceiver.scheduleVsync() //请求Vsync信号
nativeScheduleVsync
jni NativeDisplayEventReceiver.nativeScheduleVsync
DisplayEventDispatcher::scheduleVsync()
processPendingEvents
mReceiver.requestNextVsync() //请求SurfaceFlinger发送Vsync
mEventConnection->requestNextVsync() // mEventConnection是BpDisplayEventConnection的强指针
mEventThread->requestNextVsync //主要是修改Connection的状态
...
FrameDisplayEventReceiver.onVsync //接收Vsync信号
doFrame
doCallbacks //input,animation,traversal,commit
c.run //CallbackRecord
((Runnable)action).run() //mTraversalRunnable
doTraversal
mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier)
performTraversals
mWindowSession.addToDisplay
Session.addToDisplay
mService.addWindow
win.attach() //win = new WindowState
mSession.windowAddedLocked(mAttrs.packageName)
new SurfaceSession()
jni mNativeClient = nativeCreate()
new SurfaceComposerClient()
SurfaceComposerClient::onFirstRef()
//create BpSurfaceComposer
//create BpSurfaceComposerClient
每一帧处理的流程:接收到 Vsync 信号回调-> UI Thread –> RenderThread –> SurfaceFlinger
UI Thread 和 RenderThread 就可以完成 App 一帧的渲染,渲染完的 Buffer 抛给 SurfaceFlinger 去合成,然后我们就可以在屏幕上看到这一帧了
工具很漂亮,图画的也好,太优秀了啊
image.png
image.png
WMS—启动过程 - Gityuan博客 | 袁辉辉的技术博客
写的太好了
WindowManagerService-CSDN博客
AndroidQ UI刷新机制详解-CSDN博客
AndroidQ 应用层Vsync信号的注册与接收(上)_displayeventdispatcher: display event receiver pip-CSDN博客
AndroidQ 应用层Vsync信号的注册与接收(下)_resynccallback-CSDN博客












网友评论