Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 020098dd authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am c6592d2e: am 67a1b7d6: Merge "Fix issue #5508024: Rotation jank seen in...

am c6592d2e: am 67a1b7d6: Merge "Fix issue #5508024: Rotation jank seen in live wallpapers" into ics-mr0

* commit 'c6592d2e':
  Fix issue #5508024: Rotation jank seen in live wallpapers
parents 5ee59080 c6592d2e
Loading
Loading
Loading
Loading
+31 −18
Original line number Diff line number Diff line
@@ -3969,6 +3969,7 @@ public class WindowManagerService extends IWindowManager.Stub
                if (w.mAppFreezing) {
                    w.mAppFreezing = false;
                    if (w.mSurface != null && !w.mOrientationChanging) {
                        if (DEBUG_ORIENTATION) Slog.v(TAG, "set mOrientationChanging of " + w);
                        w.mOrientationChanging = true;
                    }
                    unfrozeWindows = true;
@@ -5102,7 +5103,7 @@ public class WindowManagerService extends IWindowManager.Stub
        }

        if (rawss == null) {
            Log.w(TAG, "Failure taking screenshot for (" + dw + "x" + dh
            Slog.w(TAG, "Failure taking screenshot for (" + dw + "x" + dh
                    + ") to layer " + maxLayer);
            return null;
        }
@@ -5308,6 +5309,7 @@ public class WindowManagerService extends IWindowManager.Stub
        for (int i=mWindows.size()-1; i>=0; i--) {
            WindowState w = mWindows.get(i);
            if (w.mSurface != null) {
                if (DEBUG_ORIENTATION) Slog.v(TAG, "Set mOrientationChanging of " + w);
                w.mOrientationChanging = true;
            }
        }
@@ -7124,7 +7126,7 @@ public class WindowManagerService extends IWindowManager.Stub
        if (DEBUG_LAYERS) {
            RuntimeException here = new RuntimeException("here");
            here.fillInStackTrace();
            Log.v(TAG, "Assigning layers", here);
            Slog.v(TAG, "Assigning layers", here);
        }

        for (i=0; i<N; i++) {
@@ -7363,6 +7365,25 @@ public class WindowManagerService extends IWindowManager.Stub
        return mPolicy.finishLayoutLw();
    }

    void makeWindowFreezingScreenIfNeededLocked(WindowState w) {
        // If the screen is currently frozen or off, then keep
        // it frozen/off until this window draws at its new
        // orientation.
        if (mDisplayFrozen || !mPolicy.isScreenOnFully()) {
            if (DEBUG_ORIENTATION) Slog.v(TAG,
                    "Changing surface while display frozen: " + w);
            w.mOrientationChanging = true;
            if (!mWindowsFreezingScreen) {
                mWindowsFreezingScreen = true;
                // XXX should probably keep timeout from
                // when we first froze the display.
                mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
                mH.sendMessageDelayed(mH.obtainMessage(
                        H.WINDOW_FREEZE_TIMEOUT), 2000);
            }
        }
    }

    // "Something has changed!  Let's make it correct now."
    private final void performLayoutAndPlaceSurfacesLockedInner(
            boolean recoveringMemory) {
@@ -7714,6 +7735,10 @@ public class WindowManagerService extends IWindowManager.Stub
                                        + " drawn=" + wtoken.numDrawnWindows);
                                wtoken.showAllWindowsLocked();
                                unsetAppFreezingScreenLocked(wtoken, false, true);
                                if (DEBUG_ORIENTATION) Slog.i(TAG,
                                        "Setting orientationChangeComplete=true because wtoken "
                                        + wtoken + " numInteresting=" + numInteresting
                                        + " numDrawn=" + wtoken.numDrawnWindows);
                                orientationChangeComplete = true;
                            }
                        } else if (!wtoken.allDrawn) {
@@ -8221,22 +8246,7 @@ public class WindowManagerService extends IWindowManager.Stub

                            w.mLastContentInsets.set(w.mContentInsets);
                            w.mLastVisibleInsets.set(w.mVisibleInsets);
                            // If the screen is currently frozen or off, then keep
                            // it frozen/off until this window draws at its new
                            // orientation.
                            if (mDisplayFrozen || !mPolicy.isScreenOnFully()) {
                                if (DEBUG_ORIENTATION) Slog.v(TAG,
                                        "Resizing while display frozen: " + w);
                                w.mOrientationChanging = true;
                                if (!mWindowsFreezingScreen) {
                                    mWindowsFreezingScreen = true;
                                    // XXX should probably keep timeout from
                                    // when we first froze the display.
                                    mH.removeMessages(H.WINDOW_FREEZE_TIMEOUT);
                                    mH.sendMessageDelayed(mH.obtainMessage(
                                            H.WINDOW_FREEZE_TIMEOUT), 2000);
                                }
                            }
                            makeWindowFreezingScreenIfNeededLocked(w);
                            // If the orientation is changing, then we need to
                            // hold off on unfreezing the display until this
                            // window has been redrawn; to do that, we need
@@ -8559,6 +8569,8 @@ public class WindowManagerService extends IWindowManager.Stub
                                + Integer.toHexString(diff));
                    }
                    win.mConfiguration = mCurConfiguration;
                    if (DEBUG_ORIENTATION && win.mDrawPending) Slog.i(
                            TAG, "Resizing " + win + " WITH DRAW PENDING"); 
                    win.mClient.resized((int)win.mSurfaceW, (int)win.mSurfaceH,
                            win.mLastContentInsets, win.mLastVisibleInsets, win.mDrawPending,
                            configChanged ? win.mConfiguration : null);
@@ -9083,6 +9095,7 @@ public class WindowManagerService extends IWindowManager.Stub
        
        if (CUSTOM_SCREEN_ROTATION && mScreenRotationAnimation != null
                && mScreenRotationAnimation.hasScreenshot()) {
            if (DEBUG_ORIENTATION) Slog.i(TAG, "**** Dismissing screen rotation animation");
            if (mScreenRotationAnimation.dismiss(mFxSession, MAX_ANIMATION_DURATION,
                    mTransitionAnimationScale, mCurDisplayWidth, mCurDisplayHeight)) {
                requestAnimationLocked(0);
+4 −1
Original line number Diff line number Diff line
@@ -612,6 +612,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
        if (mSurface == null) {
            mReportDestroySurface = false;
            mSurfacePendingDestroy = false;
            Slog.i(WindowManagerService.TAG, "createSurface " + this + ": DRAW NOW PENDING");
            mDrawPending = true;
            mCommitDrawPending = false;
            mReadyToShow = false;
@@ -619,6 +620,8 @@ final class WindowState implements WindowManagerPolicy.WindowState {
                mAppToken.allDrawn = false;
            }

            mService.makeWindowFreezingScreenIfNeededLocked(this);

            int flags = 0;

            if ((mAttrs.flags&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
@@ -783,7 +786,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
    boolean finishDrawingLocked() {
        if (mDrawPending) {
            if (SHOW_TRANSACTIONS || WindowManagerService.DEBUG_ORIENTATION) Slog.v(
                WindowManagerService.TAG, "finishDrawingLocked: " + mSurface);
                WindowManagerService.TAG, "finishDrawingLocked: " + this + " in " + mSurface);
            mCommitDrawPending = true;
            mDrawPending = false;
            return true;