Merge "Add logs to indicate why a surface is invalid"

This commit is contained in:
Tiger Huang
2021-01-09 06:24:02 +00:00
committed by Android (Google) Code Review
2 changed files with 37 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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,