Add logs to indicate why a surface is invalid
This helps us to debug. Bug: 175954493 Test: Locally make leashes invalid and check the log format. Change-Id: Idcde497ffee1f10a4289520e154aa8b39eed1f78
This commit is contained in:
@@ -333,6 +333,8 @@ public final class SurfaceControl implements Parcelable {
|
||||
*/
|
||||
public long mNativeObject;
|
||||
private long mNativeHandle;
|
||||
private boolean mDebugRelease = false;
|
||||
private Throwable mReleaseStack = null;
|
||||
|
||||
// TODO: Move width/height to native and fix locking through out.
|
||||
private final Object mLock = new Object();
|
||||
@@ -580,6 +582,13 @@ public final class SurfaceControl implements Parcelable {
|
||||
}
|
||||
mNativeObject = nativeObject;
|
||||
mNativeHandle = mNativeObject != 0 ? nativeGetHandle(nativeObject) : 0;
|
||||
if (mNativeObject == 0) {
|
||||
if (mDebugRelease) {
|
||||
mReleaseStack = new Throwable("assigned zero nativeObject here");
|
||||
}
|
||||
} else {
|
||||
mReleaseStack = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -590,6 +599,7 @@ public final class SurfaceControl implements Parcelable {
|
||||
mWidth = other.mWidth;
|
||||
mHeight = other.mHeight;
|
||||
mLocalOwnerView = other.mLocalOwnerView;
|
||||
mDebugRelease = other.mDebugRelease;
|
||||
assignNativeObject(nativeCopyFromSurfaceControl(other.mNativeObject), callsite);
|
||||
}
|
||||
|
||||
@@ -1419,6 +1429,7 @@ public final class SurfaceControl implements Parcelable {
|
||||
mName = in.readString8();
|
||||
mWidth = in.readInt();
|
||||
mHeight = in.readInt();
|
||||
mDebugRelease = in.readBoolean();
|
||||
|
||||
long object = 0;
|
||||
if (in.readInt() != 0) {
|
||||
@@ -1437,8 +1448,12 @@ public final class SurfaceControl implements Parcelable {
|
||||
dest.writeString8(mName);
|
||||
dest.writeInt(mWidth);
|
||||
dest.writeInt(mHeight);
|
||||
dest.writeBoolean(mDebugRelease);
|
||||
if (mNativeObject == 0) {
|
||||
dest.writeInt(0);
|
||||
if (mReleaseStack != null) {
|
||||
Log.w(TAG, "Sending invalid " + this + " caused by:", mReleaseStack);
|
||||
}
|
||||
} else {
|
||||
dest.writeInt(1);
|
||||
}
|
||||
@@ -1449,6 +1464,13 @@ public final class SurfaceControl implements Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public void setDebugRelease(boolean debug) {
|
||||
mDebugRelease = debug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether two {@link SurfaceControl} objects represent the same surface.
|
||||
*
|
||||
@@ -1519,6 +1541,9 @@ public final class SurfaceControl implements Parcelable {
|
||||
nativeRelease(mNativeObject);
|
||||
mNativeObject = 0;
|
||||
mNativeHandle = 0;
|
||||
if (mDebugRelease) {
|
||||
mReleaseStack = new Throwable("released here");
|
||||
}
|
||||
mCloseGuard.close();
|
||||
}
|
||||
}
|
||||
@@ -1534,8 +1559,11 @@ public final class SurfaceControl implements Parcelable {
|
||||
}
|
||||
|
||||
private void checkNotReleased() {
|
||||
if (mNativeObject == 0) throw new NullPointerException(
|
||||
"Invalid " + this + ", mNativeObject is null. Have you called release() already?");
|
||||
if (mNativeObject == 0) {
|
||||
Log.wtf(TAG, "Invalid " + this + " caused by:", mReleaseStack);
|
||||
throw new NullPointerException(
|
||||
"mNativeObject of " + this + " is null. Have you called release() already?");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2383,6 +2411,7 @@ public final class SurfaceControl implements Parcelable {
|
||||
public static SurfaceControl mirrorSurface(SurfaceControl mirrorOf) {
|
||||
long nativeObj = nativeMirrorSurface(mirrorOf.mNativeObject);
|
||||
SurfaceControl sc = new SurfaceControl();
|
||||
sc.mDebugRelease = mirrorOf.mDebugRelease;
|
||||
sc.assignNativeObject(nativeObj, "mirrorSurface");
|
||||
return sc;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.os.Build.IS_DEBUGGABLE;
|
||||
import static android.view.InsetsState.ITYPE_CLIMATE_BAR;
|
||||
import static android.view.InsetsState.ITYPE_EXTRA_NAVIGATION_BAR;
|
||||
import static android.view.InsetsState.ITYPE_IME;
|
||||
@@ -552,6 +553,11 @@ class InsetsSourceProvider {
|
||||
// TODO: use 0 alpha and remove t.hide() once b/138459974 is fixed.
|
||||
t.setAlpha(animationLeash, 1 /* alpha */);
|
||||
t.hide(animationLeash);
|
||||
|
||||
// TODO(b/175954493): Remove this after finding root cause.
|
||||
if (IS_DEBUGGABLE) {
|
||||
animationLeash.setDebugRelease(true);
|
||||
}
|
||||
}
|
||||
ProtoLog.i(WM_DEBUG_IME,
|
||||
"ControlAdapter startAnimation mSource: %s controlTarget: %s", mSource,
|
||||
|
||||
Reference in New Issue
Block a user