Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 596e4fd4 authored by Tiger Huang's avatar Tiger Huang
Browse files

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
parent dd0180a1
Loading
Loading
Loading
Loading
+31 −2
Original line number Diff line number Diff line
@@ -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;
    }
+6 −0
Original line number Diff line number Diff line
@@ -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,