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

Commit 54b8d7ea authored by Chris Wailes's avatar Chris Wailes Committed by Christian Wailes
Browse files

Make the USAP Pool refill delay configurable.

This patch fetches the USAP pool refill delay value from device_config
instead of hardcoding it.

Bug: 131362095
Test: Build and launch 10+ apps successfully
Change-Id: I244d83a38bde32620bd4bf50e9031c25c6267091
Merged-In: I244d83a38bde32620bd4bf50e9031c25c6267091
(cherry picked from commit 365e50bf)
parent 43605432
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -34,4 +34,7 @@ public class ZygoteConfig {

    /** The minimum number of processes to keep in the USAP pool */
    public static final String USAP_POOL_SIZE_MIN = "usap_pool_size_min";

    /** The number of milliseconds to delay before refilling the USAP pool */
    public static final String USAP_POOL_REFILL_DELAY_MS = "usap_pool_refill_delay_ms";
}
+17 −7
Original line number Diff line number Diff line
@@ -66,11 +66,8 @@ class ZygoteServer {
    /** The default value used for the USAP_POOL_SIZE_MIN device property */
    private static final String USAP_POOL_SIZE_MIN_DEFAULT = "1";

    /**
     * Number of milliseconds to delay before refilling the pool if it hasn't reached its
     * minimum value.
     */
    private static final int USAP_REFILL_DELAY_MS = 3000;
    /** The default value used for the USAP_REFILL_DELAY_MS device property */
    private static final String USAP_POOL_REFILL_DELAY_MS_DEFAULT = "3000";

    /** The "not a timestamp" value for the refill delay timestamp mechanism. */
    private static final int INVALID_TIMESTAMP = -1;
@@ -140,6 +137,12 @@ class ZygoteServer {
     */
    private int mUsapPoolRefillThreshold = 0;

    /**
     * Number of milliseconds to delay before refilling the pool if it hasn't reached its
     * minimum value.
     */
    private int mUsapPoolRefillDelayMs = -1;

    private enum UsapPoolRefillAction {
        DELAYED,
        IMMEDIATE,
@@ -282,6 +285,13 @@ class ZygoteServer {
                        mUsapPoolSizeMax);
            }

            final String usapPoolRefillDelayMsPropString = Zygote.getConfigurationProperty(
                    ZygoteConfig.USAP_POOL_REFILL_DELAY_MS, USAP_POOL_REFILL_DELAY_MS_DEFAULT);

            if (!usapPoolRefillDelayMsPropString.isEmpty()) {
                mUsapPoolRefillDelayMs = Integer.parseInt(usapPoolRefillDelayMsPropString);
            }

            // Sanity check
            if (mUsapPoolSizeMin >= mUsapPoolSizeMax) {
                Log.w(TAG, "The max size of the USAP pool must be greater than the minimum size."
@@ -467,13 +477,13 @@ class ZygoteServer {
                int elapsedTimeMs =
                        (int) (System.currentTimeMillis() - usapPoolRefillTriggerTimestamp);

                if (elapsedTimeMs >= USAP_REFILL_DELAY_MS) {
                if (elapsedTimeMs >= mUsapPoolRefillDelayMs) {
                    // Normalize the poll timeout value when the time between one poll event and the
                    // next pushes us over the delay value.  This prevents poll receiving a 0
                    // timeout value, which would result in it returning immediately.
                    pollTimeoutMs = -1;
                } else {
                    pollTimeoutMs = USAP_REFILL_DELAY_MS - elapsedTimeMs;
                    pollTimeoutMs = mUsapPoolRefillDelayMs - elapsedTimeMs;
                }
            }