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

Commit 646de4ae authored by Jian-Syuan (Shane) Wong's avatar Jian-Syuan (Shane) Wong Committed by Android (Google) Code Review
Browse files

Merge "Reduce votePreferredFrameRate calls in View and enable velocity mapping...

Merge "Reduce votePreferredFrameRate calls in View and enable velocity mapping for ScrollView" into main
parents aa61184a 5621c36b
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -3809,6 +3809,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     *      1                           PFLAG4_IS_COUNTED_AS_SENSITIVE
     *     1                            PFLAG4_HAS_DRAWN
     *    1                             PFLAG4_HAS_MOVED
     *   1                              PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION
     * |-------|-------|-------|-------|
     */
@@ -3954,6 +3955,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     */
    private static final int PFLAG4_HAS_MOVED = 0x10000000;
    /**
     * Whether the invalidateViewProperty is involked at current frame.
     */
    private static final int PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION = 0x20000000;
    /* End of masks for mPrivateFlags4 */
    /** @hide */
@@ -20945,6 +20951,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        } else {
            damageInParent();
        }
        mPrivateFlags4 |= PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION;
    }
    /**
@@ -23641,14 +23648,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            return renderNode;
        }
        // For VRR to vote the preferred frame rate
        if (sToolkitSetFrameRateReadOnlyFlagValue
                && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
            votePreferredFrameRate();
        }
        mPrivateFlags4 = (mPrivateFlags4 & ~PFLAG4_HAS_MOVED) | PFLAG4_HAS_DRAWN;
        if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0
                || !renderNode.hasDisplayList()
                || (mRecreateDisplayList)) {
@@ -23691,6 +23690,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                    mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
                    mPrivateFlags &= ~PFLAG_DIRTY_MASK;
                    // // For VRR to vote the preferred frame rate
                    if (sToolkitSetFrameRateReadOnlyFlagValue
                            && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
                        votePreferredFrameRate();
                    }
                    mPrivateFlags4 |= PFLAG4_HAS_DRAWN;
                    // Fast path for layouts with no backgrounds
                    if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) {
                        dispatchDraw(canvas);
@@ -23710,10 +23717,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                setDisplayListProperties(renderNode);
            }
        } else {
            if ((mPrivateFlags4 & PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION)
                    == PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION) {
                // For VRR to vote the preferred frame rate
                if (sToolkitSetFrameRateReadOnlyFlagValue
                        && sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
                    votePreferredFrameRate();
                }
                mPrivateFlags4 &= ~PFLAG4_HAS_VIEW_PROPERTY_INVALIDATION;
            }
            mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
            mPrivateFlags &= ~PFLAG_DIRTY_MASK;
        }
        mPrivateFlags4 &= ~PFLAG4_HAS_MOVED;
        mFrameContentVelocity = -1;
        return renderNode;
    }
+1 −0
Original line number Diff line number Diff line
@@ -419,6 +419,7 @@ public class ViewFrameRateTest {
            FLAG_TOOLKIT_FRAME_RATE_VELOCITY_MAPPING_READ_ONLY
    })
    public void frameRateAndCategory() throws Throwable {
        mMovingView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE);
        waitForFrameRateCategoryToSettle();
        mActivityRule.runOnUiThread(() -> {
            mMovingView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_LOW);
+23 −22
Original line number Diff line number Diff line
@@ -754,39 +754,39 @@ public class ViewRootImplTest {
    @RequiresFlagsEnabled({FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY,
            FLAG_TOOLKIT_FRAME_RATE_VIEW_ENABLING_READ_ONLY})
    public void votePreferredFrameRate_voteFrameRateCategory_aggregate() {
        View mView1 = new View(sContext);
        attachViewToWindow(mView1);
        ViewRootImpl viewRootImpl = mView1.getViewRootImpl();
        mView = new View(sContext);
        attachViewToWindow(mView);
        mViewRootImpl = mView.getViewRootImpl();
        sInstrumentation.runOnMainSync(() -> {
            assertEquals(FRAME_RATE_CATEGORY_DEFAULT,
                    viewRootImpl.getPreferredFrameRateCategory());
                    mViewRootImpl.getPreferredFrameRateCategory());
        });

        // reset the frame rate category counts
        for (int i = 0; i < 5; i++) {
            sInstrumentation.runOnMainSync(() -> {
                mView1.setRequestedFrameRate(mView1.REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE);
                mView1.invalidate();
                mView.setRequestedFrameRate(View.REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE);
                mView.invalidate();
            });
            sInstrumentation.waitForIdleSync();
        }

        sInstrumentation.runOnMainSync(() -> {
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_LOW, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_LOW, viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_NORMAL, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_NORMAL, viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH_HINT, 0, null);
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_LOW, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_LOW, mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_NORMAL, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_NORMAL, mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH_HINT, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH_HINT,
                    viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH_HINT, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_NORMAL, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, viewRootImpl.getPreferredFrameRateCategory());
            viewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_LOW, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, viewRootImpl.getPreferredFrameRateCategory());
                    mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_HIGH_HINT, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_NORMAL, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, mViewRootImpl.getPreferredFrameRateCategory());
            mViewRootImpl.votePreferredFrameRateCategory(FRAME_RATE_CATEGORY_LOW, 0, null);
            assertEquals(FRAME_RATE_CATEGORY_HIGH, mViewRootImpl.getPreferredFrameRateCategory());
        });
    }

@@ -947,8 +947,9 @@ public class ViewRootImplTest {
            mView.invalidate();
            runAfterDraw(() -> {
                if (toolkitFrameRateVelocityMappingReadOnly()) {
                    assertEquals(FRAME_RATE_CATEGORY_LOW,
                            mViewRootImpl.getLastPreferredFrameRateCategory());
                    int expected = toolkitFrameRateBySizeReadOnly()
                            ? FRAME_RATE_CATEGORY_LOW : FRAME_RATE_CATEGORY_NORMAL;
                    assertEquals(expected, mViewRootImpl.getLastPreferredFrameRateCategory());
                    assertTrue(mViewRootImpl.getLastPreferredFrameRate() >= 60f);
                } else {
                    assertEquals(FRAME_RATE_CATEGORY_HIGH,
+1 −1

File changed.

Contains only whitespace changes.