blob: beba73f09f531ded20ace24d0d5d62e7501ba7cd [file] [log] [blame]
Kweku Adams85f2fbc2017-12-18 12:04:12 -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
17syntax = "proto2";
18
19package com.android.server.job;
20
21option java_multiple_files = true;
22
Tej Singh33a412b2018-03-16 18:43:59 -070023import "frameworks/base/core/proto/android/app/job/enums.proto";
Kweku Adams85f2fbc2017-12-18 12:04:12 -080024import "frameworks/base/core/proto/android/content/clipdata.proto";
25import "frameworks/base/core/proto/android/content/component_name.proto";
26import "frameworks/base/core/proto/android/content/intent.proto";
27import "frameworks/base/core/proto/android/net/network.proto";
28import "frameworks/base/core/proto/android/net/networkrequest.proto";
29import "frameworks/base/core/proto/android/os/bundle.proto";
30import "frameworks/base/core/proto/android/os/persistablebundle.proto";
31import "frameworks/base/core/proto/android/server/forceappstandbytracker.proto";
Kweku Adams0f168de2018-01-24 10:51:30 -080032import "frameworks/base/libs/incident/proto/android/privacy.proto";
Kweku Adams85f2fbc2017-12-18 12:04:12 -080033
34message JobSchedulerServiceDumpProto {
Kweku Adams0f168de2018-01-24 10:51:30 -080035 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
36
Kweku Adams85f2fbc2017-12-18 12:04:12 -080037 optional ConstantsProto settings = 1;
38
Makoto Onukib5d5e972018-02-20 14:44:20 -080039 optional int32 current_heartbeat = 14;
40 repeated int32 next_heartbeat = 15;
41 optional int64 last_heartbeat_time_millis = 16;
42 optional int64 next_heartbeat_time_millis = 17;
Makoto Onuki0525b982018-05-02 14:46:59 -070043 optional bool in_parole = 18;
Makoto Onukib5d5e972018-02-20 14:44:20 -080044
Kweku Adams85f2fbc2017-12-18 12:04:12 -080045 repeated int32 started_users = 2;
46
47 message RegisteredJob {
Kweku Adams0f168de2018-01-24 10:51:30 -080048 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
49
Kweku Adams85f2fbc2017-12-18 12:04:12 -080050 optional JobStatusShortInfoProto info = 1;
51 optional JobStatusDumpProto dump = 2;
52
53 // A job is ready to be executed if:
54 // is_job_ready && is_user_started && !is_job_pending &&
55 // !is_job_currently_active && !is_uid_backing_up &&
56 // is_component_present.
57 optional bool is_job_ready = 3;
58 optional bool is_user_started = 4;
59 optional bool is_job_pending = 5;
60 optional bool is_job_currently_active = 6;
61 optional bool is_uid_backing_up = 7;
62 optional bool is_component_present = 8;
Makoto Onukib5d5e972018-02-20 14:44:20 -080063
64 optional int64 last_run_heartbeat = 9;
Kweku Adams85f2fbc2017-12-18 12:04:12 -080065 }
66 repeated RegisteredJob registered_jobs = 3;
67
68 repeated StateControllerProto controllers = 4;
69
70 // Which uids are currently in the foreground.
71 message PriorityOverride {
Kweku Adams0f168de2018-01-24 10:51:30 -080072 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
73
Kweku Adams85f2fbc2017-12-18 12:04:12 -080074 optional int32 uid = 1;
75 // Use sint32 instead of an enum since priorities can technically be
76 // negative.
77 optional sint32 override_value = 2;
78 }
79 repeated PriorityOverride priority_overrides = 5;
80
81 // UIDs that are currently performing backups, so their jobs won't be
82 // allowed to run.
83 repeated int32 backing_up_uids = 6;
84
85 optional JobPackageHistoryProto history = 7;
86 optional JobPackageTrackerDumpProto package_tracker = 8;
87
88 message PendingJob {
Kweku Adams0f168de2018-01-24 10:51:30 -080089 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
90
Kweku Adams85f2fbc2017-12-18 12:04:12 -080091 optional JobStatusShortInfoProto info = 1;
92 optional JobStatusDumpProto dump = 2;
93 optional sint32 evaluated_priority = 3;
94 // How long this job has been pending.
95 optional int64 enqueued_duration_ms = 4;
96 }
97 repeated PendingJob pending_jobs = 9;
98
99 // From a service that has currently active or pending jobs.
100 message ActiveJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800101 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
102
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800103 message InactiveJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800104 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
105
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800106 optional int64 time_since_stopped_ms = 1;
107 // This is not always provided.
108 optional string stopped_reason = 2;
109 }
110 message RunningJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800111 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
112
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800113 optional JobStatusShortInfoProto info = 1;
114 // How long this job has been running for.
115 optional int64 running_duration_ms = 2;
116 optional int64 time_until_timeout_ms = 3;
117
118 optional JobStatusDumpProto dump = 4;
119
120 optional sint32 evaluated_priority = 5;
121
122 optional int64 time_since_made_active_ms = 6;
123 // How long this job has been pending.
124 optional int64 pending_duration_ms = 7;
125 }
126 oneof job {
127 InactiveJob inactive = 1;
128 RunningJob running = 2;
129 }
130 }
131 repeated ActiveJob active_jobs = 10;
132
133 // True when JobScheduler is allowed to run third party apps.
134 optional bool is_ready_to_rock = 11;
135 // What was last reported to DeviceIdleController about whether the device
136 // is active.
137 optional bool reported_active = 12;
138 // The current limit on the number of concurrent JobServiceContext entries
139 // we want to keep actively running a job.
140 optional int32 max_active_jobs = 13;
141}
142
143// A com.android.server.job.JobSchedulerService.Constants object.
144message ConstantsProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800145 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
146
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800147 // Minimum # of idle jobs that must be ready in order to force the JMS to
148 // schedule things early.
149 optional int32 min_idle_count = 1;
150 // Minimum # of charging jobs that must be ready in order to force the JMS
151 // to schedule things early.
152 optional int32 min_charging_count = 2;
153 // Minimum # of "battery not low" jobs that must be ready in order to force
154 // the JMS to schedule things early.
155 optional int32 min_battery_not_low_count = 3;
156 // Minimum # of "storage not low" jobs that must be ready in order to force
157 // the JMS to schedule things early.
158 optional int32 min_storage_not_low_count = 4;
159 // Minimum # of connectivity jobs that must be ready in order to force the
160 // JMS to schedule things early. 1 == Run connectivity jobs as soon as
161 // ready.
162 optional int32 min_connectivity_count = 5;
163 // Minimum # of content trigger jobs that must be ready in order to force
164 // the JMS to schedule things early.
165 optional int32 min_content_count = 6;
166 // Minimum # of jobs (with no particular constraints) for which the JMS will
167 // be happy running some work early. This (and thus the other min counts)
168 // is now set to 1, to prevent any batching at this level. Since we now do
169 // batching through doze, that is a much better mechanism.
170 optional int32 min_ready_jobs_count = 7;
171 // This is the job execution factor that is considered to be heavy use of
172 // the system.
173 optional double heavy_use_factor = 8;
174 // This is the job execution factor that is considered to be moderate use of
175 // the system.
176 optional double moderate_use_factor = 9;
177 // The number of MAX_JOB_CONTEXTS_COUNT we reserve for the foreground app.
178 optional int32 fg_job_count = 10;
179 // The maximum number of background jobs we allow when the system is in a
180 // normal memory state.
181 optional int32 bg_normal_job_count = 11;
182 // The maximum number of background jobs we allow when the system is in a
183 // moderate memory state.
184 optional int32 bg_moderate_job_count = 12;
185 // The maximum number of background jobs we allow when the system is in a
186 // low memory state.
187 optional int32 bg_low_job_count = 13;
188 // The maximum number of background jobs we allow when the system is in a
189 // critical memory state.
190 optional int32 bg_critical_job_count = 14;
191 // The maximum number of times we allow a job to have itself rescheduled
192 // before giving up on it, for standard jobs.
193 optional int32 max_standard_reschedule_count = 15;
194 // The maximum number of times we allow a job to have itself rescheduled
195 // before giving up on it, for jobs that are executing work.
196 optional int32 max_work_reschedule_count = 16;
197 // The minimum backoff time to allow for linear backoff.
198 optional int64 min_linear_backoff_time_ms = 17;
199 // The minimum backoff time to allow for exponential backoff.
200 optional int64 min_exp_backoff_time_ms = 18;
201 // How often we recalculate runnability based on apps' standby bucket
202 // assignment. This should be prime relative to common time interval lengths
203 // such as a quarter-hour or day, so that the heartbeat drifts relative to
204 // wall-clock milestones.
205 optional int64 standby_heartbeat_time_ms = 19;
206 // Mapping: standby bucket -> number of heartbeats between each sweep of
207 // that bucket's jobs.
208 // Bucket assignments as recorded in the JobStatus objects are normalized to
209 // be indices into this array, rather than the raw constants used by
210 // AppIdleHistory.
211 repeated int32 standby_beats = 20;
Jeff Sharkeyac2e8ef2018-02-22 16:06:44 -0700212 // The fraction of a job's running window that must pass before we
213 // consider running it when the network is congested.
214 optional double conn_congestion_delay_frac = 21;
215 // The fraction of a prefetch job's running window that must pass before
216 // we consider matching it against a metered network.
217 optional double conn_prefetch_relax_frac = 22;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800218 // Whether to use heartbeats or rolling window for quota management. True
219 // will use heartbeats, false will use a rolling window.
220 optional bool use_heartbeats = 23;
221
222 message QuotaController {
223 // How much time each app will have to run jobs within their standby bucket window.
224 optional int64 allowed_time_per_period_ms = 1;
225 // How much time the package should have before transitioning from out-of-quota to in-quota.
226 // This should not affect processing if the package is already in-quota.
227 optional int64 in_quota_buffer_ms = 2;
228 // The quota window size of the particular standby bucket. Apps in this standby bucket are
229 // expected to run only {@link QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past
230 // WINDOW_SIZE_MS.
231 optional int64 active_window_size_ms = 3;
232 // The quota window size of the particular standby bucket. Apps in this standby bucket are
233 // expected to run only {@link QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past
234 // WINDOW_SIZE_MS.
235 optional int64 working_window_size_ms = 4;
236 // The quota window size of the particular standby bucket. Apps in this standby bucket are
237 // expected to run only {@link QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past
238 // WINDOW_SIZE_MS.
239 optional int64 frequent_window_size_ms = 5;
240 // The quota window size of the particular standby bucket. Apps in this standby bucket are
241 // expected to run only {@link QUOTA_CONTROLLER_ALLOWED_TIME_PER_PERIOD_MS} within the past
242 // WINDOW_SIZE_MS.
243 optional int64 rare_window_size_ms = 6;
244 }
245 optional QuotaController quota_controller = 24;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800246}
247
248message StateControllerProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800249 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
250
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800251 message BackgroundJobsController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800252 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
253
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800254 optional com.android.server.ForceAppStandbyTrackerProto force_app_standby_tracker = 1;
255
256 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800257 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
258
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800259 optional JobStatusShortInfoProto info = 1;
260 optional int32 source_uid = 2;
261 optional string source_package_name = 3;
262 optional bool is_in_foreground = 4;
263 optional bool is_whitelisted = 5;
264 optional bool can_run_any_in_background = 6;
265 // If the constraints are satisfied, then the controller will mark
266 // the job as RUNNABLE, otherwise, it will be WAITING.
267 optional bool are_constraints_satisfied = 7;
268 }
269 repeated TrackedJob tracked_jobs = 2;
270 }
271 message BatteryController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800272 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
273
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800274 optional bool is_on_stable_power = 1;
275 optional bool is_battery_not_low = 2;
276
277 // Whether or not the controller is monitoring battery changes.
278 optional bool is_monitoring = 3;
279 // Only valid if is_monitoring is true.
280 optional int32 last_broadcast_sequence_number = 4;
281
282 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800283 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
284
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800285 optional JobStatusShortInfoProto info = 1;
286 optional int32 source_uid = 2;
287 }
288 repeated TrackedJob tracked_jobs = 5;
289 }
290 message ConnectivityController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800291 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
292
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800293 optional bool is_connected = 1;
294
295 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800296 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
297
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800298 optional JobStatusShortInfoProto info = 1;
299 optional int32 source_uid = 2;
300 optional .android.net.NetworkRequestProto required_network = 3;
301 }
302 repeated TrackedJob tracked_jobs = 2;
303 }
304 message ContentObserverController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800305 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
306
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800307 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800308 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
309
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800310 optional JobStatusShortInfoProto info = 1;
311 optional int32 source_uid = 2;
312 }
313 repeated TrackedJob tracked_jobs = 1;
314
315 message Observer {
Kweku Adams0f168de2018-01-24 10:51:30 -0800316 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
317
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800318 optional int32 user_id = 1;
319
320 message TriggerContentData {
Kweku Adams0f168de2018-01-24 10:51:30 -0800321 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
322
323 optional string uri = 1 [
324 (.android.privacy).dest = DEST_EXPLICIT
325 ];
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800326 optional int32 flags = 2;
327
328 // A
329 // com.android.server.job.controllers.ContentObserverController.JobInstance
330 // object.
331 message JobInstance {
Kweku Adams0f168de2018-01-24 10:51:30 -0800332 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
333
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800334 optional JobStatusShortInfoProto info = 1;
335 optional int32 source_uid = 2;
336
337 optional int64 trigger_content_update_delay_ms = 3;
338 optional int64 trigger_content_max_delay_ms = 4;
339
Kweku Adams0f168de2018-01-24 10:51:30 -0800340 repeated string changed_authorities = 5 [
341 (.android.privacy).dest = DEST_EXPLICIT
342 ];
343 repeated string changed_uris = 6 [
344 (.android.privacy).dest = DEST_EXPLICIT
345 ];
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800346 }
347 repeated JobInstance jobs = 3;
348 }
349 repeated TriggerContentData triggers = 2;
350 }
351 repeated Observer observers = 2;
352 }
353 message DeviceIdleJobsController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800354 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
355
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800356 // True when in device idle mode.
357 optional bool is_device_idle_mode = 1;
358
359 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800360 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
361
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800362 optional JobStatusShortInfoProto info = 1;
363 optional int32 source_uid = 2;
364 optional string source_package_name = 3;
365 // If the constraints are satisfied, then the controller will mark
366 // the job as RUNNABLE, otherwise, it will be WAITING.
367 optional bool are_constraints_satisfied = 4;
368 optional bool is_doze_whitelisted = 5;
369 // A job that is exempted from Doze when the app is temp whitelisted
370 // or in the foreground.
371 optional bool is_allowed_in_doze = 6;
372 }
373 repeated TrackedJob tracked_jobs = 2;
374 }
375 message IdleController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800376 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
377
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800378 optional bool is_idle = 1;
379
380 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800381 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
382
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800383 optional JobStatusShortInfoProto info = 1;
384 optional int32 source_uid = 2;
385 }
386 repeated TrackedJob tracked_jobs = 2;
387 }
Kweku Adams4836f9d2018-11-12 17:04:17 -0800388 message QuotaController {
389 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
390
391 optional bool is_charging = 1;
392 optional bool is_in_parole = 2;
393
394 message TrackedJob {
395 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
396
397 optional JobStatusShortInfoProto info = 1;
398 optional int32 source_uid = 2;
399 optional JobStatusDumpProto.Bucket effective_standby_bucket = 3;
400 optional bool has_quota = 4;
401 // The amount of time that this job has remaining in its quota. This
402 // can be negative if the job is out of quota.
403 optional int64 remaining_quota_ms = 5;
404 }
405 repeated TrackedJob tracked_jobs = 3;
406
407 message Package {
408 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
409
410 optional int32 user_id = 1;
411 optional string name = 2;
412 }
413
414 message TimingSession {
415 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
416
417 optional int64 start_time_elapsed = 1;
418 optional int64 end_time_elapsed = 2;
Kweku Adamscc5afbc2018-12-11 15:24:25 -0800419 // The number of background jobs that ran during this session.
420 optional int32 bg_job_count = 3;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800421 }
422
423 message Timer {
424 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
425
426 optional Package pkg = 1;
427 // True if the Timer is actively tracking jobs.
428 optional bool is_active = 2;
429 // The time this timer last became active. Only valid if is_active is true.
430 optional int64 start_time_elapsed = 3;
Kweku Adamscc5afbc2018-12-11 15:24:25 -0800431 // How many background jobs are currently running. Valid only if the device is_active
432 // is true.
433 optional int32 bg_job_count = 4;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800434 // All of the jobs that the Timer is currently tracking.
435 repeated JobStatusShortInfoProto running_jobs = 5;
436 }
437
438 message PackageStats {
439 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
440
441 optional Package pkg = 1;
442
443 optional Timer timer = 2;
444
445 repeated TimingSession saved_sessions = 3;
446 }
447 repeated PackageStats package_stats = 4;
448 }
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800449 message StorageController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800450 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
451
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800452 optional bool is_storage_not_low = 1;
453 optional int32 last_broadcast_sequence_number = 2;
454
455 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800456 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
457
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800458 optional JobStatusShortInfoProto info = 1;
459 optional int32 source_uid = 2;
460 }
461 repeated TrackedJob tracked_jobs = 3;
462 }
463 message TimeController {
Kweku Adams0f168de2018-01-24 10:51:30 -0800464 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
465
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800466 optional int64 now_elapsed_realtime = 1;
467 optional int64 time_until_next_delay_alarm_ms = 2;
468 optional int64 time_until_next_deadline_alarm_ms = 3;
469
470 message TrackedJob {
Kweku Adams0f168de2018-01-24 10:51:30 -0800471 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
472
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800473 optional JobStatusShortInfoProto info = 1;
474 optional int32 source_uid = 2;
475
476 optional bool has_timing_delay_constraint = 3;
477 // Only valid if has_timing_delay_constraint is true. Can be
478 // negative if the delay is in the past.
479 optional int64 delay_time_remaining_ms = 4;
480
481 optional bool has_deadline_constraint = 5;
482 // Only valid if has_timing_delay_constraint is true. Can be
483 // negative in certain situations.
484 optional int64 time_remaining_until_deadline_ms = 6;
485 }
486 repeated TrackedJob tracked_jobs = 4;
487 }
488 oneof controller {
Kweku Adams21b8d262018-03-30 12:19:58 -0700489 BackgroundJobsController background = 1;
490 BatteryController battery = 2;
491 ConnectivityController connectivity = 3;
492 ContentObserverController content_observer = 4;
493 DeviceIdleJobsController device_idle = 5;
494 IdleController idle = 6;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800495 QuotaController quota = 9;
Kweku Adams21b8d262018-03-30 12:19:58 -0700496 StorageController storage = 7;
497 TimeController time = 8;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800498 // Next tag: 10
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800499 }
500}
501
502// A com.android.server.job.JobPackageTracker.DataSet object.
503message DataSetProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800504 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
505
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800506 optional int64 start_clock_time_ms = 1;
507 // How much time has elapsed since the DataSet was instantiated.
508 optional int64 elapsed_time_ms = 2;
509 optional int64 period_ms = 3;
510
511 // Represents a com.android.server.job.JobPackageTracker.PackageEntry
512 // object, but with some extra data.
513 message PackageEntryProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800514 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
515
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800516 optional int32 uid = 1;
517 optional string package_name = 2;
518
519 message State {
Kweku Adams0f168de2018-01-24 10:51:30 -0800520 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
521
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800522 optional int64 duration_ms = 1;
523 optional int32 count = 2;
524 }
525 optional State pending_state = 3;
526 optional State active_state = 4;
527 optional State active_top_state = 5;
528
529 // True if the PackageEntry is currently pending or has been pending in
530 // the past.
531 optional bool pending = 6;
532 // True if the PackageEntry is currently active or has been active in
533 // the past.
534 optional bool active = 7;
535 // True if the PackageEntry is currently active top or has been active
536 // top in the past.
537 optional bool active_top = 8;
538
539 message StopReasonCount {
Kweku Adams0f168de2018-01-24 10:51:30 -0800540 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
541
Tej Singh33a412b2018-03-16 18:43:59 -0700542 optional .android.app.job.StopReasonEnum reason = 1;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800543 optional int32 count = 2;
544 }
545 repeated StopReasonCount stop_reasons = 9;
546 }
547 repeated PackageEntryProto package_entries = 4;
548
549 optional int32 max_concurrency = 5;
550 optional int32 max_foreground_concurrency = 6;
551}
552
553// Dump from com.android.server.job.GrantedUriPermissions.
554message GrantedUriPermissionsDumpProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800555 option (.android.msg_privacy).dest = DEST_EXPLICIT;
556
557 optional int32 flags = 1 [ (.android.privacy).dest = DEST_AUTOMATIC ];
558 optional int32 source_user_id = 2 [
559 (.android.privacy).dest = DEST_AUTOMATIC
560 ];
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800561 optional string tag = 3;
562 optional string permission_owner = 4;
563 repeated string uris = 5;
564}
565
566message JobPackageTrackerDumpProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800567 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
568
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800569 repeated DataSetProto historical_stats = 1;
570 optional DataSetProto current_stats = 2;
571}
572
573message JobPackageHistoryProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800574 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
575
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800576 enum Event {
577 UNKNOWN = 0;
578 START_JOB = 1;
579 STOP_JOB = 2;
580 START_PERIODIC_JOB = 3;
581 STOP_PERIODIC_JOB = 4;
582 }
583 message HistoryEvent {
Kweku Adams0f168de2018-01-24 10:51:30 -0800584 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
585
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800586 optional Event event = 1;
587 optional int64 time_since_event_ms = 2;
588 optional int32 uid = 3;
589 // Job IDs can technically be negative.
590 optional int32 job_id = 4;
Yi Jin2921dd02018-03-23 14:10:31 -0700591 optional string tag = 5;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800592 // Only valid for STOP_JOB or STOP_PERIODIC_JOB Events.
Tej Singh33a412b2018-03-16 18:43:59 -0700593 optional .android.app.job.StopReasonEnum stop_reason = 6;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800594 }
595 repeated HistoryEvent history_event = 1;
596}
597
598message JobStatusShortInfoProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800599 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
600
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800601 optional int32 calling_uid = 1;
602 // Job IDs can technically be negative.
603 optional int32 job_id = 2;
Yi Jine5e2a752018-03-28 18:31:07 -0700604 optional string battery_name = 3;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800605}
606
607// Dump from a com.android.server.job.controllers.JobStatus object.
608message JobStatusDumpProto {
Kweku Adams0f168de2018-01-24 10:51:30 -0800609 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
610
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800611 // The UID that scheduled the job.
612 optional int32 calling_uid = 1;
Yi Jin2921dd02018-03-23 14:10:31 -0700613 optional string tag = 2;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800614
615 // The UID for which the job is being run.
616 optional int32 source_uid = 3;
617 optional int32 source_user_id = 4;
618 // The package for which the job is being run.
619 optional string source_package_name = 5;
620
621 // Custom dump of android.app.job.JobInfo object.
622 message JobInfo {
Kweku Adams0f168de2018-01-24 10:51:30 -0800623 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
624
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800625 optional .android.content.ComponentNameProto service = 1;
626
627 optional bool is_periodic = 2;
628 // Only valid if is_periodic is true.
629 optional int64 period_interval_ms = 3;
630 // Only valid if is_periodic is true.
631 optional int64 period_flex_ms = 4;
632
633 optional bool is_persisted = 5;
634 optional sint32 priority = 6;
635 optional int32 flags = 7;
636
637 optional bool requires_charging = 8;
638 optional bool requires_battery_not_low = 9;
639 optional bool requires_device_idle = 10;
640
641 message TriggerContentUri {
Kweku Adams0f168de2018-01-24 10:51:30 -0800642 optional int32 flags = 1 [
643 (.android.privacy).dest = DEST_AUTOMATIC
644 ];
645 optional string uri = 2 [ (.android.privacy).dest = DEST_EXPLICIT ];
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800646 }
647 repeated TriggerContentUri trigger_content_uris = 11;
648 optional int64 trigger_content_update_delay_ms = 12;
649 optional int64 trigger_content_max_delay_ms = 13;
650
651 optional .android.os.PersistableBundleProto extras = 14;
652 optional .android.os.BundleProto transient_extras = 15;
Kweku Adamscb89f622018-03-22 13:55:46 -0700653 // ClipData of information that is returned to the application at
654 // execution time, but not persisted by the system. This is provided by
655 // the app and the main purpose of providing a ClipData is to allow
656 // granting of URI permissions for data associated with the clip. The
657 // exact kind of permission grant to perform is specified in the flags
658 // field.
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800659 optional .android.content.ClipDataProto clip_data = 16;
660
661 optional GrantedUriPermissionsDumpProto granted_uri_permissions = 17;
662
663 optional .android.net.NetworkRequestProto required_network = 18;
664
665 optional int64 total_network_bytes = 19;
666
667 optional int64 min_latency_ms = 20;
668 optional int64 max_execution_delay_ms = 21;
669
670 message Backoff {
Kweku Adams0f168de2018-01-24 10:51:30 -0800671 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
672
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800673 enum Policy {
674 BACKOFF_POLICY_LINEAR = 0;
675 BACKOFF_POLICY_EXPONENTIAL = 1;
676 }
677 optional Policy policy = 1;
678 optional int64 initial_backoff_ms = 2;
679 }
680 optional Backoff backoff_policy = 22;
681
682 optional bool has_early_constraint = 23;
683 optional bool has_late_constraint = 24;
684 }
685 optional JobInfo job_info = 6;
686
687 enum Constraint {
688 CONSTRAINT_CHARGING = 1;
689 CONSTRAINT_BATTERY_NOT_LOW = 2;
690 CONSTRAINT_STORAGE_NOT_LOW = 3;
691 CONSTRAINT_TIMING_DELAY = 4;
692 CONSTRAINT_DEADLINE = 5;
693 CONSTRAINT_IDLE = 6;
694 CONSTRAINT_CONNECTIVITY = 7;
Kweku Adams21b8d262018-03-30 12:19:58 -0700695 CONSTRAINT_CONTENT_TRIGGER = 8;
696 CONSTRAINT_DEVICE_NOT_DOZING = 9;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800697 CONSTRAINT_WITHIN_QUOTA = 10;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800698 }
699 repeated Constraint required_constraints = 7;
700 repeated Constraint satisfied_constraints = 8;
701 repeated Constraint unsatisfied_constraints = 9;
702 optional bool is_doze_whitelisted = 10;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800703 optional bool is_uid_active = 26;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800704
Kweku Adams32f44762018-11-02 16:58:32 -0700705 message ImplicitConstraints {
706 // The device isn't Dozing or this job will be in the foreground. This
707 // implicit constraint must be satisfied for the job to run.
708 optional bool is_not_dozing = 1;
709 // The job is not restricted from running in the background (due to
710 // Battery Saver). This implicit constraint must be satisfied for the
711 // job to run.
712 optional bool is_not_restricted_in_bg = 2;
713 }
714 optional ImplicitConstraints implicit_constraints = 25;
715
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800716 enum TrackingController {
717 TRACKING_BATTERY = 0;
718 TRACKING_CONNECTIVITY = 1;
719 TRACKING_CONTENT = 2;
720 TRACKING_IDLE = 3;
721 TRACKING_STORAGE = 4;
722 TRACKING_TIME = 5;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800723 TRACKING_QUOTA = 6;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800724 }
725 // Controllers that are currently tracking the job.
726 repeated TrackingController tracking_controllers = 11;
727
Kweku Adams0f168de2018-01-24 10:51:30 -0800728 repeated string changed_authorities = 12 [
729 (.android.privacy).dest = DEST_EXPLICIT
730 ];
731 repeated string changed_uris = 13 [
732 (.android.privacy).dest = DEST_EXPLICIT
733 ];
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800734
735 optional .android.net.NetworkProto network = 14;
736
737 // Only the desired data from an android.app.job.JobWorkItem object.
738 message JobWorkItem {
Kweku Adams0f168de2018-01-24 10:51:30 -0800739 option (.android.msg_privacy).dest = DEST_AUTOMATIC;
740
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800741 optional int32 work_id = 1;
742 optional int32 delivery_count = 2;
743 optional .android.content.IntentProto intent = 3;
744 optional GrantedUriPermissionsDumpProto uri_grants = 4;
745 }
746 repeated JobWorkItem pending_work = 15;
747 repeated JobWorkItem executing_work = 16;
748
749 enum Bucket {
750 ACTIVE = 0;
751 WORKING_SET = 1;
752 FREQUENT = 2;
753 RARE = 3;
754 NEVER = 4;
755 }
756 optional Bucket standby_bucket = 17;
Kweku Adams4836f9d2018-11-12 17:04:17 -0800757 optional bool is_exempted_from_app_standby = 27;
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800758
759 optional int64 enqueue_duration_ms = 18;
760 // Can be negative if the earliest runtime deadline has passed.
761 optional sint64 time_until_earliest_runtime_ms = 19;
762 // Can be negative if the latest runtime deadline has passed.
763 optional sint64 time_until_latest_runtime_ms = 20;
764
765 optional int32 num_failures = 21;
766
767 optional int64 last_successful_run_time = 22;
768 optional int64 last_failed_run_time = 23;
Makoto Onuki15407842018-01-19 14:23:11 -0800769
770 optional int64 internal_flags = 24;
Kweku Adams32f44762018-11-02 16:58:32 -0700771
Kweku Adams4836f9d2018-11-12 17:04:17 -0800772 // Next tag: 28
Kweku Adams85f2fbc2017-12-18 12:04:12 -0800773}