diff options
| author | 2023-12-22 20:51:54 +0800 | |
|---|---|---|
| committer | 2023-12-26 18:58:54 +0800 | |
| commit | 702ef360f63c7c93ece101d4ddaafac1f90c4435 (patch) | |
| tree | e1f3a65d18e4ff6ab8bac64dca6557f8c875f9a6 | |
| parent | 237a75b1fcaad50520c2123ab80fb4f99d716d95 (diff) | |
Don't reset mWindowsInsetsChanged
It should only be modified when the state of mInsetsChanged of a window
is changed, or when a window is removed. Otherwise, we might fail to
send INSETS_CHANGED unexpectedly.
Bug: 311026631
Bug: 315500042
Test: presubmit
Change-Id: Ie72dfc25844e483c681e173cd8e0c3967d2297a6
| -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); } |