blob: 6c3fe915f386dd683df126f0d74454795c3b4995 [file] [log] [blame]
Dianne Hackborn0ef403e2017-01-24 18:22:15 -08001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.am;
18
19import android.content.ContentResolver;
20import android.database.ContentObserver;
21import android.net.Uri;
22import android.os.Handler;
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080023import android.provider.Settings;
24import android.util.KeyValueListParser;
25import android.util.Slog;
26
27import java.io.PrintWriter;
28
Dianne Hackborn83b40f62017-04-26 13:59:47 -070029import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
30
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080031/**
32 * Settings constants that can modify the activity manager's behavior.
33 */
34final class ActivityManagerConstants extends ContentObserver {
35 // Key names stored in the settings value.
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080036 private static final String KEY_MAX_CACHED_PROCESSES = "max_cached_processes";
Dianne Hackborn83b40f62017-04-26 13:59:47 -070037 private static final String KEY_BACKGROUND_SETTLE_TIME = "background_settle_time";
Dianne Hackborncb015632017-06-14 17:30:15 -070038 private static final String KEY_FGSERVICE_MIN_SHOWN_TIME
39 = "fgservice_min_shown_time";
40 private static final String KEY_FGSERVICE_MIN_REPORT_TIME
41 = "fgservice_min_report_time";
42 private static final String KEY_FGSERVICE_SCREEN_ON_BEFORE_TIME
43 = "fgservice_screen_on_before_time";
44 private static final String KEY_FGSERVICE_SCREEN_ON_AFTER_TIME
45 = "fgservice_screen_on_after_time";
Dianne Hackborn83b40f62017-04-26 13:59:47 -070046 private static final String KEY_CONTENT_PROVIDER_RETAIN_TIME = "content_provider_retain_time";
47 private static final String KEY_GC_TIMEOUT = "gc_timeout";
48 private static final String KEY_GC_MIN_INTERVAL = "gc_min_interval";
49 private static final String KEY_FULL_PSS_MIN_INTERVAL = "full_pss_min_interval";
50 private static final String KEY_FULL_PSS_LOWERED_INTERVAL = "full_pss_lowered_interval";
51 private static final String KEY_POWER_CHECK_DELAY = "power_check_delay";
52 private static final String KEY_WAKE_LOCK_MIN_CHECK_DURATION = "wake_lock_min_check_duration";
53 private static final String KEY_CPU_MIN_CHECK_DURATION = "cpu_min_check_duration";
54 private static final String KEY_SERVICE_USAGE_INTERACTION_TIME
55 = "service_usage_interaction_time";
56 private static final String KEY_USAGE_STATS_INTERACTION_INTERVAL
57 = "usage_stats_interaction_interval";
58 static final String KEY_SERVICE_RESTART_DURATION = "service_restart_duration";
59 static final String KEY_SERVICE_RESET_RUN_DURATION = "service_reset_run_duration";
60 static final String KEY_SERVICE_RESTART_DURATION_FACTOR = "service_restart_duration_factor";
61 static final String KEY_SERVICE_MIN_RESTART_TIME_BETWEEN = "service_min_restart_time_between";
62 static final String KEY_MAX_SERVICE_INACTIVITY = "service_max_inactivity";
63 static final String KEY_BG_START_TIMEOUT = "service_bg_start_timeout";
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080064
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080065 private static final int DEFAULT_MAX_CACHED_PROCESSES = 32;
Dianne Hackborn83b40f62017-04-26 13:59:47 -070066 private static final long DEFAULT_BACKGROUND_SETTLE_TIME = 60*1000;
Dianne Hackborncb015632017-06-14 17:30:15 -070067 private static final long DEFAULT_FGSERVICE_MIN_SHOWN_TIME = 2*1000;
68 private static final long DEFAULT_FGSERVICE_MIN_REPORT_TIME = 3*1000;
69 private static final long DEFAULT_FGSERVICE_SCREEN_ON_BEFORE_TIME = 1*1000;
70 private static final long DEFAULT_FGSERVICE_SCREEN_ON_AFTER_TIME = 5*1000;
Dianne Hackborn83b40f62017-04-26 13:59:47 -070071 private static final long DEFAULT_CONTENT_PROVIDER_RETAIN_TIME = 20*1000;
72 private static final long DEFAULT_GC_TIMEOUT = 5*1000;
73 private static final long DEFAULT_GC_MIN_INTERVAL = 60*1000;
74 private static final long DEFAULT_FULL_PSS_MIN_INTERVAL = 10*60*1000;
75 private static final long DEFAULT_FULL_PSS_LOWERED_INTERVAL = 2*60*1000;
76 private static final long DEFAULT_POWER_CHECK_DELAY = (DEBUG_POWER_QUICK ? 2 : 15) * 60*1000;
77 private static final long DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION
78 = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
79 private static final long DEFAULT_CPU_MIN_CHECK_DURATION
80 = (DEBUG_POWER_QUICK ? 1 : 5) * 60*1000;
81 private static final long DEFAULT_SERVICE_USAGE_INTERACTION_TIME = 30*60*1000;
82 private static final long DEFAULT_USAGE_STATS_INTERACTION_INTERVAL = 24*60*60*1000L;
83 private static final long DEFAULT_SERVICE_RESTART_DURATION = 1*1000;
84 private static final long DEFAULT_SERVICE_RESET_RUN_DURATION = 60*1000;
85 private static final int DEFAULT_SERVICE_RESTART_DURATION_FACTOR = 4;
86 private static final long DEFAULT_SERVICE_MIN_RESTART_TIME_BETWEEN = 10*1000;
87 private static final long DEFAULT_MAX_SERVICE_INACTIVITY = 30*60*1000;
88 private static final long DEFAULT_BG_START_TIMEOUT = 15*1000;
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080089
Dianne Hackborn0ef403e2017-01-24 18:22:15 -080090 // Maximum number of cached processes we will allow.
91 public int MAX_CACHED_PROCESSES = DEFAULT_MAX_CACHED_PROCESSES;
92
Dianne Hackborn83b40f62017-04-26 13:59:47 -070093 // This is the amount of time we allow an app to settle after it goes into the background,
94 // before we start restricting what it can do.
95 public long BACKGROUND_SETTLE_TIME = DEFAULT_BACKGROUND_SETTLE_TIME;
96
Dianne Hackborncb015632017-06-14 17:30:15 -070097 // The minimum time we allow a foreground service to run with a notification and the
98 // screen on without otherwise telling the user about it. (If it runs for less than this,
99 // it will still be reported to the user as a running app for at least this amount of time.)
100 public long FGSERVICE_MIN_SHOWN_TIME = DEFAULT_FGSERVICE_MIN_SHOWN_TIME;
101
102 // If a foreground service is shown for less than FGSERVICE_MIN_SHOWN_TIME, we will display
103 // the background app running notification about it for at least this amount of time (if it
104 // is larger than the remaining shown time).
105 public long FGSERVICE_MIN_REPORT_TIME = DEFAULT_FGSERVICE_MIN_REPORT_TIME;
106
107 // The minimum amount of time the foreground service needs to have remain being shown
108 // before the screen goes on for us to consider it not worth showing to the user. That is
109 // if an app has a foreground service that stops itself this amount of time or more before
110 // the user turns on the screen, we will just let it go without the user being told about it.
111 public long FGSERVICE_SCREEN_ON_BEFORE_TIME = DEFAULT_FGSERVICE_SCREEN_ON_BEFORE_TIME;
112
113 // The minimum amount of time a foreground service should remain reported to the user if
114 // it is stopped when the screen turns on. This is the time from when the screen turns
115 // on until we will stop reporting it.
116 public long FGSERVICE_SCREEN_ON_AFTER_TIME = DEFAULT_FGSERVICE_SCREEN_ON_AFTER_TIME;
Dianne Hackborn83b40f62017-04-26 13:59:47 -0700117
118 // How long we will retain processes hosting content providers in the "last activity"
119 // state before allowing them to drop down to the regular cached LRU list. This is
120 // to avoid thrashing of provider processes under low memory situations.
121 long CONTENT_PROVIDER_RETAIN_TIME = DEFAULT_CONTENT_PROVIDER_RETAIN_TIME;
122
123 // How long to wait after going idle before forcing apps to GC.
124 long GC_TIMEOUT = DEFAULT_GC_TIMEOUT;
125
126 // The minimum amount of time between successive GC requests for a process.
127 long GC_MIN_INTERVAL = DEFAULT_GC_MIN_INTERVAL;
128
129 // The minimum amount of time between successive PSS requests for a process.
130 long FULL_PSS_MIN_INTERVAL = DEFAULT_FULL_PSS_MIN_INTERVAL;
131
132 // The minimum amount of time between successive PSS requests for a process
133 // when the request is due to the memory state being lowered.
134 long FULL_PSS_LOWERED_INTERVAL = DEFAULT_FULL_PSS_LOWERED_INTERVAL;
135
136 // The rate at which we check for apps using excessive power -- 15 mins.
137 long POWER_CHECK_DELAY = DEFAULT_POWER_CHECK_DELAY;
138
139 // The minimum sample duration we will allow before deciding we have
140 // enough data on wake locks to start killing things.
141 long WAKE_LOCK_MIN_CHECK_DURATION = DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION;
142
143 // The minimum sample duration we will allow before deciding we have
144 // enough data on CPU usage to start killing things.
145 long CPU_MIN_CHECK_DURATION = DEFAULT_CPU_MIN_CHECK_DURATION;
146
147 // This is the amount of time an app needs to be running a foreground service before
148 // we will consider it to be doing interaction for usage stats.
149 long SERVICE_USAGE_INTERACTION_TIME = DEFAULT_SERVICE_USAGE_INTERACTION_TIME;
150
151 // Maximum amount of time we will allow to elapse before re-reporting usage stats
152 // interaction with foreground processes.
153 long USAGE_STATS_INTERACTION_INTERVAL = DEFAULT_USAGE_STATS_INTERACTION_INTERVAL;
154
155 // How long a service needs to be running until restarting its process
156 // is no longer considered to be a relaunch of the service.
157 public long SERVICE_RESTART_DURATION = DEFAULT_SERVICE_RESTART_DURATION;
158
159 // How long a service needs to be running until it will start back at
160 // SERVICE_RESTART_DURATION after being killed.
161 public long SERVICE_RESET_RUN_DURATION = DEFAULT_SERVICE_RESET_RUN_DURATION;
162
163 // Multiplying factor to increase restart duration time by, for each time
164 // a service is killed before it has run for SERVICE_RESET_RUN_DURATION.
165 public int SERVICE_RESTART_DURATION_FACTOR = DEFAULT_SERVICE_RESTART_DURATION_FACTOR;
166
167 // The minimum amount of time between restarting services that we allow.
168 // That is, when multiple services are restarting, we won't allow each
169 // to restart less than this amount of time from the last one.
170 public long SERVICE_MIN_RESTART_TIME_BETWEEN = DEFAULT_SERVICE_MIN_RESTART_TIME_BETWEEN;
171
172 // Maximum amount of time for there to be no activity on a service before
173 // we consider it non-essential and allow its process to go on the
174 // LRU background list.
175 public long MAX_SERVICE_INACTIVITY = DEFAULT_MAX_SERVICE_INACTIVITY;
176
177 // How long we wait for a background started service to stop itself before
178 // allowing the next pending start to run.
179 public long BG_START_TIMEOUT = DEFAULT_BG_START_TIMEOUT;
180
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800181 private final ActivityManagerService mService;
182 private ContentResolver mResolver;
183 private final KeyValueListParser mParser = new KeyValueListParser(',');
184
185 private int mOverrideMaxCachedProcesses = -1;
186
187 // The maximum number of cached processes we will keep around before killing them.
188 // NOTE: this constant is *only* a control to not let us go too crazy with
189 // keeping around processes on devices with large amounts of RAM. For devices that
190 // are tighter on RAM, the out of memory killer is responsible for killing background
191 // processes as RAM is needed, and we should *never* be relying on this limit to
192 // kill them. Also note that this limit only applies to cached background processes;
193 // we have no limit on the number of service, visible, foreground, or other such
194 // processes and the number of those processes does not count against the cached
195 // process limit.
196 public int CUR_MAX_CACHED_PROCESSES;
197
198 // The maximum number of empty app processes we will let sit around.
199 public int CUR_MAX_EMPTY_PROCESSES;
200
201 // The number of empty apps at which we don't consider it necessary to do
202 // memory trimming.
203 public int CUR_TRIM_EMPTY_PROCESSES;
204
205 // The number of cached at which we don't consider it necessary to do
206 // memory trimming.
207 public int CUR_TRIM_CACHED_PROCESSES;
208
209 public ActivityManagerConstants(ActivityManagerService service, Handler handler) {
210 super(handler);
211 mService = service;
212 updateMaxCachedProcesses();
213 }
214
215 public void start(ContentResolver resolver) {
216 mResolver = resolver;
217 mResolver.registerContentObserver(Settings.Global.getUriFor(
218 Settings.Global.ACTIVITY_MANAGER_CONSTANTS), false, this);
219 updateConstants();
220 }
221
222 public void setOverrideMaxCachedProcesses(int value) {
223 mOverrideMaxCachedProcesses = value;
224 updateMaxCachedProcesses();
225 }
226
227 public int getOverrideMaxCachedProcesses() {
228 return mOverrideMaxCachedProcesses;
229 }
230
231 public static int computeEmptyProcessLimit(int totalProcessLimit) {
232 return totalProcessLimit/2;
233 }
234
235 @Override
236 public void onChange(boolean selfChange, Uri uri) {
237 updateConstants();
238 }
239
240 private void updateConstants() {
Makoto Onuki73360ab2017-03-17 11:50:13 -0700241 final String setting = Settings.Global.getString(mResolver,
242 Settings.Global.ACTIVITY_MANAGER_CONSTANTS);
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800243 synchronized (mService) {
244 try {
Makoto Onuki73360ab2017-03-17 11:50:13 -0700245 mParser.setString(setting);
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800246 } catch (IllegalArgumentException e) {
247 // Failed to parse the settings string, log this and move on
248 // with defaults.
249 Slog.e("ActivityManagerConstants", "Bad activity manager config settings", e);
250 }
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800251 MAX_CACHED_PROCESSES = mParser.getInt(KEY_MAX_CACHED_PROCESSES,
252 DEFAULT_MAX_CACHED_PROCESSES);
Dianne Hackborn83b40f62017-04-26 13:59:47 -0700253 BACKGROUND_SETTLE_TIME = mParser.getLong(KEY_BACKGROUND_SETTLE_TIME,
254 DEFAULT_BACKGROUND_SETTLE_TIME);
Dianne Hackborncb015632017-06-14 17:30:15 -0700255 FGSERVICE_MIN_SHOWN_TIME = mParser.getLong(KEY_FGSERVICE_MIN_SHOWN_TIME,
256 DEFAULT_FGSERVICE_MIN_SHOWN_TIME);
257 FGSERVICE_MIN_REPORT_TIME = mParser.getLong(KEY_FGSERVICE_MIN_REPORT_TIME,
258 DEFAULT_FGSERVICE_MIN_REPORT_TIME);
259 FGSERVICE_SCREEN_ON_BEFORE_TIME = mParser.getLong(KEY_FGSERVICE_SCREEN_ON_BEFORE_TIME,
260 DEFAULT_FGSERVICE_SCREEN_ON_BEFORE_TIME);
261 FGSERVICE_SCREEN_ON_AFTER_TIME = mParser.getLong(KEY_FGSERVICE_SCREEN_ON_AFTER_TIME,
262 DEFAULT_FGSERVICE_SCREEN_ON_AFTER_TIME);
Dianne Hackborn83b40f62017-04-26 13:59:47 -0700263 CONTENT_PROVIDER_RETAIN_TIME = mParser.getLong(KEY_CONTENT_PROVIDER_RETAIN_TIME,
264 DEFAULT_CONTENT_PROVIDER_RETAIN_TIME);
265 GC_TIMEOUT = mParser.getLong(KEY_GC_TIMEOUT,
266 DEFAULT_GC_TIMEOUT);
267 GC_MIN_INTERVAL = mParser.getLong(KEY_GC_MIN_INTERVAL,
268 DEFAULT_GC_MIN_INTERVAL);
269 FULL_PSS_MIN_INTERVAL = mParser.getLong(KEY_FULL_PSS_MIN_INTERVAL,
270 DEFAULT_FULL_PSS_MIN_INTERVAL);
271 FULL_PSS_LOWERED_INTERVAL = mParser.getLong(KEY_FULL_PSS_LOWERED_INTERVAL,
272 DEFAULT_FULL_PSS_LOWERED_INTERVAL);
273 POWER_CHECK_DELAY = mParser.getLong(KEY_POWER_CHECK_DELAY,
274 DEFAULT_POWER_CHECK_DELAY);
275 WAKE_LOCK_MIN_CHECK_DURATION = mParser.getLong(KEY_WAKE_LOCK_MIN_CHECK_DURATION,
276 DEFAULT_WAKE_LOCK_MIN_CHECK_DURATION);
277 CPU_MIN_CHECK_DURATION = mParser.getLong(KEY_CPU_MIN_CHECK_DURATION,
278 DEFAULT_CPU_MIN_CHECK_DURATION);
279 SERVICE_USAGE_INTERACTION_TIME = mParser.getLong(KEY_SERVICE_USAGE_INTERACTION_TIME,
280 DEFAULT_SERVICE_USAGE_INTERACTION_TIME);
281 USAGE_STATS_INTERACTION_INTERVAL = mParser.getLong(KEY_USAGE_STATS_INTERACTION_INTERVAL,
282 DEFAULT_USAGE_STATS_INTERACTION_INTERVAL);
283 SERVICE_RESTART_DURATION = mParser.getLong(KEY_SERVICE_RESTART_DURATION,
284 DEFAULT_SERVICE_RESTART_DURATION);
285 SERVICE_RESET_RUN_DURATION = mParser.getLong(KEY_SERVICE_RESET_RUN_DURATION,
286 DEFAULT_SERVICE_RESET_RUN_DURATION);
287 SERVICE_RESTART_DURATION_FACTOR = mParser.getInt(KEY_SERVICE_RESTART_DURATION_FACTOR,
288 DEFAULT_SERVICE_RESTART_DURATION_FACTOR);
289 SERVICE_MIN_RESTART_TIME_BETWEEN = mParser.getLong(KEY_SERVICE_MIN_RESTART_TIME_BETWEEN,
290 DEFAULT_SERVICE_MIN_RESTART_TIME_BETWEEN);
291 MAX_SERVICE_INACTIVITY = mParser.getLong(KEY_MAX_SERVICE_INACTIVITY,
292 DEFAULT_MAX_SERVICE_INACTIVITY);
293 BG_START_TIMEOUT = mParser.getLong(KEY_BG_START_TIMEOUT,
294 DEFAULT_BG_START_TIMEOUT);
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800295 updateMaxCachedProcesses();
296 }
297 }
298
299 private void updateMaxCachedProcesses() {
300 CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0
301 ? MAX_CACHED_PROCESSES : mOverrideMaxCachedProcesses;
302 CUR_MAX_EMPTY_PROCESSES = computeEmptyProcessLimit(CUR_MAX_CACHED_PROCESSES);
303
304 // Note the trim levels do NOT depend on the override process limit, we want
305 // to consider the same level the point where we do trimming regardless of any
306 // additional enforced limit.
307 final int rawMaxEmptyProcesses = computeEmptyProcessLimit(MAX_CACHED_PROCESSES);
308 CUR_TRIM_EMPTY_PROCESSES = rawMaxEmptyProcesses/2;
309 CUR_TRIM_CACHED_PROCESSES = (MAX_CACHED_PROCESSES-rawMaxEmptyProcesses)/3;
310 }
311
312 void dump(PrintWriter pw) {
313 pw.println("ACTIVITY MANAGER SETTINGS (dumpsys activity settings) "
314 + Settings.Global.ACTIVITY_MANAGER_CONSTANTS + ":");
315
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800316 pw.print(" "); pw.print(KEY_MAX_CACHED_PROCESSES); pw.print("=");
317 pw.println(MAX_CACHED_PROCESSES);
Dianne Hackborn83b40f62017-04-26 13:59:47 -0700318 pw.print(" "); pw.print(KEY_BACKGROUND_SETTLE_TIME); pw.print("=");
319 pw.println(BACKGROUND_SETTLE_TIME);
Dianne Hackborncb015632017-06-14 17:30:15 -0700320 pw.print(" "); pw.print(KEY_FGSERVICE_MIN_SHOWN_TIME); pw.print("=");
321 pw.println(FGSERVICE_MIN_SHOWN_TIME);
322 pw.print(" "); pw.print(KEY_FGSERVICE_MIN_REPORT_TIME); pw.print("=");
323 pw.println(FGSERVICE_MIN_REPORT_TIME);
324 pw.print(" "); pw.print(KEY_FGSERVICE_SCREEN_ON_BEFORE_TIME); pw.print("=");
325 pw.println(FGSERVICE_SCREEN_ON_BEFORE_TIME);
326 pw.print(" "); pw.print(KEY_FGSERVICE_SCREEN_ON_AFTER_TIME); pw.print("=");
327 pw.println(FGSERVICE_SCREEN_ON_AFTER_TIME);
Dianne Hackborn83b40f62017-04-26 13:59:47 -0700328 pw.print(" "); pw.print(KEY_CONTENT_PROVIDER_RETAIN_TIME); pw.print("=");
329 pw.println(CONTENT_PROVIDER_RETAIN_TIME);
330 pw.print(" "); pw.print(KEY_GC_TIMEOUT); pw.print("=");
331 pw.println(GC_TIMEOUT);
332 pw.print(" "); pw.print(KEY_GC_MIN_INTERVAL); pw.print("=");
333 pw.println(GC_MIN_INTERVAL);
334 pw.print(" "); pw.print(KEY_FULL_PSS_MIN_INTERVAL); pw.print("=");
335 pw.println(FULL_PSS_MIN_INTERVAL);
336 pw.print(" "); pw.print(KEY_FULL_PSS_LOWERED_INTERVAL); pw.print("=");
337 pw.println(FULL_PSS_LOWERED_INTERVAL);
338 pw.print(" "); pw.print(KEY_POWER_CHECK_DELAY); pw.print("=");
339 pw.println(POWER_CHECK_DELAY);
340 pw.print(" "); pw.print(KEY_WAKE_LOCK_MIN_CHECK_DURATION); pw.print("=");
341 pw.println(WAKE_LOCK_MIN_CHECK_DURATION);
342 pw.print(" "); pw.print(KEY_CPU_MIN_CHECK_DURATION); pw.print("=");
343 pw.println(CPU_MIN_CHECK_DURATION);
344 pw.print(" "); pw.print(KEY_SERVICE_USAGE_INTERACTION_TIME); pw.print("=");
345 pw.println(SERVICE_USAGE_INTERACTION_TIME);
346 pw.print(" "); pw.print(KEY_USAGE_STATS_INTERACTION_INTERVAL); pw.print("=");
347 pw.println(USAGE_STATS_INTERACTION_INTERVAL);
348 pw.print(" "); pw.print(KEY_SERVICE_RESTART_DURATION); pw.print("=");
349 pw.println(SERVICE_RESTART_DURATION);
350 pw.print(" "); pw.print(KEY_SERVICE_RESET_RUN_DURATION); pw.print("=");
351 pw.println(SERVICE_RESET_RUN_DURATION);
352 pw.print(" "); pw.print(KEY_SERVICE_RESTART_DURATION_FACTOR); pw.print("=");
353 pw.println(SERVICE_RESTART_DURATION_FACTOR);
354 pw.print(" "); pw.print(KEY_SERVICE_MIN_RESTART_TIME_BETWEEN); pw.print("=");
355 pw.println(SERVICE_MIN_RESTART_TIME_BETWEEN);
356 pw.print(" "); pw.print(KEY_MAX_SERVICE_INACTIVITY); pw.print("=");
357 pw.println(MAX_SERVICE_INACTIVITY);
358 pw.print(" "); pw.print(KEY_BG_START_TIMEOUT); pw.print("=");
359 pw.println(BG_START_TIMEOUT);
Dianne Hackborn0ef403e2017-01-24 18:22:15 -0800360
361 pw.println();
362 if (mOverrideMaxCachedProcesses >= 0) {
363 pw.print(" mOverrideMaxCachedProcesses="); pw.println(mOverrideMaxCachedProcesses);
364 }
365 pw.print(" CUR_MAX_CACHED_PROCESSES="); pw.println(CUR_MAX_CACHED_PROCESSES);
366 pw.print(" CUR_MAX_EMPTY_PROCESSES="); pw.println(CUR_MAX_EMPTY_PROCESSES);
367 pw.print(" CUR_TRIM_EMPTY_PROCESSES="); pw.println(CUR_TRIM_EMPTY_PROCESSES);
368 pw.print(" CUR_TRIM_CACHED_PROCESSES="); pw.println(CUR_TRIM_CACHED_PROCESSES);
369 }
370}