Merge "Move screen off adjustment delay to JobConcurrencyManager." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b3a28d9dfd
@@ -25,6 +25,7 @@ import android.content.IntentFilter;
|
||||
import android.os.Handler;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.util.IndentingPrintWriter;
|
||||
import android.util.Slog;
|
||||
import android.util.TimeUtils;
|
||||
@@ -35,7 +36,6 @@ import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.app.procstats.ProcessStats;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.server.JobSchedulerBackgroundThread;
|
||||
import com.android.server.job.JobSchedulerService.Constants;
|
||||
import com.android.server.job.JobSchedulerService.MaxJobCountsPerMemoryTrimLevel;
|
||||
import com.android.server.job.controllers.JobStatus;
|
||||
import com.android.server.job.controllers.StateController;
|
||||
@@ -51,6 +51,11 @@ class JobConcurrencyManager {
|
||||
private static final String TAG = JobSchedulerService.TAG;
|
||||
private static final boolean DEBUG = JobSchedulerService.DEBUG;
|
||||
|
||||
static final String CONFIG_KEY_PREFIX_CONCURRENCY = "concurrency_";
|
||||
private static final String KEY_SCREEN_OFF_ADJUSTMENT_DELAY_MS =
|
||||
CONFIG_KEY_PREFIX_CONCURRENCY + "screen_off_adjustment_delay_ms";
|
||||
private static final long DEFAULT_SCREEN_OFF_ADJUSTMENT_DELAY_MS = 30_000;
|
||||
|
||||
private final Object mLock;
|
||||
private final JobSchedulerService mService;
|
||||
private final JobSchedulerService.Constants mConstants;
|
||||
@@ -84,6 +89,9 @@ class JobConcurrencyManager {
|
||||
|
||||
private final JobCountTracker mJobCountTracker = new JobCountTracker();
|
||||
|
||||
/** Wait for this long after screen off before adjusting the job concurrency. */
|
||||
private long mScreenOffAdjustmentDelayMs = DEFAULT_SCREEN_OFF_ADJUSTMENT_DELAY_MS;
|
||||
|
||||
/** Current memory trim level. */
|
||||
private int mLastMemoryTrimLevel;
|
||||
|
||||
@@ -165,8 +173,7 @@ class JobConcurrencyManager {
|
||||
|
||||
// Note: we can't directly do postDelayed(this::rampUpForScreenOn), because
|
||||
// we need the exact same instance for removeCallbacks().
|
||||
mHandler.postDelayed(mRampUpForScreenOff,
|
||||
mConstants.SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS);
|
||||
mHandler.postDelayed(mRampUpForScreenOff, mScreenOffAdjustmentDelayMs);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -174,7 +181,7 @@ class JobConcurrencyManager {
|
||||
private final Runnable mRampUpForScreenOff = this::rampUpForScreenOff;
|
||||
|
||||
/**
|
||||
* Called in {@link Constants#SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS} after
|
||||
* Called in {@link #mScreenOffAdjustmentDelayMs} after
|
||||
* the screen turns off, in order to increase concurrency.
|
||||
*/
|
||||
private void rampUpForScreenOff() {
|
||||
@@ -188,9 +195,7 @@ class JobConcurrencyManager {
|
||||
return;
|
||||
}
|
||||
final long now = JobSchedulerService.sElapsedRealtimeClock.millis();
|
||||
if ((mLastScreenOffRealtime
|
||||
+ mConstants.SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS)
|
||||
> now) {
|
||||
if ((mLastScreenOffRealtime + mScreenOffAdjustmentDelayMs) > now) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -473,12 +478,24 @@ class JobConcurrencyManager {
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
void updateConfigLocked() {
|
||||
DeviceConfig.Properties properties =
|
||||
DeviceConfig.getProperties(DeviceConfig.NAMESPACE_JOB_SCHEDULER);
|
||||
|
||||
mScreenOffAdjustmentDelayMs = properties.getLong(
|
||||
KEY_SCREEN_OFF_ADJUSTMENT_DELAY_MS, DEFAULT_SCREEN_OFF_ADJUSTMENT_DELAY_MS);
|
||||
}
|
||||
|
||||
public void dumpLocked(IndentingPrintWriter pw, long now, long nowRealtime) {
|
||||
pw.println("Concurrency:");
|
||||
|
||||
pw.increaseIndent();
|
||||
try {
|
||||
pw.print("Configuration:");
|
||||
pw.increaseIndent();
|
||||
pw.print(KEY_SCREEN_OFF_ADJUSTMENT_DELAY_MS, mScreenOffAdjustmentDelayMs).println();
|
||||
pw.decreaseIndent();
|
||||
|
||||
pw.print("Screen state: current ");
|
||||
pw.print(mCurrentInteractiveState ? "ON" : "OFF");
|
||||
pw.print(" effective ");
|
||||
|
||||
@@ -369,12 +369,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
case Constants.KEY_MODERATE_USE_FACTOR:
|
||||
mConstants.updateUseFactorConstantsLocked();
|
||||
break;
|
||||
case Constants.KEY_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS:
|
||||
if (!concurrencyUpdated) {
|
||||
mConstants.updateConcurrencyConstantsLocked();
|
||||
concurrencyUpdated = true;
|
||||
}
|
||||
break;
|
||||
case Constants.KEY_MIN_LINEAR_BACKOFF_TIME_MS:
|
||||
case Constants.KEY_MIN_EXP_BACKOFF_TIME_MS:
|
||||
mConstants.updateBackoffConstantsLocked();
|
||||
@@ -384,10 +378,10 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
mConstants.updateConnectivityConstantsLocked();
|
||||
break;
|
||||
default:
|
||||
// Too many max_job_* strings to list.
|
||||
if (name.startsWith(Constants.KEY_PREFIX_MAX_JOB)
|
||||
if (name.startsWith(JobConcurrencyManager.CONFIG_KEY_PREFIX_CONCURRENCY)
|
||||
&& !concurrencyUpdated) {
|
||||
mConstants.updateConcurrencyConstantsLocked();
|
||||
mConcurrencyManager.updateConfigLocked();
|
||||
concurrencyUpdated = true;
|
||||
} else {
|
||||
for (int ctrlr = 0; ctrlr < mControllers.size(); ctrlr++) {
|
||||
@@ -552,9 +546,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
private static final String KEY_API_QUOTA_SCHEDULE_RETURN_FAILURE_RESULT =
|
||||
"aq_schedule_return_failure";
|
||||
|
||||
private static final String KEY_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS =
|
||||
"screen_off_job_concurrency_increase_delay_ms";
|
||||
|
||||
private static final int DEFAULT_MIN_READY_NON_ACTIVE_JOBS_COUNT = 5;
|
||||
private static final long DEFAULT_MAX_NON_ACTIVE_JOB_BATCH_DELAY_MS = 31 * MINUTE_IN_MILLIS;
|
||||
private static final float DEFAULT_HEAVY_USE_FACTOR = .9f;
|
||||
@@ -568,7 +559,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
private static final long DEFAULT_API_QUOTA_SCHEDULE_WINDOW_MS = MINUTE_IN_MILLIS;
|
||||
private static final boolean DEFAULT_API_QUOTA_SCHEDULE_THROW_EXCEPTION = true;
|
||||
private static final boolean DEFAULT_API_QUOTA_SCHEDULE_RETURN_FAILURE_RESULT = false;
|
||||
private static final long DEFAULT_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS = 30_000;
|
||||
|
||||
/**
|
||||
* Minimum # of non-ACTIVE jobs for which the JMS will be happy running some work early.
|
||||
@@ -591,7 +581,8 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
float MODERATE_USE_FACTOR = DEFAULT_MODERATE_USE_FACTOR;
|
||||
|
||||
/** Prefix for all of the max_job constants. */
|
||||
private static final String KEY_PREFIX_MAX_JOB = "max_job_";
|
||||
private static final String KEY_PREFIX_MAX_JOB =
|
||||
JobConcurrencyManager.CONFIG_KEY_PREFIX_CONCURRENCY + "max_job_";
|
||||
|
||||
// Max job counts for screen on / off, for each memory trim level.
|
||||
final MaxJobCountsPerMemoryTrimLevel MAX_JOB_COUNTS_SCREEN_ON =
|
||||
@@ -632,11 +623,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
1, KEY_PREFIX_MAX_JOB + "max_bg_off_critical",
|
||||
1, KEY_PREFIX_MAX_JOB + "min_bg_off_critical"));
|
||||
|
||||
|
||||
/** Wait for this long after screen off before increasing the job concurrency. */
|
||||
long SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS =
|
||||
DEFAULT_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS;
|
||||
|
||||
/**
|
||||
* The minimum backoff time to allow for linear backoff.
|
||||
*/
|
||||
@@ -710,11 +696,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.moderate.update();
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.low.update();
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.critical.update();
|
||||
|
||||
SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS = DeviceConfig.getLong(
|
||||
DeviceConfig.NAMESPACE_JOB_SCHEDULER,
|
||||
KEY_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS,
|
||||
DEFAULT_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS);
|
||||
}
|
||||
|
||||
private void updateBackoffConstantsLocked() {
|
||||
@@ -776,9 +757,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.low.dump(pw, "");
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.critical.dump(pw, "");
|
||||
|
||||
pw.print(KEY_SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS,
|
||||
SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS).println();
|
||||
|
||||
pw.print(KEY_MIN_LINEAR_BACKOFF_TIME_MS, MIN_LINEAR_BACKOFF_TIME_MS).println();
|
||||
pw.print(KEY_MIN_EXP_BACKOFF_TIME_MS, MIN_EXP_BACKOFF_TIME_MS).println();
|
||||
pw.print(KEY_CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC).println();
|
||||
@@ -806,9 +784,6 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
MAX_JOB_COUNTS_SCREEN_ON.dumpProto(proto, ConstantsProto.MAX_JOB_COUNTS_SCREEN_ON);
|
||||
MAX_JOB_COUNTS_SCREEN_OFF.dumpProto(proto, ConstantsProto.MAX_JOB_COUNTS_SCREEN_OFF);
|
||||
|
||||
proto.write(ConstantsProto.SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS,
|
||||
SCREEN_OFF_JOB_CONCURRENCY_INCREASE_DELAY_MS);
|
||||
|
||||
proto.write(ConstantsProto.MIN_LINEAR_BACKOFF_TIME_MS, MIN_LINEAR_BACKOFF_TIME_MS);
|
||||
proto.write(ConstantsProto.MIN_EXP_BACKOFF_TIME_MS, MIN_EXP_BACKOFF_TIME_MS);
|
||||
proto.write(ConstantsProto.CONN_CONGESTION_DELAY_FRAC, CONN_CONGESTION_DELAY_FRAC);
|
||||
|
||||
Reference in New Issue
Block a user