@@ -209,7 +209,7 @@ public boolean waitForDefaultDisplay() {
209209 public void setWindowManager (WindowManagerFuncs windowManagerFuncs ) {
210210 synchronized (mSyncRoot ) {
211211 mWindowManagerFuncs = windowManagerFuncs ;
212- scheduleTraversalLocked ();
212+ scheduleTraversalLocked (false );
213213 }
214214 }
215215
@@ -220,7 +220,7 @@ public void setWindowManager(WindowManagerFuncs windowManagerFuncs) {
220220 public void setInputManager (InputManagerFuncs inputManagerFuncs ) {
221221 synchronized (mSyncRoot ) {
222222 mInputManagerFuncs = inputManagerFuncs ;
223- scheduleTraversalLocked ();
223+ scheduleTraversalLocked (false );
224224 }
225225 }
226226
@@ -264,7 +264,7 @@ public void setDisplayInfoOverrideFromWindowManager(
264264 display .setDisplayInfoOverrideFromWindowManagerLocked (info );
265265 if (!mTempDisplayInfo .equals (display .getDisplayInfoLocked ())) {
266266 sendDisplayEventLocked (displayId , DisplayManagerGlobal .EVENT_DISPLAY_CHANGED );
267- scheduleTraversalLocked ();
267+ scheduleTraversalLocked (false );
268268 }
269269 }
270270 }
@@ -527,7 +527,7 @@ private void handleDisplayDeviceAdded(DisplayDevice device) {
527527
528528 mDisplayDevices .add (device );
529529 addLogicalDisplayLocked (device );
530- scheduleTraversalLocked ();
530+ scheduleTraversalLocked (false );
531531 }
532532 }
533533
@@ -543,7 +543,7 @@ private void handleDisplayDeviceChanged(DisplayDevice device) {
543543
544544 device .applyPendingDisplayDeviceInfoChangesLocked ();
545545 if (updateLogicalDisplaysLocked ()) {
546- scheduleTraversalLocked ();
546+ scheduleTraversalLocked (false );
547547 }
548548 }
549549 }
@@ -560,7 +560,7 @@ private void handleDisplayDeviceRemoved(DisplayDevice device) {
560560
561561 mRemovedDisplayDevices .add (device );
562562 updateLogicalDisplaysLocked ();
563- scheduleTraversalLocked ();
563+ scheduleTraversalLocked (false );
564564 }
565565 }
566566
@@ -668,13 +668,15 @@ private void performTraversalInTransactionLocked() {
668668 *
669669 * @param displayId The logical display id to update.
670670 * @param hasContent True if the logical display has content.
671+ * @param inTraversal True if called from WindowManagerService during a window traversal prior
672+ * to call to performTraversalInTransactionFromWindowManager.
671673 */
672- public void setDisplayHasContent (int displayId , boolean hasContent ) {
674+ public void setDisplayHasContent (int displayId , boolean hasContent , boolean inTraversal ) {
673675 synchronized (mSyncRoot ) {
674676 LogicalDisplay display = mLogicalDisplays .get (displayId );
675677 if (display != null && display .hasContentLocked () != hasContent ) {
676678 display .setHasContentLocked (hasContent );
677- scheduleTraversalLocked ();
679+ scheduleTraversalLocked (inTraversal );
678680 }
679681 }
680682 }
@@ -741,10 +743,12 @@ private void sendDisplayEventLocked(int displayId, int event) {
741743
742744 // Requests that performTraversalsInTransactionFromWindowManager be called at a
743745 // later time to apply changes to surfaces and displays.
744- private void scheduleTraversalLocked () {
746+ private void scheduleTraversalLocked (boolean inTraversal ) {
745747 if (!mPendingTraversal && mWindowManagerFuncs != null ) {
746748 mPendingTraversal = true ;
747- mHandler .sendEmptyMessage (MSG_REQUEST_TRAVERSAL );
749+ if (!inTraversal ) {
750+ mHandler .sendEmptyMessage (MSG_REQUEST_TRAVERSAL );
751+ }
748752 }
749753 }
750754
@@ -911,7 +915,7 @@ public void onDisplayDeviceEvent(DisplayDevice device, int event) {
911915 @ Override
912916 public void onTraversalRequested () {
913917 synchronized (mSyncRoot ) {
914- scheduleTraversalLocked ();
918+ scheduleTraversalLocked (false );
915919 }
916920 }
917921 }
0 commit comments