summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/SurfaceControl.java33
-rw-r--r--services/core/java/com/android/server/wm/InsetsSourceProvider.java6
2 files changed, 37 insertions, 2 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index f642d7580d4d..2f973571fff7 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -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);
}
@@ -1450,6 +1465,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.
*
* @param other The other object to check
@@ -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;
}
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index ff5b356d16ad..40e7a8e9311b 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -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,