blob: 74ee3325a9438c6549dd7b1a6a405b3cffdb9def [file] [log] [blame]
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -07001/*
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";
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070018
Yao Chend54f9dd2017-10-17 17:37:48 +000019// TODO: Not the right package and class name
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070020package android.os.statsd;
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070021option java_package = "com.android.os";
22option java_outer_classname = "StatsEventProto";
23
Yao Chend54f9dd2017-10-17 17:37:48 +000024/**
25 * The master event class. This message defines all of the available
26 * raw stats log events from the Android system, also known as "atoms."
27 *
28 * This field contains a single oneof with all of the available messages.
29 * The stats-log-api-gen tool runs as part of the Android build and
30 * generates the android.util.StatsLog class, which contains the constants
31 * and methods that Android uses to log.
32 *
33 * This StatsEvent class is not actually built into the Android system.
34 * Instead, statsd on Android constructs these messages synthetically,
35 * in the format defined here and in stats_log.proto.
36 */
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070037message StatsEvent {
Yao Chend54f9dd2017-10-17 17:37:48 +000038 oneof event {
Bookatzc1a050a2017-10-10 15:49:28 -070039 // For StatsLog reasons, 1 is illegal and will not work. Must start at 2.
40 BleScanStateChanged ble_scan_state_changed = 2;
41 BleUnoptimizedScanStateChanged ble_unoptimized_scan_state_changed = 3;
42 BleScanResultReceived ble_scan_result_received = 4;
43 SensorStateChanged sensor_state_changed = 5;
44 GpsScanStateChanged gps_scan_state_changed = 6; // TODO: untested
45 SyncStateChanged sync_state_changed = 7;
46 ScheduledJobStateChanged scheduled_job_state_changed = 8;
47 ScreenBrightnessChanged screen_brightness_changed = 9;
48 // 10-20 are temporarily reserved for wakelocks etc.
Bookatzd6746242017-10-24 18:39:35 -070049 WakelockStateChanged wakelock_state_changed = 10;
Bookatzc1a050a2017-10-10 15:49:28 -070050 UidWakelockStateChanged uid_wakelock_state_changed = 11;
51 LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 12;
52 BatterySaverModeStateChanged battery_saver_mode_state_changed = 21;
53 DeviceIdleModeStateChanged device_idle_mode_state_changed = 22;
54 AudioStateChanged audio_state_changed = 23;
55 MediaCodecActivityChanged media_codec_activity_changed = 24;
56 CameraStateChanged camera_state_changed = 25;
57 FlashlightStateChanged flashlight_state_changed = 26;
58 UidProcessStateChanged uid_process_state_changed = 27;
59 ProcessLifeCycleStateChanged process_life_cycle_state_changed = 28;
60 ScreenStateChanged screen_state_changed = 29;
Bookatz8c6571b2017-10-24 15:04:41 -070061 BatteryLevelChanged battery_level_changed = 30;
62 ChargingStateChanged charging_state_changed = 31;
63 PluggedStateChanged plugged_state_changed = 32;
64 DeviceTemperatureReported device_temperature_reported = 33;
65 DeviceOnStatusChanged device_on_status_changed = 34;
66 WakeupAlarmOccurred wakeup_alarm_occurred = 35;
67 KernelWakeupReported kernel_wakeup_reported = 36;
Bookatze5885242017-10-24 20:10:31 -070068 WifiLockStateChanged wifi_lock_state_changed = 37;
69 WifiSignalStrengthChanged wifi_signal_strength_changed = 38;
70 WifiScanStateChanged wifi_scan_state_changed = 39;
71 PhoneSignalStrengthChanged phone_signal_strength_changed = 40;
Bookatz8c6571b2017-10-24 15:04:41 -070072
Bookatzc1a050a2017-10-10 15:49:28 -070073 // TODO: Reorder the numbering so that the most frequent occur events occur in the first 15.
Yao Chend54f9dd2017-10-17 17:37:48 +000074 }
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070075}
76
Yao Chend54f9dd2017-10-17 17:37:48 +000077/**
78 * A WorkSource represents the chained attribution of applications that
79 * resulted in a particular bit of work being done.
80 */
81message WorkSource {
82 // TODO
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -070083}
84
Yao Chend54f9dd2017-10-17 17:37:48 +000085/*
86 * *****************************************************************************
87 * Below are all of the individual atoms that are logged by Android via statsd
88 * and Westworld.
89 *
90 * RULES:
91 * - The field ids for each atom must start at 1, and count upwards by 1.
92 * Skipping field ids is not allowed.
93 * - These form an API, so renaming, renumbering or removing fields is
94 * not allowed between android releases. (This is not currently enforced,
95 * but there will be a tool to enforce this restriction).
96 * - The types must be built-in protocol buffer types, namely, no sub-messages
97 * are allowed (yet). The bytes type is also not allowed.
98 * - The CamelCase name of the message type should match the
99 * underscore_separated name as defined in StatsEvent.
100 * - If an atom represents work that can be attributed to an app, there can
101 * be exactly one WorkSource field. It must be field number 1.
102 * - A field that is a uid should be a string field, tagged with the [xxx]
103 * annotation. The generated code on android will be represented by UIDs,
104 * and those UIDs will be translated in xxx to those strings.
105 *
106 * CONVENTIONS:
Bookatzc1a050a2017-10-10 15:49:28 -0700107 * - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange.
Yao Chend54f9dd2017-10-17 17:37:48 +0000108 * - If there is a UID, it goes first. Think in an object-oriented fashion.
109 * *****************************************************************************
110 */
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -0700111
Yao Chend54f9dd2017-10-17 17:37:48 +0000112/**
113 * Logs when the screen state changes.
114 *
115 * Logged from:
116 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
117 */
118message ScreenStateChanged {
119 // TODO: Use the real screen state.
120 enum State {
121 STATE_UNKNOWN = 0;
122 STATE_OFF = 1;
123 STATE_ON = 2;
124 STATE_DOZE = 3;
125 STATE_DOZE_SUSPEND = 4;
126 STATE_VR = 5;
127 }
128 // New screen state.
129 optional State display_state = 1;
Stefan Lafoncdb1a0e2017-09-27 20:24:15 -0700130}
Yao Chend54f9dd2017-10-17 17:37:48 +0000131
132/**
Bookatzc1a050a2017-10-10 15:49:28 -0700133 * Logs that the state of a process state, as per the activity manager, has changed.
Yao Chend54f9dd2017-10-17 17:37:48 +0000134 *
135 * Logged from:
136 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
137 */
Bookatzc1a050a2017-10-10 15:49:28 -0700138message UidProcessStateChanged {
Yao Chend54f9dd2017-10-17 17:37:48 +0000139 optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation
140
141 // The state.
Bookatzc1a050a2017-10-10 15:49:28 -0700142 // TODO: Use the real (mapped) process states.
Yao Chend54f9dd2017-10-17 17:37:48 +0000143 optional int32 state = 2;
144}
145
146/**
Bookatzc1a050a2017-10-10 15:49:28 -0700147 * Logs that a process started, finished, crashed, or ANRed.
148 *
149 * Logged from:
150 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
151 */
152message ProcessLifeCycleStateChanged {
153 // TODO: Use the real (mapped) process states.
154 optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation
155
156 // TODO: What is this?
157 optional string name = 2;
158
159 // The state.
160 // TODO: Use an enum.
161 optional int32 event = 3;
162}
163
164
165
166/**
167 * Logs when the ble scan state changes.
168 *
169 * Logged from:
170 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
171 */
172message BleScanStateChanged {
173 // TODO: Add attribution instead of uid.
174 optional int32 uid = 1;
175
176 enum State {
177 OFF = 0;
178 ON = 1;
179 }
180 optional State state = 2;
181}
182
183/**
184 * Logs when an unoptimized ble scan state changes.
185 *
186 * Logged from:
187 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
188 */
189// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
190message BleUnoptimizedScanStateChanged {
191 // TODO: Add attribution instead of uid.
192 optional int32 uid = 1;
193
194 enum State {
195 OFF = 0;
196 ON = 1;
197 }
198 optional State state = 2;
199}
200
201/**
202 * Logs reporting of a ble scan finding results.
203 *
204 * Logged from:
205 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
206 */
207// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
208message BleScanResultReceived {
209 // TODO: Add attribution instead of uid.
210 optional int32 uid = 1;
211
212 // Number of ble scan results returned.
213 optional int32 num_of_results = 2;
214}
215
216/**
217 * Logs when a sensor state changes.
218 *
219 * Logged from:
220 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
221 */
222message SensorStateChanged {
223 // TODO: Add attribution instead of uid.
224 optional int32 uid = 1;
225
226 // TODO: Is there a way to get the actual name of the sensor?
227 // The id (int) of the sensor.
228 optional int32 sensor_id = 2;
229
230 enum State {
231 OFF = 0;
232 ON = 1;
233 }
234 optional State state = 3;
235}
236
237
238/**
239 * Logs when GPS state changes.
240 *
241 * Logged from:
242 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
243 */
244message GpsScanStateChanged {
245 // TODO: Add attribution instead of uid.
246 optional int32 uid = 1;
247
248 enum State {
249 OFF = 0;
250 ON = 1;
251 }
252 optional State state = 2;
253}
254
255
256/**
257 * Logs when a sync manager sync state changes.
258 *
259 * Logged from:
260 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
261 */
262message SyncStateChanged {
263 // TODO: Add attribution instead of uid.
264 optional int32 uid = 1;
265
266 // Name of the sync (as named in the app)
267 optional string name = 2;
268
269 enum State {
270 OFF = 0;
271 ON = 1;
272 }
273 optional State state = 3;
274}
275
276/**
277 * Logs when a job scheduler job state changes.
278 *
279 * Logged from:
280 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
281 */
282message ScheduledJobStateChanged {
283 // TODO: Add attribution instead of uid.
284 optional int32 uid = 1;
285
286 // Name of the job (as named in the app)
287 optional string name = 2;
288
289 enum State {
290 OFF = 0;
291 ON = 1;
292 }
293 optional State state = 3;
294
295 // TODO: Consider adding the stopReason (int)
296}
297
298/**
299 * Logs when the audio state changes.
300 *
301 * Logged from:
302 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
303 */
304message AudioStateChanged {
305 // TODO: Add attribution instead of uid.
306 optional int32 uid = 1;
307
308 enum State {
309 OFF = 0;
310 ON = 1;
311 }
312 optional State state = 2;
313}
314
315/**
316 * Logs when the video codec state changes.
317 *
318 * Logged from:
319 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
320 */
321message MediaCodecActivityChanged {
322 // TODO: Add attribution instead of uid.
323 optional int32 uid = 1;
324
325 enum State {
326 OFF = 0;
327 ON = 1;
328 }
329 optional State state = 2;
330}
331
332/**
333 * Logs when the flashlight state changes.
334 *
335 * Logged from:
336 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
337 */
338message FlashlightStateChanged {
339 // TODO: Add attribution instead of uid.
340 optional int32 uid = 1;
341
342 enum State {
343 OFF = 0;
344 ON = 1;
345 }
346 optional State state = 2;
347}
348
349/**
350 * Logs when the camera state changes.
351 *
352 * Logged from:
353 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
354 */
355message CameraStateChanged {
356 // TODO: Add attribution instead of uid.
357 optional int32 uid = 1;
358
359 enum State {
360 OFF = 0;
361 ON = 1;
362 }
363 optional State state = 2;
364}
365
366/**
367 * Logs that the state of a wakelock (per app and per wakelock name) has changed.
Yao Chend54f9dd2017-10-17 17:37:48 +0000368 *
369 * Logged from:
370 * TODO
371 */
Bookatzd6746242017-10-24 18:39:35 -0700372message WakelockStateChanged {
Yao Chend54f9dd2017-10-17 17:37:48 +0000373 // TODO: Add attribution instead of uid.
374 optional int32 uid = 1;
375
Bookatzc1a050a2017-10-10 15:49:28 -0700376 // Type of wakelock.
377 enum Type {
378 PARTIAL = 0;
379 FULL = 1;
380 WINDOW = 2;
381 }
382 optional int32 type = 2;
383
384 // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
385 optional string tag = 3;
386
387 enum State {
388 OFF = 0;
389 ON = 1;
390 }
391 optional State state = 4;
392}
393
394/**
395 * Logs when an app is holding a wakelock, regardless of the wakelock's name.
396 *
397 * Logged from:
398 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
399 */
400message UidWakelockStateChanged {
401 // TODO: Add attribution instead of uid.
402 optional int32 uid = 1;
403
404 // Type of wakelock.
405 enum Type {
406 PARTIAL = 0;
407 FULL = 1;
408 WINDOW = 2;
409 }
410 optional int32 type = 2;
411
412 enum State {
413 OFF = 0;
414 ON = 1;
415 }
416 optional State state = 3;
417}
418
419/**
420 * Logs when a partial wakelock is considered 'long' (over 1 min).
421 *
422 * Logged from:
423 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
424 */
425message LongPartialWakelockStateChanged {
426 // TODO: Add attribution instead of uid?
427 optional int32 uid = 1;
428
Yao Chend54f9dd2017-10-17 17:37:48 +0000429 // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
430 optional string tag = 2;
431
Bookatzc1a050a2017-10-10 15:49:28 -0700432 // TODO: I have no idea what this is.
433 optional string history_tag = 3;
434
435 enum State {
436 OFF = 0;
437 ON = 1;
438 }
439 optional State state = 4;
Yao Chend54f9dd2017-10-17 17:37:48 +0000440}
441
Bookatzc1a050a2017-10-10 15:49:28 -0700442/**
443 * Logs Battery Saver state change.
444 *
445 * Logged from:
446 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
447 */
448message BatterySaverModeStateChanged {
449 enum State {
450 OFF = 0;
451 ON = 1;
452 }
453 optional State state = 1;
454}
455
456/**
457 * Logs Doze mode state change.
458 *
459 * Logged from:
460 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
461 */
462message DeviceIdleModeStateChanged {
463 // TODO: Use the enum matching BatteryStats.DEVICE_IDLE_MODE_.
464 optional int32 state = 1;
465}
466
467/**
468 * Logs screen brightness level.
469 *
470 * Logged from:
471 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
472 */
473message ScreenBrightnessChanged {
474 // Screen brightness level. Should be in [-1, 255] according to PowerManager.java.
475 optional int32 level = 1;
Bookatz8c6571b2017-10-24 15:04:41 -0700476}
477
478/**
479 * Logs battery level (percent full, from 0 to 100).
480 *
481 * Logged from:
482 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
483 */
484message BatteryLevelChanged {
485 // Battery level. Should be in [0, 100].
486 optional int32 battery_level = 1;
487}
488
489/**
490 * Logs change in charging status of the device.
491 *
492 * Logged from:
493 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
494 */
495message ChargingStateChanged {
496 // TODO: Link directly to BatteryManager.java's constants (via a proto).
497 enum State {
498 BATTERY_STATUS_UNKNOWN = 1;
499 BATTERY_STATUS_CHARGING = 2;
500 BATTERY_STATUS_DISCHARGING = 3;
501 BATTERY_STATUS_NOT_CHARGING = 4;
502 BATTERY_STATUS_FULL = 5;
503 }
504 optional State charging_state = 1;
505}
506
507/**
508 * Logs whether the device is plugged in, and what power source it is using.
509 *
510 * Logged from:
511 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
512 */
513message PluggedStateChanged {
514 // TODO: Link directly to BatteryManager.java's constants (via a proto).
515 enum State {
516 // Note that NONE is not in BatteryManager.java's constants.
517 BATTERY_PLUGGED_NONE = 0;
518 // Power source is an AC charger.
519 BATTERY_PLUGGED_AC = 1;
520 // Power source is a USB port.
521 BATTERY_PLUGGED_USB = 2;
522 // Power source is wireless.
523 BATTERY_PLUGGED_WIRELESS = 4;
524 }
525 optional State plugged_state = 1;
526}
527
528/**
529 * Logs the temperature of the device, in tenths of a degree Celsius.
530 *
531 * Logged from:
532 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
533 */
534message DeviceTemperatureReported {
535 // Temperature in tenths of a degree C.
536 optional int32 temperature = 1;
537}
538
539// TODO: Define this more precisely.
540// TODO: Log the ON state somewhere. It isn't currently logged anywhere.
541/**
542 * Logs when the device turns off or on.
543 *
544 * Logged from:
545 * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
546 */
547message DeviceOnStatusChanged {
548 enum State {
549 OFF = 0;
550 ON = 1;
551 }
552 optional State state = 1;
553}
554
555/**
556 * Logs when an app's wakeup alarm fires.
557 *
558 * Logged from:
559 * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
560 */
561message WakeupAlarmOccurred {
562 // TODO: Add attribution instead of uid?
563 optional int32 uid = 1;
564}
565
566/**
567 * Logs kernel wakeup reasons and aborts.
568 *
569 * Logged from:
570 * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
571 */
572message KernelWakeupReported {
573 // Name of the kernel wakeup reason (or abort).
574 optional string wakeup_reason_name = 1;
575
576 // Duration (in microseconds) for the wake-up interrupt to be serviced.
577 optional int64 duration_usec = 2;
Bookatze5885242017-10-24 20:10:31 -0700578}
579
580/**
581 * Logs wifi locks held by an app.
582 *
583 * Logged from:
584 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
585 */
586message WifiLockStateChanged {
587 // TODO: Add attribution instead of uid.
588 optional int32 uid = 1;
589
590 enum State {
591 OFF = 0;
592 ON = 1;
593 }
594 optional State state = 2;
595}
596
597/**
598 * Logs wifi signal strength changes.
599 *
600 * Logged from:
601 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
602 */
603message WifiSignalStrengthChanged {
604 // TODO: Reference the actual telephony/java/android/telephony/SignalStrength.java states.
605 enum SignalStrength {
606 SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
607 SIGNAL_STRENGTH_POOR = 1;
608 SIGNAL_STRENGTH_MODERATE = 2;
609 SIGNAL_STRENGTH_GOOD = 3;
610 SIGNAL_STRENGTH_GREAT = 4;
611 }
612 optional SignalStrength signal_strength = 1;
613}
614
615/**
616 * Logs wifi scans performed by an app.
617 *
618 * Logged from:
619 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
620 */
621message WifiScanStateChanged {
622 // TODO: Add attribution instead of uid.
623 optional int32 uid = 1;
624
625 enum State {
626 OFF = 0;
627 ON = 1;
628 }
629 optional State state = 2;
630}
631
632/**
633 * Logs phone signal strength changes.
634 *
635 * Logged from:
636 * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
637 */
638message PhoneSignalStrengthChanged {
639 // TODO: Reference the actual telephony/java/android/telephony/SignalStrength.java states.
640 enum SignalStrength {
641 SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
642 SIGNAL_STRENGTH_POOR = 1;
643 SIGNAL_STRENGTH_MODERATE = 2;
644 SIGNAL_STRENGTH_GOOD = 3;
645 SIGNAL_STRENGTH_GREAT = 4;
646 }
647 optional SignalStrength signal_strength = 1;
Bookatzc1a050a2017-10-10 15:49:28 -0700648}