title | cover | categories | tags | toc | abbrlink | date | ||
---|---|---|---|---|---|---|---|---|
Android 11 Display System源码分析(8):WMS之Window显示流程分析(V1) |
|
|
true |
20230216 |
2023-02-16 08:16:16 -0800 |
注:文章都是通过阅读各位前辈总结的资料、Android 11 Rockchip平台源码、加上自己的思考分析总结出来的,其中难免有理解不对的地方,欢迎大家批评指正。文章为个人学习、研究、欣赏之用,图文内容整理自互联网,如有侵权,请联系删除(◕‿◕),转载请注明出处(©Rockchip ©Android @Linux 版权所有),谢谢。
(==文章基于 Android 11.0==)
正是由于前人的分析和总结,帮助我节约了大量的时间和精力,特别感谢,由于不喜欢图片水印,去除了水印,敬请谅解!!!
==源码(部分)==:
xxx
==源码(部分)==:
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
WMS决定App最终显示大小。
WindowAnimator属于WMS的。
此时Launcher还未draw完成,未显示。Surface已经准备好。接下来由App测量布局与绘制了。
底层绘制完成后会回调。
10-19 11:32:44.283 3063 3063 V ViewRootImpl[Launcher]: FINISHED DRAWING: com.chinatsp.launcher/com.chinatsp.launcher.view.Launcher