diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 25 |
2 files changed, 15 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c1310a6880fd..56060c71840d 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5748,7 +5748,6 @@ public class WindowManagerService extends IWindowManager.Stub case INSETS_CHANGED: { synchronized (mGlobalLock) { if (mWindowsInsetsChanged > 0) { - mWindowsInsetsChanged = 0; // We need to update resizing windows and dispatch the new insets state // to them. mWindowPlacerLocked.performSurfacePlacement(); @@ -6848,6 +6847,7 @@ public class WindowManagerService extends IWindowManager.Stub pw.println(defaultDisplayContent.getLastOrientation()); pw.print(" mWaitingForConfig="); pw.println(defaultDisplayContent.mWaitingForConfig); + pw.print(" mWindowsInsetsChanged="); pw.println(mWindowsInsetsChanged); mRotationWatcherController.dump(pw); pw.print(" Animation settings: disabled="); pw.print(mAnimationsDisabled); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f5f0dc6d7178..0b1ee2645cb3 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1474,16 +1474,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP this, mWindowFrames.getInsetsChangedInfo(), configChanged, didFrameInsetsChange); - if (insetsChanged) { - mWindowFrames.setInsetsChanged(false); - if (mWmService.mWindowsInsetsChanged > 0) { - mWmService.mWindowsInsetsChanged--; - } - if (mWmService.mWindowsInsetsChanged == 0) { - mWmService.mH.removeMessages(WindowManagerService.H.INSETS_CHANGED); - } - } - + consumeInsetsChange(); onResizeHandled(); mWmService.makeWindowFreezingScreenIfNeededLocked(this); @@ -2380,6 +2371,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWmService.mTrustedPresentationListenerController.removeIgnoredWindowTokens( getWindowToken()); + + consumeInsetsChange(); } @Override @@ -3753,6 +3746,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return mClient instanceof IWindow.Stub; } + private void consumeInsetsChange() { + if (mWindowFrames.hasInsetsChanged()) { + mWindowFrames.setInsetsChanged(false); + mWmService.mWindowsInsetsChanged--; + if (mWmService.mWindowsInsetsChanged == 0) { + mWmService.mH.removeMessages(WindowManagerService.H.INSETS_CHANGED); + } + } + } + /** * Called when the insets state changed. */ @@ -3760,10 +3763,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "notifyInsetsChanged for %s ", this); if (!mWindowFrames.hasInsetsChanged()) { mWindowFrames.setInsetsChanged(true); + mWmService.mWindowsInsetsChanged++; // If the new InsetsState won't be dispatched before releasing WM lock, the following // message will be executed. - mWmService.mWindowsInsetsChanged++; mWmService.mH.removeMessages(WindowManagerService.H.INSETS_CHANGED); mWmService.mH.sendEmptyMessage(WindowManagerService.H.INSETS_CHANGED); } |