Loading services/core/java/com/android/server/wm/DisplayContent.java +3 −3 Original line number Diff line number Diff line Loading @@ -1073,7 +1073,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } if (w.mHasSurface && !rotateSeamlessly) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Set mOrientationChanging of " + w); w.mOrientationChanging = true; w.setOrientationChanging(true); mService.mRoot.mOrientationChangeComplete = false; w.mLastFreezeDuration = 0; } Loading Loading @@ -2679,10 +2679,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mService.mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_TIMEOUT; forAllWindows(w -> { if (!w.mOrientationChanging) { if (!w.getOrientationChanging()) { return; } w.mOrientationChanging = false; w.setOrientationChanging(false); w.mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); Slog.w(TAG_WM, "Force clearing orientation change: " + w); Loading services/core/java/com/android/server/wm/WindowManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -5785,7 +5785,7 @@ public class WindowManagerService extends IWindowManager.Stub // orientation. if (!okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Changing surface while display frozen: " + w); w.mOrientationChanging = true; w.setOrientationChanging(true); w.mLastFreezeDuration = 0; mRoot.mOrientationChangeComplete = false; if (mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_NONE) { Loading services/core/java/com/android/server/wm/WindowState.java +28 −8 Original line number Diff line number Diff line Loading @@ -441,7 +441,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP * Set when the orientation is changing and this window has not yet * been updated for the new orientation. */ boolean mOrientationChanging; private boolean mOrientationChanging; /** * The orientation during the last visible call to relayout. If our Loading Loading @@ -1184,7 +1184,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // then we need to hold off on unfreezing the display until this window has been // redrawn; to do that, we need to go through the process of getting informed by the // application when it has finished drawing. if (mOrientationChanging || dragResizingChanged || isResizedWhileNotDragResizing()) { if (getOrientationChanging() || dragResizingChanged || isResizedWhileNotDragResizing()) { if (DEBUG_SURFACE_TRACE || DEBUG_ANIM || DEBUG_ORIENTATION || DEBUG_RESIZE) { Slog.v(TAG_WM, "Orientation or resize start waiting for draw" + ", mDrawState=DRAW_PENDING in " + this Loading @@ -1199,17 +1200,33 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG_WM, "Resizing window " + this); mService.mResizingWindows.add(this); } } else if (mOrientationChanging) { } else if (getOrientationChanging()) { if (isDrawnLw()) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Orientation not waiting for draw in " + this + ", surfaceController " + winAnimator.mSurfaceController); mOrientationChanging = false; setOrientationChanging(false); mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); } } } boolean getOrientationChanging() { // In addition to the local state flag, we must also consider the difference in the last // reported configuration vs. the current state. If the client code has not been informed of // the change, logic dependent on having finished processing the orientation, such as // unfreezing, could be improperly triggered. // TODO(b/62846907): Checking against {@link mLastReportedConfiguration} could be flaky as // this is not necessarily what the client has processed yet. Find a // better indicator consistent with the client. return mOrientationChanging || getConfiguration().orientation != mLastReportedConfiguration.orientation; } void setOrientationChanging(boolean changing) { mOrientationChanging = changing; } DisplayContent getDisplayContent() { return mToken.getDisplayContent(); } Loading Loading @@ -2663,10 +2680,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mAppFreezing = false; if (mHasSurface && !mOrientationChanging if (mHasSurface && !getOrientationChanging() && mService.mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "set mOrientationChanging of " + this); mOrientationChanging = true; setOrientationChanging(true); mService.mRoot.mOrientationChangeComplete = false; } mLastFreezeDuration = 0; Loading Loading @@ -3085,7 +3102,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWinAnimator.mSurfaceResized = false; mReportOrientationChanged = false; } catch (RemoteException e) { mOrientationChanging = false; setOrientationChanging(false); mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); // We are assuming the hosting process is dead or in a zombie state. Loading Loading @@ -3444,10 +3461,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP pw.print(" mDestroying="); pw.print(mDestroying); pw.print(" mRemoved="); pw.println(mRemoved); } if (mOrientationChanging || mAppFreezing || mTurnOnScreen if (getOrientationChanging() || mAppFreezing || mTurnOnScreen || mReportOrientationChanged) { pw.print(prefix); pw.print("mOrientationChanging="); pw.print(mOrientationChanging); pw.print(" configOrientationChanging="); pw.print(mLastReportedConfiguration.orientation != getConfiguration().orientation); pw.print(" mAppFreezing="); pw.print(mAppFreezing); pw.print(" mTurnOnScreen="); pw.print(mTurnOnScreen); pw.print(" mReportOrientationChanged="); pw.println(mReportOrientationChanged); Loading services/core/java/com/android/server/wm/WindowStateAnimator.java +7 −7 Original line number Diff line number Diff line Loading @@ -1527,11 +1527,11 @@ class WindowStateAnimator { // There is no need to wait for an animation change if our window is gone for layout // already as we'll never be visible. if (w.mOrientationChanging && w.isGoneForLayoutLw()) { if (w.getOrientationChanging() && w.isGoneForLayoutLw()) { if (DEBUG_ORIENTATION) { Slog.v(TAG, "Orientation change skips hidden " + w); } w.mOrientationChanging = false; w.setOrientationChanging(false); } return; } Loading Loading @@ -1564,8 +1564,8 @@ class WindowStateAnimator { // really hidden (gone for layout), there is no point in still waiting for it. // Note that this does introduce a potential glitch if the window becomes unhidden // before it has drawn for the new orientation. if (w.mOrientationChanging && w.isGoneForLayoutLw()) { w.mOrientationChanging = false; if (w.getOrientationChanging() && w.isGoneForLayoutLw()) { w.setOrientationChanging(false); if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation change skips hidden " + w); } Loading Loading @@ -1618,7 +1618,7 @@ class WindowStateAnimator { mAnimator.setPendingLayoutChanges(w.getDisplayId(), WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM); } else { w.mOrientationChanging = false; w.setOrientationChanging(false); } } if (hasSurface()) { Loading @@ -1631,14 +1631,14 @@ class WindowStateAnimator { displayed = true; } if (w.mOrientationChanging) { if (w.getOrientationChanging()) { if (!w.isDrawnLw()) { mAnimator.mBulkUpdateParams &= ~SET_ORIENTATION_CHANGE_COMPLETE; mAnimator.mLastWindowFreezeSource = w; if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation continue waiting for draw in " + w); } else { w.mOrientationChanging = false; w.setOrientationChanging(false); if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation change complete in " + w); } } Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +3 −3 Original line number Diff line number Diff line Loading @@ -1073,7 +1073,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } if (w.mHasSurface && !rotateSeamlessly) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Set mOrientationChanging of " + w); w.mOrientationChanging = true; w.setOrientationChanging(true); mService.mRoot.mOrientationChangeComplete = false; w.mLastFreezeDuration = 0; } Loading Loading @@ -2679,10 +2679,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mService.mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_TIMEOUT; forAllWindows(w -> { if (!w.mOrientationChanging) { if (!w.getOrientationChanging()) { return; } w.mOrientationChanging = false; w.setOrientationChanging(false); w.mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); Slog.w(TAG_WM, "Force clearing orientation change: " + w); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -5785,7 +5785,7 @@ public class WindowManagerService extends IWindowManager.Stub // orientation. if (!okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Changing surface while display frozen: " + w); w.mOrientationChanging = true; w.setOrientationChanging(true); w.mLastFreezeDuration = 0; mRoot.mOrientationChangeComplete = false; if (mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_NONE) { Loading
services/core/java/com/android/server/wm/WindowState.java +28 −8 Original line number Diff line number Diff line Loading @@ -441,7 +441,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP * Set when the orientation is changing and this window has not yet * been updated for the new orientation. */ boolean mOrientationChanging; private boolean mOrientationChanging; /** * The orientation during the last visible call to relayout. If our Loading Loading @@ -1184,7 +1184,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // then we need to hold off on unfreezing the display until this window has been // redrawn; to do that, we need to go through the process of getting informed by the // application when it has finished drawing. if (mOrientationChanging || dragResizingChanged || isResizedWhileNotDragResizing()) { if (getOrientationChanging() || dragResizingChanged || isResizedWhileNotDragResizing()) { if (DEBUG_SURFACE_TRACE || DEBUG_ANIM || DEBUG_ORIENTATION || DEBUG_RESIZE) { Slog.v(TAG_WM, "Orientation or resize start waiting for draw" + ", mDrawState=DRAW_PENDING in " + this Loading @@ -1199,17 +1200,33 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG_WM, "Resizing window " + this); mService.mResizingWindows.add(this); } } else if (mOrientationChanging) { } else if (getOrientationChanging()) { if (isDrawnLw()) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Orientation not waiting for draw in " + this + ", surfaceController " + winAnimator.mSurfaceController); mOrientationChanging = false; setOrientationChanging(false); mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); } } } boolean getOrientationChanging() { // In addition to the local state flag, we must also consider the difference in the last // reported configuration vs. the current state. If the client code has not been informed of // the change, logic dependent on having finished processing the orientation, such as // unfreezing, could be improperly triggered. // TODO(b/62846907): Checking against {@link mLastReportedConfiguration} could be flaky as // this is not necessarily what the client has processed yet. Find a // better indicator consistent with the client. return mOrientationChanging || getConfiguration().orientation != mLastReportedConfiguration.orientation; } void setOrientationChanging(boolean changing) { mOrientationChanging = changing; } DisplayContent getDisplayContent() { return mToken.getDisplayContent(); } Loading Loading @@ -2663,10 +2680,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mAppFreezing = false; if (mHasSurface && !mOrientationChanging if (mHasSurface && !getOrientationChanging() && mService.mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) { if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "set mOrientationChanging of " + this); mOrientationChanging = true; setOrientationChanging(true); mService.mRoot.mOrientationChangeComplete = false; } mLastFreezeDuration = 0; Loading Loading @@ -3085,7 +3102,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mWinAnimator.mSurfaceResized = false; mReportOrientationChanged = false; } catch (RemoteException e) { mOrientationChanging = false; setOrientationChanging(false); mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime); // We are assuming the hosting process is dead or in a zombie state. Loading Loading @@ -3444,10 +3461,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP pw.print(" mDestroying="); pw.print(mDestroying); pw.print(" mRemoved="); pw.println(mRemoved); } if (mOrientationChanging || mAppFreezing || mTurnOnScreen if (getOrientationChanging() || mAppFreezing || mTurnOnScreen || mReportOrientationChanged) { pw.print(prefix); pw.print("mOrientationChanging="); pw.print(mOrientationChanging); pw.print(" configOrientationChanging="); pw.print(mLastReportedConfiguration.orientation != getConfiguration().orientation); pw.print(" mAppFreezing="); pw.print(mAppFreezing); pw.print(" mTurnOnScreen="); pw.print(mTurnOnScreen); pw.print(" mReportOrientationChanged="); pw.println(mReportOrientationChanged); Loading
services/core/java/com/android/server/wm/WindowStateAnimator.java +7 −7 Original line number Diff line number Diff line Loading @@ -1527,11 +1527,11 @@ class WindowStateAnimator { // There is no need to wait for an animation change if our window is gone for layout // already as we'll never be visible. if (w.mOrientationChanging && w.isGoneForLayoutLw()) { if (w.getOrientationChanging() && w.isGoneForLayoutLw()) { if (DEBUG_ORIENTATION) { Slog.v(TAG, "Orientation change skips hidden " + w); } w.mOrientationChanging = false; w.setOrientationChanging(false); } return; } Loading Loading @@ -1564,8 +1564,8 @@ class WindowStateAnimator { // really hidden (gone for layout), there is no point in still waiting for it. // Note that this does introduce a potential glitch if the window becomes unhidden // before it has drawn for the new orientation. if (w.mOrientationChanging && w.isGoneForLayoutLw()) { w.mOrientationChanging = false; if (w.getOrientationChanging() && w.isGoneForLayoutLw()) { w.setOrientationChanging(false); if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation change skips hidden " + w); } Loading Loading @@ -1618,7 +1618,7 @@ class WindowStateAnimator { mAnimator.setPendingLayoutChanges(w.getDisplayId(), WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM); } else { w.mOrientationChanging = false; w.setOrientationChanging(false); } } if (hasSurface()) { Loading @@ -1631,14 +1631,14 @@ class WindowStateAnimator { displayed = true; } if (w.mOrientationChanging) { if (w.getOrientationChanging()) { if (!w.isDrawnLw()) { mAnimator.mBulkUpdateParams &= ~SET_ORIENTATION_CHANGE_COMPLETE; mAnimator.mLastWindowFreezeSource = w; if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation continue waiting for draw in " + w); } else { w.mOrientationChanging = false; w.setOrientationChanging(false); if (DEBUG_ORIENTATION) Slog.v(TAG, "Orientation change complete in " + w); } } Loading