diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 24 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowStateAnimator.java | 48 |
2 files changed, 42 insertions, 30 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 999649b02e68..62a5e63417f1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2712,9 +2712,10 @@ public class WindowManagerService extends IWindowManager.Stub if (atoken != null) { if (atoken.startingWindow == win) { - if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Nulling startingWindow " + win); - atoken.startingWindow = null; - } else if (atoken.allAppWindows.size() == 0 && atoken.startingData != null) { + if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Notify removed startingWindow " + win); + scheduleRemoveStartingWindowLocked(atoken); + } else + if (atoken.allAppWindows.size() == 0 && atoken.startingData != null) { // If this is the last window and we had requested a starting // transition window, well there is no point now. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Nulling last startingWindow"); @@ -2722,7 +2723,7 @@ public class WindowManagerService extends IWindowManager.Stub } else if (atoken.allAppWindows.size() == 1 && atoken.startingView != null) { // If this is the last window except for a starting transition // window, we need to get rid of the starting transition. - scheduleRemoveStartingWindow(atoken); + scheduleRemoveStartingWindowLocked(atoken); } } @@ -4329,7 +4330,7 @@ public class WindowManagerService extends IWindowManager.Stub synchronized (mWindowMap) { AppWindowToken wtoken = mTokenMap.get(token).appWindowToken; if (wtoken.startingWindow != null) { - scheduleRemoveStartingWindow(wtoken); + scheduleRemoveStartingWindowLocked(wtoken); } } } @@ -4791,14 +4792,19 @@ public class WindowManagerService extends IWindowManager.Stub if (!delayed && wtoken != null) { wtoken.updateReportedVisibilityLocked(); } + + // Will only remove if startingToken non null. + scheduleRemoveStartingWindowLocked(startingToken); } Binder.restoreCallingIdentity(origId); - // Will only remove if startingToken non null. - scheduleRemoveStartingWindow(startingToken); } - void scheduleRemoveStartingWindow(AppWindowToken wtoken) { + void scheduleRemoveStartingWindowLocked(AppWindowToken wtoken) { + if (mH.hasMessages(H.REMOVE_STARTING, wtoken)) { + // Already scheduled. + return; + } if (wtoken != null && wtoken.startingWindow != null) { if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) + ": Schedule remove starting " + wtoken + (wtoken != null ? @@ -10236,7 +10242,7 @@ public class WindowManagerService extends IWindowManager.Stub winAnimator.mSurfaceShown = false; winAnimator.mSurfaceControl = null; winAnimator.mWin.mHasSurface = false; - scheduleRemoveStartingWindow(winAnimator.mWin.mAppToken); + scheduleRemoveStartingWindowLocked(winAnimator.mWin.mAppToken); } try { diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 5b007d49fcfa..0c727f33172e 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -515,6 +515,7 @@ class WindowStateAnimator { static class SurfaceTrace extends SurfaceControl { private final static String SURFACE_TAG = "SurfaceTrace"; + private final static boolean logSurfaceTrace = DEBUG_SURFACE_TRACE; final static ArrayList<SurfaceTrace> sSurfaces = new ArrayList<SurfaceTrace>(); private float mSurfaceTraceAlpha = 0; @@ -534,7 +535,7 @@ class WindowStateAnimator { super(s, name, w, h, format, flags); mName = name != null ? name : "Not named"; mSize.set(w, h); - Slog.v(SURFACE_TAG, "ctor: " + this + ". Called by " + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "ctor: " + this + ". Called by " + Debug.getCallers(3)); synchronized (sSurfaces) { sSurfaces.add(0, this); @@ -544,8 +545,8 @@ class WindowStateAnimator { @Override public void setAlpha(float alpha) { if (mSurfaceTraceAlpha != alpha) { - Slog.v(SURFACE_TAG, "setAlpha(" + alpha + "): OLD:" + this + ". Called by " - + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setAlpha(" + alpha + "): OLD:" + this + + ". Called by " + Debug.getCallers(3)); mSurfaceTraceAlpha = alpha; } super.setAlpha(alpha); @@ -554,8 +555,8 @@ class WindowStateAnimator { @Override public void setLayer(int zorder) { if (zorder != mLayer) { - Slog.v(SURFACE_TAG, "setLayer(" + zorder + "): OLD:" + this + ". Called by " - + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setLayer(" + zorder + "): OLD:" + this + + ". Called by " + Debug.getCallers(3)); mLayer = zorder; } super.setLayer(zorder); @@ -576,8 +577,8 @@ class WindowStateAnimator { @Override public void setPosition(float x, float y) { if (x != mPosition.x || y != mPosition.y) { - Slog.v(SURFACE_TAG, "setPosition(" + x + "," + y + "): OLD:" + this - + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setPosition(" + x + "," + y + "): OLD:" + + this + ". Called by " + Debug.getCallers(3)); mPosition.set(x, y); } super.setPosition(x, y); @@ -586,8 +587,8 @@ class WindowStateAnimator { @Override public void setSize(int w, int h) { if (w != mSize.x || h != mSize.y) { - Slog.v(SURFACE_TAG, "setSize(" + w + "," + h + "): OLD:" + this + ". Called by " - + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setSize(" + w + "," + h + "): OLD:" + + this + ". Called by " + Debug.getCallers(3)); mSize.set(w, h); } super.setSize(w, h); @@ -597,8 +598,9 @@ class WindowStateAnimator { public void setWindowCrop(Rect crop) { if (crop != null) { if (!crop.equals(mWindowCrop)) { - Slog.v(SURFACE_TAG, "setWindowCrop(" + crop.toShortString() + "): OLD:" + this - + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setWindowCrop(" + + crop.toShortString() + "): OLD:" + this + ". Called by " + + Debug.getCallers(3)); mWindowCrop.set(crop); } } @@ -608,8 +610,8 @@ class WindowStateAnimator { @Override public void setLayerStack(int layerStack) { if (layerStack != mLayerStack) { - Slog.v(SURFACE_TAG, "setLayerStack(" + layerStack + "): OLD:" + this - + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setLayerStack(" + layerStack + "): OLD:" + + this + ". Called by " + Debug.getCallers(3)); mLayerStack = layerStack; } super.setLayerStack(layerStack); @@ -618,8 +620,8 @@ class WindowStateAnimator { @Override public void setOpaque(boolean isOpaque) { if (isOpaque != mIsOpaque) { - Slog.v(SURFACE_TAG, "setOpaque(" + isOpaque + "): OLD:" + this - + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setOpaque(" + isOpaque + "): OLD:" + + this + ". Called by " + Debug.getCallers(3)); mIsOpaque = isOpaque; } super.setOpaque(isOpaque); @@ -628,8 +630,9 @@ class WindowStateAnimator { @Override public void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { if (dsdx != mDsdx || dtdx != mDtdx || dsdy != mDsdy || dtdy != mDtdy) { - Slog.v(SURFACE_TAG, "setMatrix(" + dsdx + "," + dtdx + "," + dsdy + "," + dtdy + - "): OLD:" + this + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setMatrix(" + dsdx + "," + dtdx + "," + + dsdy + "," + dtdy + "): OLD:" + this + ". Called by " + + Debug.getCallers(3)); mDsdx = dsdx; mDtdx = dtdx; mDsdy = dsdy; @@ -641,7 +644,8 @@ class WindowStateAnimator { @Override public void hide() { if (mShown) { - Slog.v(SURFACE_TAG, "hide: OLD:" + this + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "hide: OLD:" + this + ". Called by " + + Debug.getCallers(3)); mShown = false; } super.hide(); @@ -650,7 +654,8 @@ class WindowStateAnimator { @Override public void show() { if (!mShown) { - Slog.v(SURFACE_TAG, "show: OLD:" + this + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "show: OLD:" + this + ". Called by " + + Debug.getCallers(3)); mShown = true; } super.show(); @@ -659,7 +664,8 @@ class WindowStateAnimator { @Override public void destroy() { super.destroy(); - Slog.v(SURFACE_TAG, "destroy: " + this + ". Called by " + Debug.getCallers(3)); + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "destroy: " + this + ". Called by " + + Debug.getCallers(3)); synchronized (sSurfaces) { sSurfaces.remove(this); } @@ -668,7 +674,7 @@ class WindowStateAnimator { @Override public void release() { super.release(); - Slog.v(SURFACE_TAG, "release: " + this + ". Called by " + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "release: " + this + ". Called by " + Debug.getCallers(3)); synchronized (sSurfaces) { sSurfaces.remove(this); |