WMS

作者: zhi5ai | 来源:发表于2024-09-02 14:05 被阅读0次

导引

按键到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博客

AndroidQ window和SurfaceFlinger建立连接分析-CSDN博客

相关文章

网友评论

      本文标题:WMS

      本文链接:https://www.haomeiwen.com/subject/ronmkdtx.html