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

Commit 6c71c0b8 authored by Chong Zhang's avatar Chong Zhang
Browse files

Never "save" if the surface control is null.

This may or may not happen, but putting in some preventative measure and
extra logging to help debug crashes related to null mSurfaceController.

bug: 27533667
Change-Id: I010147da819402c48efd26a7cc631776052a702d
parent c2a091a0
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -1878,6 +1878,11 @@ final class WindowState implements WindowManagerPolicy.WindowState {
    }

    private boolean shouldSaveSurface() {
        if (mWinAnimator.mSurfaceController == null) {
            // Don't bother if the surface controller is gone for any reason.
            return false;
        }

        if ((mAttrs.flags & FLAG_SECURE) != 0) {
            // We don't save secure surfaces since their content shouldn't be shown while the app
            // isn't on screen and content might leak through during the transition animation with
@@ -1951,11 +1956,19 @@ final class WindowState implements WindowManagerPolicy.WindowState {
            return;
        }
        mSurfaceSaved = false;
        if (mWinAnimator.mSurfaceController != null) {
            setHasSurface(true);
            mWinAnimator.mDrawState = WindowStateAnimator.READY_TO_SHOW;

            if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
                Slog.v(TAG, "Restoring saved surface: " + this);
            }
        } else {
            // mSurfaceController shouldn't be null if mSurfaceSaved was still true at
            // this point. Even if we destroyed the saved surface because of rotation
            // or resize, mSurfaceSaved flag should have been cleared. So this is a wtf.
            Slog.wtf(TAG, "Failed to restore saved surface: surface gone! " + this);
        }
    }

    public boolean hasSavedSurface() {