Merge "Add logs that indicate why a surface is invalid" into rvc-dev am: 461f380988
Change-Id: I899d92ce094c78a4d7d6de49433041c9a5fd6d0d
This commit is contained in:
@@ -228,6 +228,7 @@ public final class SurfaceControl implements Parcelable {
|
||||
*/
|
||||
public long mNativeObject;
|
||||
private long mNativeHandle;
|
||||
private Throwable mReleaseStack = null;
|
||||
|
||||
// TODO: Move this to native.
|
||||
private final Object mSizeLock = new Object();
|
||||
@@ -426,11 +427,18 @@ public final class SurfaceControl implements Parcelable {
|
||||
if (mNativeObject != 0) {
|
||||
release();
|
||||
}
|
||||
if (nativeObject != 0) {
|
||||
if (nativeObject != 0) {
|
||||
mCloseGuard.open("release");
|
||||
}
|
||||
mNativeObject = nativeObject;
|
||||
mNativeHandle = mNativeObject != 0 ? nativeGetHandle(nativeObject) : 0;
|
||||
if (mNativeObject == 0) {
|
||||
if (Build.IS_DEBUGGABLE) {
|
||||
mReleaseStack = new Throwable("assigned zero nativeObject here");
|
||||
}
|
||||
} else {
|
||||
mReleaseStack = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -989,10 +997,21 @@ public final class SurfaceControl implements Parcelable {
|
||||
nativeRelease(mNativeObject);
|
||||
mNativeObject = 0;
|
||||
mNativeHandle = 0;
|
||||
if (Build.IS_DEBUGGABLE) {
|
||||
mReleaseStack = new Throwable("released here");
|
||||
}
|
||||
mCloseGuard.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the call stack that assigned mNativeObject to zero.
|
||||
* @hide
|
||||
*/
|
||||
public Throwable getReleaseStack() {
|
||||
return mReleaseStack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnect any client still connected to the surface.
|
||||
* @hide
|
||||
@@ -1004,8 +1023,11 @@ public final class SurfaceControl implements Parcelable {
|
||||
}
|
||||
|
||||
private void checkNotReleased() {
|
||||
if (mNativeObject == 0) throw new NullPointerException(
|
||||
"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?");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2445,8 +2445,17 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
if (controls != null) {
|
||||
final int length = Math.min(controls.length, outControls.length);
|
||||
for (int i = 0; i < length; i++) {
|
||||
outControls[i] = win.isClientLocal()
|
||||
? new InsetsSourceControl(controls[i]) : controls[i];
|
||||
final InsetsSourceControl control = controls[i];
|
||||
|
||||
// Check if we are sending invalid leashes.
|
||||
final SurfaceControl leash = control != null ? control.getLeash() : null;
|
||||
if (leash != null && !leash.isValid()) {
|
||||
Slog.wtf(TAG, leash + " is not valid before sending to " + win,
|
||||
leash.getReleaseStack());
|
||||
}
|
||||
|
||||
outControls[i] = win.isClientLocal() && control != null
|
||||
? new InsetsSourceControl(control) : control;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user