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

Commit 465376c5 authored by Chong Zhang's avatar Chong Zhang Committed by Android (Google) Code Review
Browse files

Merge "Don't release surface if relayout is visible" into nyc-mr1-dev

parents f86d8551 546fd255
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -2907,9 +2907,23 @@ public class WindowManagerService extends IWindowManager.Stub
                    }
                    result |= RELAYOUT_RES_SURFACE_CHANGED;
                }
                final WindowSurfaceController surfaceController = winAnimator.mSurfaceController;
                if (viewVisibility == View.VISIBLE && surfaceController != null) {
                    // We already told the client to go invisible, but the message may not be
                    // handled yet, or it might want to draw a last frame. If we already have a
                    // surface, let the client use that, but don't create new surface at this point.
                    surfaceController.getSurface(outSurface);
                } else {
                    if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win);

                    try {
                        Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "wmReleaseOutSurface_"
                                + win.mAttrs.getTitle());
                        outSurface.release();
                if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win);
                    } finally {
                        Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
                    }
                }
            }

            if (focusMayChange) {
@@ -3044,6 +3058,7 @@ public class WindowManagerService extends IWindowManager.Stub
        } else {
            // For some reason there isn't a surface.  Clear the
            // caller's object so they see the same state.
            Slog.w(TAG_WM, "Failed to create surface control for " + win);
            outSurface.release();
        }
        return result;