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
Bug: 146614089
Test: Build and launch 10+ apps successfully
Change-Id: Idfeb30fa62fa296492da211b2b44902ff4f99b18
Merged-In: Idfeb30fa62fa296492da211b2b44902ff4f99b18
This commit is contained in:
Chris Wailes
2019-05-15 14:00:22 -07:00
parent 7e9f83e18a
commit eabbf8720c

View File

@@ -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."
@@ -469,13 +479,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;
}
}