Skip to content

Latest commit

 

History

History
271 lines (160 loc) · 20.8 KB

Android 11 Display System源码分析(8):WMS之Window显示流程分析.md

File metadata and controls

271 lines (160 loc) · 20.8 KB
title cover categories tags toc abbrlink date
Android 11 Display System源码分析(8):WMS之Window显示流程分析(V1)
Display
Display
true
20230216
2023-02-16 08:16:16 -0800

注:文章都是通过阅读各位前辈总结的资料、Android 11 Rockchip平台源码、加上自己的思考分析总结出来的,其中难免有理解不对的地方,欢迎大家批评指正。文章为个人学习、研究、欣赏之用,图文内容整理自互联网,如有侵权,请联系删除(◕‿◕),转载请注明出处(©Rockchip ©Android @Linux 版权所有),谢谢。

(==文章基于 Android 11.0==)

【zhoujinjian.com博客原图链接】

【开发板】

【开发板 源码链接】

正是由于前人的分析和总结,帮助我节约了大量的时间和精力,特别感谢,由于不喜欢图片水印,去除了水印,敬请谅解!!!

zhoujinjian.com


==源码(部分)==:

xxx

==源码(部分)==:


(一)、Window添加过程(App->WMS)

(1)、Activity.setContentView()

image-20221018100735157

image-20221018101033339

image-20221018101232003

(2)、ViewRootImpl.init()

image-20221019105057729

image-20221019105133929

image-20221019105726410

image-20221019110231231

(3)、ViewRootImpl.setView()image-20221019110540837

(4)、WindowManagerGlobal.getWindowSession().addToDisplayAsUser()

image-20221019110737565

(5)、WindowManagerService.addWindow()

image-20221019114118714

image-20221019114231258

image-20221019114458689

(6)、WindowState.attach()

image-20221019132712267

image-20221019132734312

image-20221019132815974

image-20221019132917859

(7)、WindowState.assignLayer()

image-20221019133806222

image-20221019133847289

image-20221019134111716

image-20221019134214399

image-20221019134248157

image-20221019134402313

image-20221019134551758

(二)、App测量布局与绘制

(1)、ViewRootImpl.relayoutWindow()

image-20221019140312543

image-20221019140445013

10-19 11:32:42.728  1758  1758 V ViewRootImpl[]: relayout: frame=[0,0][1920,952] cutout=DisplayCutout{insets=Rect(0, 0 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]}} surface=Surface(name=null)/@0x86fcceb
10-19 11:32:42.728  1758  1758 V ViewRootImpl: Relayout returned: frame=Rect(0, 0 - 1920, 952), surface=Surface(name=null)/@0x86fcceb
10-19 11:32:44.076   947  1162 V WindowManager: Relayout Window{6a1de98 u10 com.chinatsp.launcher/com.chinatsp.launcher.view.Launcher}: viewVisibility=0 req=1920x1080 {(0,0)(fillxfill) sim={adjust=nothing forwardNavigation} ty=BASE_APPLICATION wanim=0x1030301
10-19 11:32:44.076   947  1162 W WindowManager: setLayoutNeeded: callers=com.android.server.wm.WindowState.setDisplayLayoutNeeded:2576 com.android.server.wm.WindowManagerService.relayoutWindow:2258 com.android.server.wm.Session.relayout:213 
10-19 11:32:44.076   947  1162 W WindowManager: setLayoutNeeded: callers=com.android.server.wm.WindowState.setDisplayLayoutNeeded:2576 com.android.server.wm.WindowManagerService.relayoutWindow:2258 com.android.server.wm.Session.relayout:213 
10-19 11:32:44.076   947  1162 V RootWindowContainer: performSurfacePlacementInner: entry. Called by com.android.server.wm.RootWindowContainer.performSurfacePlacement:814 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop:178 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement:127 com.android.server.wm.WindowManagerService.relayoutWindow:2289 com.android.server.wm.Session.relayout:213 
10-19 11:32:44.076   947  1162 V RootWindowContainer: performSurfacePlacementInner: entry. Called by com.android.server.wm.RootWindowContainer.performSurfacePlacement:814 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop:178 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement:127 com.android.server.wm.WindowManagerService.relayoutWindow:2289 com.android.server.wm.Session.relayout:213 
    
    
10-19 11:32:44.079   947  1162 V DisplayPolicy: Compute frame com.chinatsp.launcher/com.chinatsp.launcher.view.Launcher: sim=#130 attach=null type=1 flags=0x81110100 pf=[0,0][1920,1080] df=[0,0][1920,1080] cf=[0,0][1920,1080] vf=[0,0][1920,1080] dcf=[0,0][1920,1080] sf=[0,116][1920,952]
10-19 11:32:44.079   947  1162 I WindowState: com.chinatsp.launcher
10-19 11:32:44.079   947  1162 I WindowState: java.lang.RuntimeException: here
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowState.computeFrameLw(WindowState.java:1267)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowState.computeFrame(WindowState.java:1048)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.DisplayPolicy.layoutWindowLw(DisplayPolicy.java:2695)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.DisplayContent.lambda$new$4$DisplayContent(DisplayContent.java:755)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.-$$Lambda$DisplayContent$qT01Aq6xt_ZOs86A1yDQe-qmPFQ.accept(Unknown Source:4)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:1984)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer$ForAllWindowsConsumerWrapper.apply(WindowContainer.java:1974)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowState.applyInOrderWithImeWindows(WindowState.java:4668)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowState.forAllWindows(WindowState.java:4567)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.ActivityRecord.forAllWindowsUnchecked(ActivityRecord.java:3638)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.ActivityRecord.forAllWindows(ActivityRecord.java:3633)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.TaskDisplayArea.forAllWindows(TaskDisplayArea.java:488)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1302)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowContainer.forAllWindows(WindowContainer.java:1319)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.DisplayContent.performLayoutNoTrace(DisplayContent.java:4136)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.DisplayContent.performLayout(DisplayContent.java:4096)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.DisplayContent.applySurfaceChangesTransaction(DisplayContent.java:3989)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.RootWindowContainer.applySurfaceChangesTransaction(RootWindowContainer.java:1077)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:857)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:814)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:178)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:127)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.WindowManagerService.relayoutWindow(WindowManagerService.java:2289)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.Session.relayout(Session.java:213)
10-19 11:32:44.079   947  1162 I WindowState: 	at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:840)
10-19 11:32:44.079   947  1162 I WindowState: 	at com.android.server.wm.Session.onTransact(Session.java:139)
10-19 11:32:44.079   947  1162 I WindowState: 	at android.os.Binder.execTransactInternal(Binder.java:1159)
10-19 11:32:44.079   947  1162 I WindowState: 	at android.os.Binder.execTransact(Binder.java:1123)
10-19 11:32:44.079   947  1162 V WindowState: Resolving (mRequestedWidth=1920, mRequestedheight=1080) to (pw=1920, ph=1080): frame=[0,0][1920,1080] ci=[0,0][0,0] vi=[0,0][0,0] si=[0,116][0,128] com.chinatsp.launcher/com.chinatsp.launcher.view.Launcher
    

(2)、DisplayPolicy.layoutWindowLw()

WMS决定App最终显示大小。

image-20221019141032821

image-20221019141135178

image-20221019141308487

(3)、WindowManagerService.createSurfaceControl()

image-20221019141626551

image-20221019141657173

image-20221019141724115

image-20221019141758342

image-20221019141828980

image-20221019141850769

(4)、WindowState.prepareSurfaces()

image-20221019142109914

WindowAnimator属于WMS的。

image-20221019142334704

image-20221019142356357

image-20221019142441710

此时Launcher还未draw完成,未显示。Surface已经准备好。接下来由App测量布局与绘制了。

image-20221019142701745

(5)、ViewRootImpl .measureHierarchy()

image-20221019134934965

image-20221019135046614

image-20221019135218716

image-20221019135351909

image-20221019135329477

(6)、ViewRootImpl.performLayout()

image-20221019135717819

image-20221019135806495

(7)、ViewRootImpl.draw()

image-20221019135919097

底层绘制完成后会回调。

image-20221019172235905

image-20221019172404357

image-20221019170436766

image-20221019200539561

image-20221019200621815

image-20221019165353333

10-19 11:32:44.283  3063  3063 V ViewRootImpl[Launcher]: FINISHED DRAWING: com.chinatsp.launcher/com.chinatsp.launcher.view.Launcher

image-20221019170806109

image-20221019170957393

image-20221019171411611

(三)、WMS显示

(1)、RootWindowContainer.applySurfaceChangesTransaction()

image-20221019155136333

image-20221019161014403

image-20221019162725964

image-20221019162908942

image-20221019163043022

image-20221019163412145

image-20221019163458963

image-20221019163833359

(四)、参考资料(特别感谢):

(1)xxx