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

Commit cdd84fe7 authored by Winson Chung's avatar Winson Chung
Browse files

Couple tweaks for surface control registry



- Fix issue where invalid surface controls were being added to the
  registry but not removed
- Update names for some places where SCs are created
- Add sysprop to enable warning when SCs are built without a specified
  name
- Add wm folks to test owners

Bug: 266978825
Test: atest FrameworksCoreTests:android.view.SurfaceControlRegistryTests
Change-Id: Ib6dbcd3e2d45329f7ea625a1eb57a9200c84bfdb
Signed-off-by: default avatarWinson Chung <winsonc@google.com>
parent 57d6975c
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -786,8 +786,12 @@ public final class SurfaceControl implements Parcelable {
            mReleaseStack = null;
            mReleaseStack = null;
        }
        }
        setUnreleasedWarningCallSite(callsite);
        setUnreleasedWarningCallSite(callsite);
        if (nativeObject != 0) {
            // Only add valid surface controls to the registry. This is called at the end of this
            // method since its information is dumped if the process threshold is reached.
            addToRegistry();
            addToRegistry();
        }
        }
    }


    /**
    /**
     * @hide
     * @hide
@@ -893,6 +897,10 @@ public final class SurfaceControl implements Parcelable {
                        "Only buffer layers can set a valid buffer size.");
                        "Only buffer layers can set a valid buffer size.");
            }
            }


            if (mName == null) {
                Log.w(TAG, "Missing name for SurfaceControl", new Throwable());
            }

            if ((mFlags & FX_SURFACE_MASK) == FX_SURFACE_NORMAL) {
            if ((mFlags & FX_SURFACE_MASK) == FX_SURFACE_NORMAL) {
                setBLASTLayer();
                setBLASTLayer();
            }
            }
@@ -1254,6 +1262,9 @@ public final class SurfaceControl implements Parcelable {
    }
    }


    /**
    /**
     * Note: Most callers should use {@link SurfaceControl.Builder} or one of the other constructors
     *       to build an instance of a SurfaceControl. This constructor is mainly used for
     *       unparceling and passing into an AIDL call as an out parameter.
     * @hide
     * @hide
     */
     */
    public SurfaceControl() {
    public SurfaceControl() {
@@ -2495,6 +2506,7 @@ public final class SurfaceControl implements Parcelable {
    public static SurfaceControl mirrorSurface(SurfaceControl mirrorOf) {
    public static SurfaceControl mirrorSurface(SurfaceControl mirrorOf) {
        long nativeObj = nativeMirrorSurface(mirrorOf.mNativeObject);
        long nativeObj = nativeMirrorSurface(mirrorOf.mNativeObject);
        SurfaceControl sc = new SurfaceControl();
        SurfaceControl sc = new SurfaceControl();
        sc.mName = mirrorOf.mName + " (mirror)";
        sc.assignNativeObject(nativeObj, "mirrorSurface");
        sc.assignNativeObject(nativeObj, "mirrorSurface");
        return sc;
        return sc;
    }
    }
+1 −2
Original line number Original line Diff line number Diff line
@@ -171,8 +171,7 @@ public class SurfaceControlViewHost {
        public SurfacePackage(@NonNull SurfacePackage other) {
        public SurfacePackage(@NonNull SurfacePackage other) {
            SurfaceControl otherSurfaceControl = other.mSurfaceControl;
            SurfaceControl otherSurfaceControl = other.mSurfaceControl;
            if (otherSurfaceControl != null && otherSurfaceControl.isValid()) {
            if (otherSurfaceControl != null && otherSurfaceControl.isValid()) {
                mSurfaceControl = new SurfaceControl();
                mSurfaceControl = new SurfaceControl(otherSurfaceControl, "SurfacePackage");
                mSurfaceControl.copyFrom(otherSurfaceControl, "SurfacePackage");
            }
            }
            mAccessibilityEmbeddedConnection = other.mAccessibilityEmbeddedConnection;
            mAccessibilityEmbeddedConnection = other.mAccessibilityEmbeddedConnection;
            mInputToken = other.mInputToken;
            mInputToken = other.mInputToken;
+12 −0
Original line number Original line Diff line number Diff line
@@ -103,6 +103,18 @@ public class SurfaceControlRegistryTests {
        assertEquals(hash0, SurfaceControlRegistry.getProcessInstance().hashCode());
        assertEquals(hash0, SurfaceControlRegistry.getProcessInstance().hashCode());
    }
    }


    @Test
    public void testInvalidSurfaceControlNotAddedToRegistry() {
        int hash0 = SurfaceControlRegistry.getProcessInstance().hashCode();
        // Verify no changes to the registry when dealing with invalid surface controls
        SurfaceControl sc0 = new SurfaceControl();
        SurfaceControl sc1 = new SurfaceControl(sc0, "test");
        assertEquals(hash0, SurfaceControlRegistry.getProcessInstance().hashCode());
        sc0.release();
        sc1.release();
        assertEquals(hash0, SurfaceControlRegistry.getProcessInstance().hashCode());
    }

    @Test
    @Test
    public void testThresholds() {
    public void testThresholds() {
        SurfaceControlRegistry registry = SurfaceControlRegistry.getProcessInstance();
        SurfaceControlRegistry registry = SurfaceControlRegistry.getProcessInstance();
+2 −0
Original line number Original line Diff line number Diff line
@@ -2234,8 +2234,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            while (leashReference.getParent() != ancestor) {
            while (leashReference.getParent() != ancestor) {
                leashReference = leashReference.getParent();
                leashReference = leashReference.getParent();
            }
            }

            final SurfaceControl rootLeash = leashReference.makeAnimationLeash().setName(
            final SurfaceControl rootLeash = leashReference.makeAnimationLeash().setName(
                    "Transition Root: " + leashReference.getName()).build();
                    "Transition Root: " + leashReference.getName()).build();
            rootLeash.setUnreleasedWarningCallSite("Transition.calculateTransitionRoots");
            startT.setLayer(rootLeash, leashReference.getLastLayer());
            startT.setLayer(rootLeash, leashReference.getLastLayer());
            outInfo.addRootLeash(endDisplayId, rootLeash,
            outInfo.addRootLeash(endDisplayId, rootLeash,
                    ancestor.getBounds().left, ancestor.getBounds().top);
                    ancestor.getBounds().left, ancestor.getBounds().top);