Merge "Make the USAP Pool refill delay configurable." into qt-dev

This commit is contained in:
Christian Wailes
2019-05-16 17:23:03 +00:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 7 deletions

View File

@@ -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";
}

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."
@@ -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;
}
}