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:
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user