am c139a41c: am d6770a0c: am 4fb4163f: Merge "Call Surface.release() for starting windows" into lmp-dev

* commit 'c139a41ce722519beb9849cc509b3cbc61551e78':
  Call Surface.release() for starting windows
This commit is contained in:
Craig Mautner
2014-10-01 17:01:46 +00:00
committed by Android Git Automerger
2 changed files with 42 additions and 30 deletions

View File

@@ -2712,9 +2712,10 @@ public class WindowManagerService extends IWindowManager.Stub
if (atoken != null) { if (atoken != null) {
if (atoken.startingWindow == win) { if (atoken.startingWindow == win) {
if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Nulling startingWindow " + win); if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Notify removed startingWindow " + win);
atoken.startingWindow = null; scheduleRemoveStartingWindowLocked(atoken);
} else if (atoken.allAppWindows.size() == 0 && atoken.startingData != null) { } else
if (atoken.allAppWindows.size() == 0 && atoken.startingData != null) {
// If this is the last window and we had requested a starting // If this is the last window and we had requested a starting
// transition window, well there is no point now. // transition window, well there is no point now.
if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Nulling last startingWindow"); 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) { } else if (atoken.allAppWindows.size() == 1 && atoken.startingView != null) {
// If this is the last window except for a starting transition // If this is the last window except for a starting transition
// window, we need to get rid of the 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) { synchronized (mWindowMap) {
AppWindowToken wtoken = mTokenMap.get(token).appWindowToken; AppWindowToken wtoken = mTokenMap.get(token).appWindowToken;
if (wtoken.startingWindow != null) { if (wtoken.startingWindow != null) {
scheduleRemoveStartingWindow(wtoken); scheduleRemoveStartingWindowLocked(wtoken);
} }
} }
} }
@@ -4791,14 +4792,19 @@ public class WindowManagerService extends IWindowManager.Stub
if (!delayed && wtoken != null) { if (!delayed && wtoken != null) {
wtoken.updateReportedVisibilityLocked(); wtoken.updateReportedVisibilityLocked();
} }
// Will only remove if startingToken non null.
scheduleRemoveStartingWindowLocked(startingToken);
} }
Binder.restoreCallingIdentity(origId); 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 (wtoken != null && wtoken.startingWindow != null) {
if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) + if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) +
": Schedule remove starting " + wtoken + (wtoken != null ? ": Schedule remove starting " + wtoken + (wtoken != null ?
@@ -10236,7 +10242,7 @@ public class WindowManagerService extends IWindowManager.Stub
winAnimator.mSurfaceShown = false; winAnimator.mSurfaceShown = false;
winAnimator.mSurfaceControl = null; winAnimator.mSurfaceControl = null;
winAnimator.mWin.mHasSurface = false; winAnimator.mWin.mHasSurface = false;
scheduleRemoveStartingWindow(winAnimator.mWin.mAppToken); scheduleRemoveStartingWindowLocked(winAnimator.mWin.mAppToken);
} }
try { try {

View File

@@ -515,6 +515,7 @@ class WindowStateAnimator {
static class SurfaceTrace extends SurfaceControl { static class SurfaceTrace extends SurfaceControl {
private final static String SURFACE_TAG = "SurfaceTrace"; private final static String SURFACE_TAG = "SurfaceTrace";
private final static boolean logSurfaceTrace = DEBUG_SURFACE_TRACE;
final static ArrayList<SurfaceTrace> sSurfaces = new ArrayList<SurfaceTrace>(); final static ArrayList<SurfaceTrace> sSurfaces = new ArrayList<SurfaceTrace>();
private float mSurfaceTraceAlpha = 0; private float mSurfaceTraceAlpha = 0;
@@ -534,7 +535,7 @@ class WindowStateAnimator {
super(s, name, w, h, format, flags); super(s, name, w, h, format, flags);
mName = name != null ? name : "Not named"; mName = name != null ? name : "Not named";
mSize.set(w, h); 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)); + Debug.getCallers(3));
synchronized (sSurfaces) { synchronized (sSurfaces) {
sSurfaces.add(0, this); sSurfaces.add(0, this);
@@ -544,8 +545,8 @@ class WindowStateAnimator {
@Override @Override
public void setAlpha(float alpha) { public void setAlpha(float alpha) {
if (mSurfaceTraceAlpha != alpha) { if (mSurfaceTraceAlpha != alpha) {
Slog.v(SURFACE_TAG, "setAlpha(" + alpha + "): OLD:" + this + ". Called by " if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setAlpha(" + alpha + "): OLD:" + this +
+ Debug.getCallers(3)); ". Called by " + Debug.getCallers(3));
mSurfaceTraceAlpha = alpha; mSurfaceTraceAlpha = alpha;
} }
super.setAlpha(alpha); super.setAlpha(alpha);
@@ -554,8 +555,8 @@ class WindowStateAnimator {
@Override @Override
public void setLayer(int zorder) { public void setLayer(int zorder) {
if (zorder != mLayer) { if (zorder != mLayer) {
Slog.v(SURFACE_TAG, "setLayer(" + zorder + "): OLD:" + this + ". Called by " if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setLayer(" + zorder + "): OLD:" + this
+ Debug.getCallers(3)); + ". Called by " + Debug.getCallers(3));
mLayer = zorder; mLayer = zorder;
} }
super.setLayer(zorder); super.setLayer(zorder);
@@ -576,8 +577,8 @@ class WindowStateAnimator {
@Override @Override
public void setPosition(float x, float y) { public void setPosition(float x, float y) {
if (x != mPosition.x || y != mPosition.y) { if (x != mPosition.x || y != mPosition.y) {
Slog.v(SURFACE_TAG, "setPosition(" + x + "," + y + "): OLD:" + this if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setPosition(" + x + "," + y + "): OLD:"
+ ". Called by " + Debug.getCallers(3)); + this + ". Called by " + Debug.getCallers(3));
mPosition.set(x, y); mPosition.set(x, y);
} }
super.setPosition(x, y); super.setPosition(x, y);
@@ -586,8 +587,8 @@ class WindowStateAnimator {
@Override @Override
public void setSize(int w, int h) { public void setSize(int w, int h) {
if (w != mSize.x || h != mSize.y) { if (w != mSize.x || h != mSize.y) {
Slog.v(SURFACE_TAG, "setSize(" + w + "," + h + "): OLD:" + this + ". Called by " if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setSize(" + w + "," + h + "): OLD:"
+ Debug.getCallers(3)); + this + ". Called by " + Debug.getCallers(3));
mSize.set(w, h); mSize.set(w, h);
} }
super.setSize(w, h); super.setSize(w, h);
@@ -597,8 +598,9 @@ class WindowStateAnimator {
public void setWindowCrop(Rect crop) { public void setWindowCrop(Rect crop) {
if (crop != null) { if (crop != null) {
if (!crop.equals(mWindowCrop)) { if (!crop.equals(mWindowCrop)) {
Slog.v(SURFACE_TAG, "setWindowCrop(" + crop.toShortString() + "): OLD:" + this if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setWindowCrop("
+ ". Called by " + Debug.getCallers(3)); + crop.toShortString() + "): OLD:" + this + ". Called by "
+ Debug.getCallers(3));
mWindowCrop.set(crop); mWindowCrop.set(crop);
} }
} }
@@ -608,8 +610,8 @@ class WindowStateAnimator {
@Override @Override
public void setLayerStack(int layerStack) { public void setLayerStack(int layerStack) {
if (layerStack != mLayerStack) { if (layerStack != mLayerStack) {
Slog.v(SURFACE_TAG, "setLayerStack(" + layerStack + "): OLD:" + this if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setLayerStack(" + layerStack + "): OLD:"
+ ". Called by " + Debug.getCallers(3)); + this + ". Called by " + Debug.getCallers(3));
mLayerStack = layerStack; mLayerStack = layerStack;
} }
super.setLayerStack(layerStack); super.setLayerStack(layerStack);
@@ -618,8 +620,8 @@ class WindowStateAnimator {
@Override @Override
public void setOpaque(boolean isOpaque) { public void setOpaque(boolean isOpaque) {
if (isOpaque != mIsOpaque) { if (isOpaque != mIsOpaque) {
Slog.v(SURFACE_TAG, "setOpaque(" + isOpaque + "): OLD:" + this if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setOpaque(" + isOpaque + "): OLD:"
+ ". Called by " + Debug.getCallers(3)); + this + ". Called by " + Debug.getCallers(3));
mIsOpaque = isOpaque; mIsOpaque = isOpaque;
} }
super.setOpaque(isOpaque); super.setOpaque(isOpaque);
@@ -628,8 +630,9 @@ class WindowStateAnimator {
@Override @Override
public void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { public void setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) {
if (dsdx != mDsdx || dtdx != mDtdx || dsdy != mDsdy || dtdy != mDtdy) { if (dsdx != mDsdx || dtdx != mDtdx || dsdy != mDsdy || dtdy != mDtdy) {
Slog.v(SURFACE_TAG, "setMatrix(" + dsdx + "," + dtdx + "," + dsdy + "," + dtdy + if (logSurfaceTrace) Slog.v(SURFACE_TAG, "setMatrix(" + dsdx + "," + dtdx + ","
"): OLD:" + this + ". Called by " + Debug.getCallers(3)); + dsdy + "," + dtdy + "): OLD:" + this + ". Called by "
+ Debug.getCallers(3));
mDsdx = dsdx; mDsdx = dsdx;
mDtdx = dtdx; mDtdx = dtdx;
mDsdy = dsdy; mDsdy = dsdy;
@@ -641,7 +644,8 @@ class WindowStateAnimator {
@Override @Override
public void hide() { public void hide() {
if (mShown) { 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; mShown = false;
} }
super.hide(); super.hide();
@@ -650,7 +654,8 @@ class WindowStateAnimator {
@Override @Override
public void show() { public void show() {
if (!mShown) { 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; mShown = true;
} }
super.show(); super.show();
@@ -659,7 +664,8 @@ class WindowStateAnimator {
@Override @Override
public void destroy() { public void destroy() {
super.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) { synchronized (sSurfaces) {
sSurfaces.remove(this); sSurfaces.remove(this);
} }
@@ -668,7 +674,7 @@ class WindowStateAnimator {
@Override @Override
public void release() { public void release() {
super.release(); super.release();
Slog.v(SURFACE_TAG, "release: " + this + ". Called by " if (logSurfaceTrace) Slog.v(SURFACE_TAG, "release: " + this + ". Called by "
+ Debug.getCallers(3)); + Debug.getCallers(3));
synchronized (sSurfaces) { synchronized (sSurfaces) {
sSurfaces.remove(this); sSurfaces.remove(this);