02-23 14:36:19.116 565 I test2 : DefaultTaskDisplayArea@243571827 addChild child= Task{a13d730 #1 type=home ?? U=0 visible=false visibleRequested=false mode=undefined translucent=true sz=0}02-23 14:36:19.116 565 I test2 : java.lang.Exception
02-23 14:36:19.116 565 I test2 : at com.android.server.wm.WindowContainer.addChild(WindowContainer.java:727)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.TaskDisplayArea.addChildTask(TaskDisplayArea.java:334)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.TaskDisplayArea.addChild(TaskDisplayArea.java:320)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.Task$Builder.build(Task.java:6551)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.TaskDisplayArea.createRootTask(TaskDisplayArea.java:1066)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.TaskDisplayArea.createRootTask(TaskDisplayArea.java:1040)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.TaskDisplayArea.getOrCreateRootHomeTask(TaskDisplayArea.java:1640)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.RootWindowContainer.setWindowManager(RootWindowContainer.java:1321)02-23 14:36:19.116 565 I test2 : at com.android.server.wm.ActivityTaskManagerService.setWindowManager(ActivityTaskManagerService.java:1006)02-23 14:36:19.116 565 I test2 : at com.android.server.am.ActivityManagerService.setWindowManager(ActivityManagerService.java:1923)02-23 14:36:19.116 565 I test2 : at com.android.server.SystemServer.startOtherServices(SystemServer.java:1595)02-23 14:36:19.116 565 I test2 : at com.android.server.SystemServer.run(SystemServer.java:939)02-23 14:36:19.116 565 I test2 : at com.android.server.SystemServer.main(SystemServer.java:649)02-23 14:36:19.116 565 I test2 : at java.lang.reflect.Method.invoke(Native Method)
14:36:22.676 Task{a13d730 #1 type=home ?? U=0 visible=true visibleRequested=false mode=fullscreen translucent=true sz=0} addChild Comparator child = Task{63f31d4 #2 type=undefined A=1000:com.android.settings.FallbackHome U=0 visible=false quested=false mode=undefined translucent=true sz=0} 14:36:22.676 java.lang.Exception
14:36:22.676 at com.android.server.wm.WindowContainer.addChild(WindowContainer.java:694) 14:36:22.676 at com.android.server.wm.Task.addChild(Task.java:5935) 14:36:22.676 at com.android.server.wm.Task.-$$Nest$maddChild(Unknown Source:0) 14:36:22.676 at com.android.server.wm.Task$Builder.build(Task.java:6548) 14:36:22.676 at com.android.server.wm.Task.reuseOrCreateTask(Task.java:5819) 14:36:22.676 at com.android.server.wm.ActivityStarter.setNewTask(ActivityStarter.java:2872) 14:36:22.676 at com.android.server.wm.ActivityStarter.startActivityInner(ActivityStarter.java:1864) 14:36:22.676 at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1661) 14:36:22.676 at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1216) 14:36:22.676 at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:702) 14:36:22.676 at com.android.server.wm.ActivityStartController.startHomeActivity(ActivityStartController.java:179) 14:36:22.676 at com.android.server.wm.RootWindowContainer.startHomeOnTaskDisplayArea(RootWindowContainer.java:1493) 14:36:22.676 at com.android.server.wm.RootWindowContainer.lambda$startHomeOnDisplay$12$com-android-server-wm-RootWindowContainer(RootWindowContainer.java:1434) 14:36:22.676 at com.android.server.wm.RootWindowContainer$$ExternalSyntheticLambda7.apply(Unknown Source:16) 14:36:22.676 at com.android.server.wm.TaskDisplayArea.reduceOnAllTaskDisplayAreas(TaskDisplayArea.java:513) 14:36:22.676 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.676 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.676 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.676 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.676 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.676 at com.android.server.wm.WindowContainer.reduceOnAllTaskDisplayAreas(WindowContainer.java:2283) 14:36:22.676 at com.android.server.wm.RootWindowContainer.startHomeOnDisplay(RootWindowContainer.java:1433) 14:36:22.676 at com.android.server.wm.RootWindowContainer.startHomeOnDisplay(RootWindowContainer.java:1420) 14:36:22.676 at com.android.server.wm.RootWindowContainer.startHomeOnAllDisplays(RootWindowContainer.java:1405) 14:36:22.676 at com.android.server.wm.ActivityTaskManagerService$LocalService.startHomeOnAllDisplays(ActivityTaskManagerService.java:5892) 14:36:22.676 at com.android.server.am.ActivityManagerService.systemReady(ActivityManagerService.java:8203) 14:36:22.676 at com.android.server.SystemServer.startOtherServices(SystemServer.java:2801) 14:36:22.676 at com.android.server.SystemServer.run(SystemServer.java:939) 14:36:22.676 at com.android.server.SystemServer.main(SystemServer.java:649) 14:36:22.676 at java.lang.reflect.Method.invoke(Native Method) 14:36:22.676 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 14:36:22.676 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:914)
14:36:22.681 Task{63f31d4 #2 type=undefined A=1000:com.android.settings.FallbackHome U=0 rootTaskId=1 visible=true visibleRequested=false mode=fullscreen translucent=true sz=0} addChild child = ActivityRecord{983a135 u0 roid.settings/.FallbackHome} 14:36:22.681 java.lang.Exception
14:36:22.681 at com.android.server.wm.WindowContainer.addChild(WindowContainer.java:727) 14:36:22.681 at com.android.server.wm.TaskFragment.addChild(TaskFragment.java:1835) 14:36:22.681 at com.android.server.wm.Task.addChild(Task.java:1429) 14:36:22.681 at com.android.server.wm.ActivityStarter.addOrReparentStartingActivity(ActivityStarter.java:2927) 14:36:22.681 at com.android.server.wm.ActivityStarter.setNewTask(ActivityStarter.java:2877) 14:36:22.681 at com.android.server.wm.ActivityStarter.startActivityInner(ActivityStarter.java:1864) 14:36:22.681 at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1661) 14:36:22.681 at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1216) 14:36:22.681 at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:702) 14:36:22.681 at com.android.server.wm.ActivityStartController.startHomeActivity(ActivityStartController.java:179) 14:36:22.681 at com.android.server.wm.RootWindowContainer.startHomeOnTaskDisplayArea(RootWindowContainer.java:1493) 14:36:22.681 at com.android.server.wm.RootWindowContainer.lambda$startHomeOnDisplay$12$com-android-server-wm-RootWindowContainer(RootWindowContainer.java:1434) 14:36:22.681 at com.android.server.wm.RootWindowContainer$$ExternalSyntheticLambda7.apply(Unknown Source:16) 14:36:22.681 at com.android.server.wm.TaskDisplayArea.reduceOnAllTaskDisplayAreas(TaskDisplayArea.java:513) 14:36:22.681 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.681 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.681 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.681 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404)14:36:22.681 at com.android.server.wm.DisplayArea.reduceOnAllTaskDisplayAreas(DisplayArea.java:404) 14:36:22.681 at com.android.server.wm.WindowContainer.reduceOnAllTaskDisplayAreas(WindowContainer.java:2283) 14:36:22.681 at com.android.server.wm.RootWindowContainer.startHomeOnDisplay(RootWindowContainer.java:1433) 14:36:22.681 at com.android.server.wm.RootWindowContainer.startHomeOnDisplay(RootWindowContainer.java:1420) 14:36:22.681 at com.android.server.wm.RootWindowContainer.startHomeOnAllDisplays(RootWindowContainer.java:1405) 14:36:22.681 at com.android.server.wm.ActivityTaskManagerService$LocalService.startHomeOnAllDisplays(ActivityTaskManagerService.java:5892) 14:36:22.681 at com.android.server.am.ActivityManagerService.systemReady(ActivityManagerService.java:8203) 14:36:22.681 at com.android.server.SystemServer.startOtherServices(SystemServer.java:2801) 14:36:22.681 at com.android.server.SystemServer.run(SystemServer.java:939) 14:36:22.681 at com.android.server.SystemServer.main(SystemServer.java:649) 14:36:22.681 at java.lang.reflect.Method.invoke(Native Method) 14:36:22.681 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 14:36:22.681 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:914)
添加WindowState
1
2
3
4
5
6
7
8
9
10
11
14:36:23.276 565627 I test2 : ActivityRecord{983a135 u0 com.android.settings/.FallbackHome} t2} addChild Comparator child= Window{ae9b359 u0 com.android.settings/com.android.settings.FallbackHome} 14:36:23.276 565627 I test2 : java.lang.Exception
14:36:23.276 565627 I test2 : at com.android.server.wm.WindowContainer.addChild(WindowContainer.java:694) 14:36:23.276 565627 I test2 : at com.android.server.wm.WindowToken.addWindow(WindowToken.java:302) 14:36:23.276 565627 I test2 : at com.android.server.wm.ActivityRecord.addWindow(ActivityRecord.java:4212) 14:36:23.276 565627 I test2 : at com.android.server.wm.WindowManagerService.addWindow(WindowManagerService.java:1773) 14:36:23.276 565627 I test2 : at com.android.server.wm.Session.addToDisplayAsUser(Session.java:209) 14:36:23.276 565627 I test2 : at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:652) 14:36:23.276 565627 I test2 : at com.android.server.wm.Session.onTransact(Session.java:175) 14:36:23.276 565627 I test2 : at android.os.Binder.execTransactInternal(Binder.java:1280) 14:36:23.276 565627 I test2 : at android.os.Binder.execTransact(Binder.java:1244)
// Create surfaceControl before surface placement otherwise layout will be skipped// (because WS.isGoneForLayout() is true when there is no surface.if(shouldRelayout){try{result=createSurfaceControl(outSurfaceControl,result,win,winAnimator);}catch(Exceptione){displayContent.getInputMonitor().updateInputWindowsLw(true/*force*/);ProtoLog.w(WM_ERROR,"Exception thrown when creating surface for client %s (%s). %s",client,win.mAttrs.getTitle(),e);Binder.restoreCallingIdentity(origId);return0;}}
privateintcreateSurfaceControl(SurfaceControloutSurfaceControl,intresult,WindowStatewin,WindowStateAnimatorwinAnimator){if(!win.mHasSurface){result|=RELAYOUT_RES_SURFACE_CHANGED;}WindowSurfaceControllersurfaceController;try{Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER,"createSurfaceControl");surfaceController=winAnimator.createSurfaceLocked();}finally{Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);}if(surfaceController!=null){surfaceController.getSurfaceControl(outSurfaceControl);ProtoLog.i(WM_SHOW_TRANSACTIONS,"OUT SURFACE %s: copied",outSurfaceControl);}else{// For some reason there isn't a surface. Clear the// caller's object so they see the same state.ProtoLog.w(WM_ERROR,"Failed to create surface control for %s",win);outSurfaceControl.release();}returnresult;}
publicintrelayoutWindow(Sessionsession,IWindowclient,LayoutParamsattrs,intrequestedWidth,intrequestedHeight,intviewVisibility,intflags,ClientWindowFramesoutFrames,MergedConfigurationmergedConfiguration,SurfaceControloutSurfaceControl,InsetsStateoutInsetsState,InsetsSourceControl[]outActiveControls,BundleoutSyncIdBundle){//ignore//根据client找到对应的WindowState finalWindowStatewin=windowForClientLocked(session,client,false);//ignore// Create surfaceControl before surface placement otherwise layout will be skipped// (because WS.isGoneForLayout() is true when there is no surface.if(shouldRelayout){try{//创建对应的window需要的SurfaceControl,传递回应用,应用用他进行绘制result=createSurfaceControl(outSurfaceControl,result,win,winAnimator);}catch(Exceptione){//ignore}}//调用最核心的performSurfacePlacement进行相关的layout操作// We may be deferring layout passes at the moment, but since the client is interested// in the new out values right now we need to force a layout.mWindowPlacerLocked.performSurfacePlacement(true/* force */);//ignoreif(!win.isGoneForLayout()){win.mResizedWhileGone=false;}//把相关config数据填回去win.fillClientWindowFramesAndConfiguration(outFrames,mergedConfiguration,false/* useLatestConfig */,shouldRelayout);//把相关inset数据设置回去outInsetsState.set(win.getCompatInsetsState(),win.isClientLocal());//ignoregetInsetsSourceControls(win,outActiveControls);}Binder.restoreCallingIdentity(origId);returnresult;}
privatevoidapplySurfaceChangesTransaction(){//ignorefinalintcount=mChildren.size();for(intj=0;j<count;++j){finalDisplayContentdc=mChildren.get(j);dc.applySurfaceChangesTransaction();}// Give the display manager a chance to adjust properties like display rotation if it needs// to.mWmService.mDisplayManagerInternal.performTraversal(mDisplayTransaction);SurfaceControl.mergeToGlobalTransaction(mDisplayTransaction);}
voidperformLayout(booleaninitial,booleanupdateInputWindows){Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER,"performLayout");try{performLayoutNoTrace(initial,updateInputWindows);}finally{Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);}}privatevoidperformLayoutNoTrace(booleaninitial,booleanupdateInputWindows){if(!isLayoutNeeded()){return;}clearLayoutNeeded();if(DEBUG_LAYOUT){Slog.v(TAG,"-------------------------------------");Slog.v(TAG,"performLayout: dw="+mDisplayInfo.logicalWidth+" dh="+mDisplayInfo.logicalHeight);}intseq=mLayoutSeq+1;if(seq<0)seq=0;mLayoutSeq=seq;mTmpInitial=initial;// First perform layout of any root windows (not attached to another window).forAllWindows(mPerformLayout,true/* traverseTopToBottom */);// Now perform layout of attached windows, which usually depend on the position of the// window they are attached to. XXX does not deal with windows that are attached to windows// that are themselves attached.forAllWindows(mPerformLayoutAttached,true/* traverseTopToBottom */);// Window frames may have changed. Tell the input dispatcher about it.mInputMonitor.setUpdateInputWindowsNeededLw();if(updateInputWindows){mInputMonitor.updateInputWindowsLw(false/*force*/);}}