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

Commit 24c65c78 authored by Liana Kazanova (xWF)'s avatar Liana Kazanova (xWF) Committed by Android (Google) Code Review
Browse files

Merge "Revert "[ARR] Remove android.view.flags.toolkit_velocity_map_sysprop flag"" into main

parents e3433a13 0a113993
Loading
Loading
Loading
Loading
+91 −81
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import static android.view.flags.Flags.sensitiveContentAppProtection;
import static android.view.flags.Flags.toolkitFrameRateBySizeReadOnly;
import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision;
import static android.view.flags.Flags.toolkitSetFrameRateReadOnly;
import static android.view.flags.Flags.toolkitVelocityMapSysprop;
import static android.view.flags.Flags.toolkitViewgroupSetRequestedFrameRateApi;
import static android.view.flags.Flags.viewVelocityApi;
import static android.view.inputmethod.Flags.FLAG_HOME_SCREEN_HANDWRITING_DELEGATOR;
@@ -2476,11 +2477,18 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    private static boolean sToolkitViewGroupFrameRateApiFlagValue =
            toolkitViewgroupSetRequestedFrameRateApi();
    // The read-write flag toolkitVelocityMapSysprop() cannot be initialized at Zygote. To prevent
    // this, initialize inside this class with special name NoPreloadHolder which prevents
    // initialization at Zygote.
    /** @hide */
    @VisibleForTesting
    static final class NoPreloadHolder {
        private static boolean sToolkitVelocityMapSyspropFlagValue = toolkitVelocityMapSysprop();
        private static String sFrameRateSysProp =
                ViewProperties.vrr_velocity_threshold().orElse("");
        static {
        if (!sFrameRateSysProp.isEmpty()) {
            if (sToolkitVelocityMapSyspropFlagValue && !sFrameRateSysProp.isEmpty()) {
                sFrameRateMappings = parseFrameRateMapping(sFrameRateSysProp);
            }
        }
@@ -2491,7 +2499,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
         * @hide
         */
        @VisibleForTesting
    public static int[][] parseFrameRateMapping(String mappings) {
        static int[][] parseFrameRateMapping(String mappings) {
            if (mappings.isEmpty()) {
                return null;
            }
@@ -2574,6 +2582,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            Arrays.sort(mappingArray, Comparator.comparingInt(pair -> -pair[0]));
            return mappingArray;
        }
    }
    // Used to set frame rate compatibility.
    @Surface.FrameRateCompatibility int mFrameRateCompatibility =
@@ -34678,7 +34687,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    }
    private float convertVelocityToFrameRate(float velocityPps) {
        if (sFrameRateMappings != null && sFrameRateMappings.length > 0) {
        if (NoPreloadHolder.sToolkitVelocityMapSyspropFlagValue && sFrameRateMappings != null
                && sFrameRateMappings.length > 0) {
            return getFrameRateByVelocity(sFrameRateMappings, (int) velocityPps);
        }
        // Internal testing has shown that this gives a premium experience:
+10 −0
Original line number Diff line number Diff line
@@ -95,3 +95,13 @@ flag {
    description: "Feature flag to ennable ARR debug message"
    bug: "394614443"
}

flag {
    name: "toolkit_velocity_map_sysprop"
    namespace: "toolkit"
    description: "Feature flag to map velocity to frame rate using sysprop"
    bug: "404936438"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+7 −7
Original line number Diff line number Diff line
@@ -1246,33 +1246,33 @@ public class ViewFrameRateTest {
        int[] twoPairs = {800, 80, 300, 30};
        int[] threePairs = {1000, 120, 800, 80, 600, 60};

        int[][] mappings = View.parseFrameRateMapping("");
        int[][] mappings = View.NoPreloadHolder.parseFrameRateMapping("");
        assertTrue(mappings == null);

        mappings = View.parseFrameRateMapping("::");
        mappings = View.NoPreloadHolder.parseFrameRateMapping("::");
        assertTrue(mappings == null);

        mappings = View.parseFrameRateMapping("80@800:30@300");
        mappings = View.NoPreloadHolder.parseFrameRateMapping("80@800:30@300");
        for (int i = 0; i < twoPairs.length; i++) {
            assertEquals(twoPairs[i], mappings[i / 2][i % 2]);
        }

        mappings = View.parseFrameRateMapping("80@800:60@600:120@1000");
        mappings = View.NoPreloadHolder.parseFrameRateMapping("80@800:60@600:120@1000");
        for (int i = 0; i < threePairs.length; i++) {
            assertEquals(threePairs[i], mappings[i / 2][i % 2]);
        }

        mappings = View.parseFrameRateMapping("80@@800:60@@@600:120@1000");
        mappings = View.NoPreloadHolder.parseFrameRateMapping("80@@800:60@@@600:120@1000");
        for (int i = 0; i < threePairs.length; i++) {
            assertEquals(threePairs[i], mappings[i / 2][i % 2]);
        }

        mappings = View.parseFrameRateMapping(":120@1000:::60@600::80@800:");
        mappings = View.NoPreloadHolder.parseFrameRateMapping(":120@1000:::60@600::80@800:");
        for (int i = 0; i < threePairs.length; i++) {
            assertEquals(threePairs[i], mappings[i / 2][i % 2]);
        }

        mappings = View.parseFrameRateMapping(":120@@1000:::60@600::80@@@800:");
        mappings = View.NoPreloadHolder.parseFrameRateMapping(":120@@1000:::60@600::80@@@800:");
        for (int i = 0; i < threePairs.length; i++) {
            assertEquals(threePairs[i], mappings[i / 2][i % 2]);
        }