1/*
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 android.os.statsd;
20option java_package = "com.android.os";
21option java_outer_classname = "AtomsProto";
22
23import "frameworks/base/cmds/statsd/src/atom_field_options.proto";
24import "frameworks/base/core/proto/android/app/enums.proto";
25import "frameworks/base/core/proto/android/app/job/enums.proto";
26import "frameworks/base/core/proto/android/bluetooth/enums.proto";
27import "frameworks/base/core/proto/android/os/enums.proto";
28import "frameworks/base/core/proto/android/server/enums.proto";
29import "frameworks/base/core/proto/android/telecomm/enums.proto";
30import "frameworks/base/core/proto/android/telephony/enums.proto";
31import "frameworks/base/core/proto/android/view/enums.proto";
32
33/**
34 * The master atom class. This message defines all of the available
35 * raw stats log events from the Android system, also known as "atoms."
36 *
37 * This field contains a single oneof with all of the available messages.
38 * The stats-log-api-gen tool runs as part of the Android build and
39 * generates the android.util.StatsLog class, which contains the constants
40 * and methods that Android uses to log.
41 *
42 * This Atom class is not actually built into the Android system.
43 * Instead, statsd on Android constructs these messages synthetically,
44 * in the format defined here and in stats_log.proto.
45 */
46message Atom {
47    // Pushed atoms start at 2.
48    oneof pushed {
49        // For StatsLog reasons, 1 is illegal and will not work. Must start at 2.
50        BleScanStateChanged ble_scan_state_changed = 2;
51        // 3 is available for use
52        BleScanResultReceived ble_scan_result_received = 4;
53        SensorStateChanged sensor_state_changed = 5;
54        GpsScanStateChanged gps_scan_state_changed = 6;
55        SyncStateChanged sync_state_changed = 7;
56        ScheduledJobStateChanged scheduled_job_state_changed = 8;
57        ScreenBrightnessChanged screen_brightness_changed = 9;
58        WakelockStateChanged wakelock_state_changed = 10;
59        LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11;
60        MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12;
61        WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13;
62        // 14 - 19 are available
63        BatterySaverModeStateChanged battery_saver_mode_state_changed = 20;
64        DeviceIdleModeStateChanged device_idle_mode_state_changed = 21;
65        DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22;
66        AudioStateChanged audio_state_changed = 23;
67        MediaCodecStateChanged media_codec_state_changed = 24;
68        CameraStateChanged camera_state_changed = 25;
69        FlashlightStateChanged flashlight_state_changed = 26;
70        UidProcessStateChanged uid_process_state_changed = 27;
71        ProcessLifeCycleStateChanged process_life_cycle_state_changed = 28;
72        ScreenStateChanged screen_state_changed = 29;
73        BatteryLevelChanged battery_level_changed = 30;
74        ChargingStateChanged charging_state_changed = 31;
75        PluggedStateChanged plugged_state_changed = 32;
76        // 33 - 34 are available
77        WakeupAlarmOccurred wakeup_alarm_occurred = 35;
78        KernelWakeupReported kernel_wakeup_reported = 36;
79        WifiLockStateChanged wifi_lock_state_changed = 37;
80        WifiSignalStrengthChanged wifi_signal_strength_changed = 38;
81        WifiScanStateChanged wifi_scan_state_changed = 39;
82        PhoneSignalStrengthChanged phone_signal_strength_changed = 40;
83        SettingChanged setting_changed = 41;
84        ActivityForegroundStateChanged activity_foreground_state_changed = 42;
85        IsolatedUidChanged isolated_uid_changed = 43;
86        PacketWakeupOccurred packet_wakeup_occurred = 44;
87        // 45 is available
88        AnomalyDetected anomaly_detected = 46;
89        AppBreadcrumbReported app_breadcrumb_reported = 47;
90        AppStartOccurred app_start_occurred = 48;
91        AppStartCanceled app_start_canceled = 49;
92        AppStartFullyDrawn app_start_fully_drawn = 50;
93        LmkKillOccurred lmk_kill_occurred = 51;
94        PictureInPictureStateChanged picture_in_picture_state_changed = 52;
95        WifiMulticastLockStateChanged wifi_multicast_lock_state_changed = 53;
96        LmkStateChanged lmk_state_changed = 54;
97        AppStartMemoryStateCaptured app_start_memory_state_captured = 55;
98        ShutdownSequenceReported shutdown_sequence_reported = 56;
99        BootSequenceReported boot_sequence_reported = 57;
100        DaveyOccurred davey_occurred = 58;
101        OverlayStateChanged overlay_state_changed = 59;
102        ForegroundServiceStateChanged foreground_service_state_changed = 60;
103        CallStateChanged call_state_changed = 61;
104        KeyguardStateChanged keyguard_state_changed = 62;
105        KeyguardBouncerStateChanged keyguard_bouncer_state_changed = 63;
106        KeyguardBouncerPasswordEntered keyguard_bouncer_password_entered = 64;
107        AppDied app_died = 65;
108        ResourceConfigurationChanged resource_configuration_changed = 66;
109        BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67;
110        BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68;
111        // 69 is blank but need not be.
112        UsbConnectorStateChanged usb_connector_state_changed = 70;
113        SpeakerImpedanceReported speaker_impedance_reported = 71;
114        HardwareFailed hardware_failed = 72;
115        PhysicalDropDetected physical_drop_detected = 73;
116        ChargeCyclesReported charge_cycles_reported = 74;
117        MobileConnectionStateChanged mobile_connection_state_changed = 75;
118        MobileRadioTechnologyChanged mobile_radio_technology_changed = 76;
119        UsbDeviceAttached usb_device_attached = 77;
120        AppCrashOccurred app_crash_occurred = 78;
121        ANROccurred anr_occurred = 79;
122        WTFOccurred wtf_occurred = 80;
123        LowMemReported low_mem_reported = 81;
124
125
126    }
127
128    // Pulled events will start at field 10000.
129    // Next: 10022
130    oneof pulled {
131        WifiBytesTransfer wifi_bytes_transfer = 10000;
132        WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001;
133        MobileBytesTransfer mobile_bytes_transfer = 10002;
134        MobileBytesTransferByFgBg mobile_bytes_transfer_by_fg_bg = 10003;
135        BluetoothBytesTransfer bluetooth_bytes_transfer = 10006;
136        KernelWakelock kernel_wakelock = 10004;
137        SubsystemSleepState subsystem_sleep_state = 10005;
138        CpuTimePerFreq cpu_time_per_freq = 10008;
139        CpuTimePerUid cpu_time_per_uid = 10009;
140        CpuTimePerUidFreq cpu_time_per_uid_freq = 10010;
141        WifiActivityInfo wifi_activity_info = 10011;
142        ModemActivityInfo modem_activity_info = 10012;
143        BluetoothActivityInfo bluetooth_activity_info = 10007;
144        ProcessMemoryState process_memory_state = 10013;
145        SystemElapsedRealtime system_elapsed_realtime = 10014;
146        SystemUptime system_uptime = 10015;
147        CpuActiveTime cpu_active_time = 10016;
148        CpuClusterTime cpu_cluster_time = 10017;
149        DiskSpace disk_space = 10018;
150        RemainingBatteryCapacity remaining_battery_capacity = 10019;
151        FullBatteryCapacity full_battery_capacity = 10020;
152        Temperature temperature = 10021;
153    }
154
155    // DO NOT USE field numbers above 100,000 in AOSP. Field numbers above
156    // 100,000 are reserved for non-AOSP (e.g. OEMs) to use.
157}
158
159/**
160 * This proto represents a node of an attribution chain.
161 * Note: All attribution chains are represented as a repeated field of type
162 * AttributionNode. It is understood that in such arrays, the order is that
163 * of calls, that is [A, B, C] if A calls B that calls C.
164 */
165message AttributionNode {
166    // The uid for a given element in the attribution chain.
167    optional int32 uid = 1;
168
169    // The (optional) string tag for an element in the attribution chain. If the
170    // element has no tag, it is encoded as an empty string.
171    optional string tag = 2;
172}
173
174/*
175 * *****************************************************************************
176 * Below are all of the individual atoms that are logged by Android via statsd.
177 *
178 * RULES:
179 *   - The field ids for each atom must start at 1, and count upwards by 1.
180 *     Skipping field ids is not allowed.
181 *   - These form an API, so renaming, renumbering or removing fields is
182 *     not allowed between android releases.  (This is not currently enforced,
183 *     but there will be a tool to enforce this restriction).
184 *   - The types must be built-in protocol buffer types, namely, no sub-messages
185 *     are allowed (yet).  The bytes type is also not allowed.
186 *   - The CamelCase name of the message type should match the
187 *     underscore_separated name as defined in Atom.
188 *   - If an atom represents work that can be attributed to an app, there can
189 *     be exactly one AttributionChain field. It must be field number 1.
190 *   - A field that is a uid should be a string field, tagged with the [xxx]
191 *     annotation. The generated code on android will be represented by UIDs,
192 *     and those UIDs will be translated in xxx to those strings.
193 *
194 * CONVENTIONS:
195 *   - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange.
196 *   - If there is a UID, it goes first. Think in an object-oriented fashion.
197 * *****************************************************************************
198 */
199
200/**
201 * Logs when the screen state changes.
202 *
203 * Logged from:
204 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
205 */
206message ScreenStateChanged {
207    // New screen state, from frameworks/base/core/proto/android/view/enums.proto.
208    optional android.view.DisplayStateEnum state = 1 [(stateFieldOption).option = EXCLUSIVE];
209}
210
211/**
212 * Logs that the state of a process state, as per the activity manager, has changed.
213 *
214 * Logged from:
215 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
216 */
217message UidProcessStateChanged {
218    optional int32 uid = 1 [(stateFieldOption).option = PRIMARY, (is_uid) = true];
219
220    // The state, from frameworks/base/core/proto/android/app/enums.proto.
221    optional android.app.ProcessStateEnum state = 2 [(stateFieldOption).option = EXCLUSIVE];
222}
223
224/**
225 * Logs that a process started, finished, crashed, or ANRed.
226 *
227 * Logged from:
228 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
229 */
230message ProcessLifeCycleStateChanged {
231    optional int32 uid = 1 [(is_uid) = true];
232
233    // The process name (usually same as the app name).
234    optional string process_name = 2;
235
236    // What lifecycle state the process changed to.
237    // This enum is specific to atoms.proto.
238    enum State {
239        FINISHED = 0;
240        STARTED = 1;
241        CRASHED = 2;
242    }
243    optional State state = 3;
244}
245
246/**
247 * Logs when the ble scan state changes.
248 *
249 * Logged from:
250 *   packages/apps/Bluetooth/src/com/android/bluetooth/gatt/AppScanStats.java
251 */
252message BleScanStateChanged {
253    repeated AttributionNode attribution_node = 1;
254
255    enum State {
256        OFF = 0;
257        ON = 1;
258        // RESET indicates all ble stopped. Used when it (re)starts (e.g. after it crashes).
259        RESET = 2;
260    }
261    optional State state = 2;
262
263    // Does the scan have a filter.
264    optional bool is_filtered = 3;
265    // Whether the scan is a CALLBACK_TYPE_FIRST_MATCH scan. Called 'background' scan internally.
266    optional bool is_first_match = 4;
267    // Whether the scan set to piggy-back off the results of other scans (SCAN_MODE_OPPORTUNISTIC).
268    optional bool is_opportunistic = 5;
269}
270
271/**
272 * Logs reporting of a ble scan finding results.
273 *
274 * Logged from:
275 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
276 */
277// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
278message BleScanResultReceived {
279    repeated AttributionNode attribution_node = 1;
280
281    // Number of ble scan results returned.
282    optional int32 num_results = 2;
283}
284
285/**
286 * Logs when a sensor state changes.
287 *
288 * Logged from:
289 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
290 */
291message SensorStateChanged {
292    repeated AttributionNode attribution_node = 1;
293
294    // The id (int) of the sensor.
295    optional int32 sensor_id = 2;
296
297    enum State {
298        OFF = 0;
299        ON = 1;
300    }
301    optional State state = 3;
302}
303
304
305/**
306 * Logs when GPS state changes.
307 *
308 * Logged from:
309 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
310 */
311message GpsScanStateChanged {
312    repeated AttributionNode attribution_node = 1;
313
314    enum State {
315        OFF = 0;
316        ON = 1;
317    }
318    optional State state = 2;
319}
320
321
322/**
323 * Logs when a sync manager sync state changes.
324 *
325 * Logged from:
326 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
327 */
328message SyncStateChanged {
329    repeated AttributionNode attribution_node = 1;
330
331    // Name of the sync (as named in the app). Can be chosen at run-time.
332    optional string sync_name = 2;
333
334    enum State {
335        OFF = 0;
336        ON = 1;
337    }
338    optional State state = 3;
339}
340
341/**
342 * Logs when a job scheduler job state changes.
343 *
344 * Logged from:
345 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
346 */
347message ScheduledJobStateChanged {
348    repeated AttributionNode attribution_node = 1;
349
350    // Name of the job (as named in the app)
351    optional string job_name = 2;
352
353    enum State {
354        FINISHED = 0;
355        STARTED = 1;
356        SCHEDULED = 2;
357    }
358    optional State state = 3;
359
360    // The reason a job has stopped.
361    // This is only applicable when the state is FINISHED.
362    // The default value is STOP_REASON_UNKNOWN.
363    optional android.app.job.StopReasonEnum stop_reason = 4;
364}
365
366/**
367 * Logs when the audio state changes.
368 *
369 * Logged from:
370 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
371 */
372message AudioStateChanged {
373    repeated AttributionNode attribution_node = 1;
374
375    enum State {
376        OFF = 0;
377        ON = 1;
378        // RESET indicates all audio stopped. Used when it (re)starts (e.g. after it crashes).
379        RESET = 2;
380    }
381    optional State state = 2;
382}
383
384/**
385 * Logs when the video codec state changes.
386 *
387 * Logged from:
388 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
389 */
390message MediaCodecStateChanged {
391    repeated AttributionNode attribution_node = 1;
392
393    enum State {
394        OFF = 0;
395        ON = 1;
396        // RESET indicates all mediaCodec stopped. Used when it (re)starts (e.g. after it crashes).
397        RESET = 2;
398    }
399    optional State state = 2;
400}
401
402/**
403 * Logs when the flashlight state changes.
404 *
405 * Logged from:
406 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
407 */
408message FlashlightStateChanged {
409    repeated AttributionNode attribution_node = 1;
410
411    enum State {
412        OFF = 0;
413        ON = 1;
414        // RESET indicates all flashlight stopped. Used when it (re)starts (e.g. after it crashes).
415        RESET = 2;
416    }
417    optional State state = 2;
418}
419
420/**
421 * Logs when the camera state changes.
422 *
423 * Logged from:
424 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
425 */
426message CameraStateChanged {
427    repeated AttributionNode attribution_node = 1;
428
429    enum State {
430        OFF = 0;
431        ON = 1;
432        // RESET indicates all camera stopped. Used when it (re)starts (e.g. after it crashes).
433        RESET = 2;
434    }
435    optional State state = 2;
436}
437
438/**
439 * Logs that the state of a wakelock (per app and per wakelock name) has changed.
440 *
441 * Logged from:
442 *   TODO
443 */
444message WakelockStateChanged {
445    repeated AttributionNode attribution_node = 1;
446
447    // The type (level) of the wakelock; e.g. a partial wakelock or a full wakelock.
448    // From frameworks/base/core/proto/android/os/enums.proto.
449    optional android.os.WakeLockLevelEnum level = 2;
450
451    // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
452    optional string tag = 3;
453
454    enum State {
455        RELEASE = 0;
456        ACQUIRE = 1;
457        CHANGE_RELEASE = 2;
458        CHANGE_ACQUIRE = 3;
459    }
460    optional State state = 4;
461}
462
463/**
464 * Logs when a partial wakelock is considered 'long' (over 1 min).
465 *
466 * Logged from:
467 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
468 */
469message LongPartialWakelockStateChanged {
470    repeated AttributionNode attribution_node = 1;
471
472    // The wakelock tag (Called tag in the Java API, sometimes name elsewhere).
473    optional string tag = 2;
474
475    // TODO: I have no idea what this is.
476    optional string history_tag = 3;
477
478    enum State {
479        OFF = 0;
480        ON = 1;
481    }
482    optional State state = 4;
483}
484
485/**
486 * Logs Battery Saver state change.
487 *
488 * Logged from:
489 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
490 */
491message BatterySaverModeStateChanged {
492    enum State {
493        OFF = 0;
494        ON = 1;
495    }
496    optional State state = 1;
497}
498
499/**
500 * Logs Doze mode state change.
501 *
502 * Logged from:
503 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
504 */
505message DeviceIdleModeStateChanged {
506    optional android.server.DeviceIdleModeEnum state = 1;
507}
508
509
510/**
511 * Logs state change of Doze mode including maintenance windows.
512 *
513 * Logged from:
514 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
515 */
516message DeviceIdlingModeStateChanged {
517    optional android.server.DeviceIdleModeEnum state = 1;
518}
519
520/**
521 * Logs screen brightness level.
522 *
523 * Logged from:
524 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
525 */
526message ScreenBrightnessChanged {
527    // Screen brightness level. Should be in [-1, 255] according to PowerManager.java.
528    optional int32 level = 1;
529}
530
531/**
532 * Logs battery level (percent full, from 0 to 100).
533 *
534 * Logged from:
535 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
536 */
537message BatteryLevelChanged {
538    // Battery level. Should be in [0, 100].
539    optional int32 battery_level = 1;
540}
541
542/**
543 * Logs change in charging status of the device.
544 *
545 * Logged from:
546 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
547 */
548message ChargingStateChanged {
549    // State of the battery, from frameworks/base/core/proto/android/os/enums.proto.
550    optional android.os.BatteryStatusEnum state = 1;
551}
552
553/**
554 * Logs whether the device is plugged in, and what power source it is using.
555 *
556 * Logged from:
557 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
558 */
559message PluggedStateChanged {
560    // Whether the device is plugged in, from frameworks/base/core/proto/android/os/enums.proto.
561    optional android.os.BatteryPluggedStateEnum state = 1;
562}
563
564/**
565 * Logs when an app's wakeup alarm fires.
566 *
567 * Logged from:
568 *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
569 */
570message WakeupAlarmOccurred {
571    repeated AttributionNode attribution_node = 1;
572
573    // Name of the wakeup alarm.
574    optional string tag = 2;
575}
576
577/**
578 * Logs when an an app causes the mobile radio to change state.
579 * Changing from LOW to MEDIUM or HIGH can be considered the app waking the mobile radio.
580 *
581 * Logged from:
582 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
583 */
584message MobileRadioPowerStateChanged {
585    repeated AttributionNode attribution_node = 1;
586
587    // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
588    optional android.telephony.DataConnectionPowerStateEnum state = 2;
589}
590
591/**
592 * Logs when an an app causes the wifi radio to change state.
593 * Changing from LOW to MEDIUM or HIGH can be considered the app waking the wifi radio.
594 *
595 * Logged from:
596 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
597 */
598message WifiRadioPowerStateChanged {
599    repeated AttributionNode attribution_node = 1;
600
601    // Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
602    optional android.telephony.DataConnectionPowerStateEnum state = 2;
603}
604
605/**
606 * Logs kernel wakeup reasons and aborts.
607 *
608 * Logged from:
609 *   frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
610 */
611message KernelWakeupReported {
612    // Name of the kernel wakeup reason (or abort).
613    optional string wakeup_reason_name = 1;
614
615    // Duration (in microseconds) for the wake-up interrupt to be serviced.
616    optional int64 duration_micros = 2;
617}
618
619/**
620 * Logs wifi locks held by an app.
621 *
622 * Logged from:
623 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
624 */
625message WifiLockStateChanged {
626    repeated AttributionNode attribution_node = 1;
627
628    enum State {
629        OFF = 0;
630        ON = 1;
631    }
632    optional State state = 2;
633}
634
635/**
636 * Logs wifi signal strength changes.
637 *
638 * Logged from:
639 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
640 */
641message WifiSignalStrengthChanged {
642    // Signal strength, from frameworks/base/core/proto/android/telephony/enums.proto.
643    optional android.telephony.SignalStrengthEnum signal_strength = 1;
644}
645
646/**
647 * Logs wifi scans performed by an app.
648 *
649 * Logged from:
650 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
651 */
652message WifiScanStateChanged {
653    repeated AttributionNode attribution_node = 1;
654
655    enum State {
656        OFF = 0;
657        ON = 1;
658    }
659    optional State state = 2;
660}
661
662/**
663 * Logs wifi multicast locks held by an app
664 *
665 * Logged from:
666 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
667 */
668message WifiMulticastLockStateChanged {
669    repeated AttributionNode attribution_node = 1;
670
671    enum State {
672        OFF = 0;
673        ON = 1;
674    }
675    optional State state = 2;
676}
677
678/**
679 * Logs shutdown reason and duration on next boot.
680 *
681 * Logged from:
682 *   frameworks/base/core/java/com/android/server/BootReceiver.java
683 */
684message ShutdownSequenceReported {
685    // True if shutdown is for a reboot. Default: false if we do not know.
686    optional bool reboot = 1;
687
688    // Reason for shutdown. Eg: userrequested. Default: "<EMPTY>".
689    optional string reason = 2;
690
691    // Beginning of shutdown time in ms using wall clock time since unix epoch.
692    // Default: 0 if no start time received.
693    optional int64 start_time_millis = 3;
694
695    // Duration of shutdown in ms. Default: 0 if no duration received.
696    optional int64 duration_millis = 4;
697}
698
699
700/**
701 * Logs boot reason and duration.
702 *
703 * Logged from:
704 *   system/core/bootstat/bootstat.cpp
705 */
706message BootSequenceReported {
707    // Reason for bootloader boot. Eg. reboot. See bootstat.cpp for larger list
708    // Default: "<EMPTY>" if not available.
709    optional string bootloader_reason = 1;
710
711    // Reason for system boot. Eg. bootloader, reboot,userrequested
712    // Default: "<EMPTY>" if not available.
713    optional string system_reason = 2;
714
715    // End of boot time in ms from unix epoch using system wall clock.
716    optional int64 end_time_millis = 3;
717
718    // Total boot duration in ms.
719    optional int64 total_duration_millis = 4;
720
721    // Bootloader duration in ms.
722    optional int64 bootloader_duration_millis = 5;
723
724    // Time since last boot in ms. Default: 0 if not available.
725    optional int64 time_since_last_boot = 6;
726}
727
728
729/**
730 * Logs call state and disconnect cause (if applicable).
731 *
732 * Logged from:
733 *   packages/services/Telecomm/src/com/android/server/telecom/Call.java
734 */
735message CallStateChanged {
736    // The state of the call. Eg. DIALING, ACTIVE, ON_HOLD, DISCONNECTED.
737    // From frameworks/base/core/proto/android/telecomm/enums.proto.
738    optional android.telecom.CallStateEnum call_state = 1;
739
740    // The reason the call disconnected. Eg. ERROR, MISSED, REJECTED, BUSY.
741    // This value is only applicable when the call_state is DISCONNECTED, and
742    // should always be UNKNOWN if the call_state is not DISCONNECTED.
743    // From frameworks/base/core/proto/android/telecomm/enums.proto.
744    optional android.telecom.DisconnectCauseEnum disconnect_cause = 2;
745
746    // True if the call is self-managed, which are apps that use the
747    // telecom infrastructure to make their own calls.
748    optional bool self_managed = 3;
749
750    // True if call is external. External calls are calls on connected Wear
751    // devices but show up in Telecom so the user can pull them onto the device.
752    optional bool external_call = 4;
753}
754
755/**
756 * Logs keyguard state. The keyguard is the lock screen.
757 *
758 * Logged from:
759 *   frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
760 */
761message KeyguardStateChanged {
762    enum State {
763        UNKNOWN = 0;
764        // The keyguard is hidden when the phone is unlocked.
765        HIDDEN = 1;
766        // The keyguard is shown when the phone is locked (screen turns off).
767        SHOWN= 2;
768        // The keyguard is occluded when something is overlaying the keyguard.
769        // Eg. Opening the camera while on the lock screen.
770        OCCLUDED = 3;
771    }
772    optional State state = 1;
773}
774
775/**
776 * Logs keyguard bouncer state. The bouncer is a part of the keyguard, and
777 * prompts the user to enter a password (pattern, pin, etc).
778 *
779 * Logged from:
780 *   frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
781 */
782
783message KeyguardBouncerStateChanged {
784    enum State {
785        UNKNOWN = 0;
786        // Bouncer is hidden, either as a result of successfully entering the
787        // password, screen timing out, or user going back to lock screen.
788        HIDDEN = 1;
789        // This is when the user is being prompted to enter the password.
790        SHOWN = 2;
791    }
792    optional State state = 1;
793}
794
795/**
796 * Logs the result of entering a password into the keyguard bouncer.
797 *
798 * Logged from:
799 *   frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
800 */
801message KeyguardBouncerPasswordEntered {
802    enum BouncerResult {
803        UNKNOWN = 0;
804        // The password entered was incorrect.
805        FAILURE = 1;
806        // The password entered was correct.
807        SUCCESS = 2;
808    }
809    optional BouncerResult result = 1;
810}
811
812/*
813 * Logs changes to the configuration of the device. The configuration is defined
814 * in frameworks/base/core/java/android/content/res/Configuration.java
815 * More documentation is at https://d.android.com/reference/android/content/res/Configuration.html
816 * Please go there to interpret the possible values each field can be.
817 *
818 * Logged from:
819 *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
820 */
821message ResourceConfigurationChanged {
822    // Bit mask of color capabilities of the screen.
823    // Contains information about the color gamut and hdr mode of the screen.
824    // See: https://d.android.com/reference/android/content/res/Configuration.html#colorMode
825    optional int32 colorMode = 1;
826
827    // The target screen density being rendered to.
828    // See: https://d.android.com/reference/android/content/res/Configuration.html#densityDpi
829    optional int32 densityDpi = 2;
830
831    // Current user preference for the scaling factor for fonts,
832    // relative to the base density scaling.
833    // See: https://d.android.com/reference/android/content/res/Configuration.html#fontScale
834    optional float fontScale = 3;
835
836    // Flag indicating whether the hard keyboard is hidden.
837    // See: https://d.android.com/reference/android/content/res/Configuration.html#hardKeyboardHidden
838    optional int32 hardKeyboardHidden = 4;
839
840    // The type of keyboard attached to the device.
841    // See: https://d.android.com/reference/android/content/res/Configuration.html#keyboard
842    optional int32 keyboard = 5;
843
844    // Flag indicating whether any keyboard is available. Takes soft keyboards into account.
845    // See: https://d.android.com/reference/android/content/res/Configuration.html#keyboardHidden
846    optional int32 keyboardHideen = 6;
847
848    // IMSI MCC (Mobile Country Code), corresponding to mcc resource qualifier.
849    // 0 if undefined.
850    // See: https://d.android.com/reference/android/content/res/Configuration.html#mcc
851    optional int32 mcc = 7;
852
853    // IMSI MNC (Mobile Network Code), corresponding to mnc resource qualifier.
854    // 0 if undefined. Note: the actual MNC may be 0, to check for this use the
855    // MNC_ZERO symbol defined in Configuration.java.
856    // See: https://d.android.com/reference/android/content/res/Configuration.html#mnc
857    optional int32 mnc = 8;
858
859    // The kind of navigation available on the device.
860    // See: https://developer.android.com/reference/android/content/res/Configuration.html#navigation
861    optional int32 navigation = 9;
862
863    // Flag indicating whether the navigation is available.
864    // See: https://d.android.com/reference/android/content/res/Configuration.html#navigationHidden
865    optional int32 navigationHidden = 10;
866
867    // Overall orientation of the screen.
868    // See: https://d.android.com/reference/android/content/res/Configuration.html#orientation
869    optional int32 orientation = 11;
870
871    // The current height of the available screen space, in dp units.
872    // See: https://d.android.com/reference/android/content/res/Configuration.html#screenHeightDp
873    optional int32 screenHeightDp = 12;
874
875    // Bit mask of overall layout of the screen.
876    // Contains information about screen size, whether the screen is wider/taller
877    // than normal, whether the screen layout is right-tl-left or left-to-right,
878    // and whether the screen has a rounded shape.
879    // See: https://d.android.com/reference/android/content/res/Configuration.html#screenLayout
880    optional int32 screenLayout = 13;
881
882    // Current width of the available screen space, in dp units.
883    // See: https://d.android.com/reference/android/content/res/Configuration.html#screenWidthDp
884    optional int32 screenWidthDp = 14;
885
886    // The smallest screen size an application will see in normal operation.
887    // This is the smallest value of both screenWidthDp and screenHeightDp
888    // in portrait and landscape.
889    // See: https://d.android.com/reference/android/content/res/Configuration.html#smallestScreenWidthDp
890    optional int32 smallestScreenWidthDp = 15;
891
892    // The type of touch screen attached to the device.
893    // See: https://d.android.com/reference/android/content/res/Configuration.html#touchscreen
894    optional int32 touchscreen = 16;
895
896    // Bit mask of the ui mode.
897    // Contains information about the overall ui mode of the device.
898    // Eg: NORMAL, DESK, CAR, TELEVISION, WATCH, VR_HEADSET
899    // Also contains information about whether the device is in night mode.
900    // See: https://d.android.com/reference/android/content/res/Configuration.html#uiMode
901    optional int32 uiMode = 17;
902}
903
904
905/**
906 * Logs changes in the connection state of the mobile radio.
907 *
908 * Logged from:
909 *    frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
910 */
911message MobileConnectionStateChanged {
912    // States are from the state machine DataConnection.java.
913    enum State {
914        UNKNOWN = 0;
915        // The connection is inactive, or disconnected.
916        INACTIVE = 1;
917        // The connection is being activated, or connecting.
918        ACTIVATING = 2;
919        // The connection is active, or connected.
920        ACTIVE = 3;
921        // The connection is disconnecting.
922        DISCONNECTING = 4;
923        // The connection is disconnecting after creating a connection.
924        DISCONNECTION_ERROR_CREATING_CONNECTION = 5;
925    }
926    optional State state  = 1;
927    // For multi-sim phones, this distinguishes between the sim cards.
928    optional int32 sim_slot_index = 2;
929    // Used to identify the connection. Starts at 0 and increments by 1 for
930    // every new network created. Resets whenever the device reboots.
931    optional int32 data_connection_id = 3;
932    // A bitmask for the capabilities of this connection.
933    // Eg. DEFAULT (internet), MMS, SUPL, DUN, IMS.
934    // Default value (if we have no information): 0
935    optional int64 capabilities = 4;
936    // If this connection has internet.
937    // This just checks if the DEFAULT bit of capabilities is set.
938    optional bool has_internet = 5;
939}
940
941/**
942 * Logs changes in mobile radio technology. eg: LTE, EDGE, CDMA.
943 *
944 * Logged from:
945 *   frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java
946 */
947message MobileRadioTechnologyChanged {
948    optional android.telephony.NetworkTypeEnum state = 1;
949    // For multi-sim phones, this distinguishes between the sim cards.
950    optional int32 sim_slot_index = 2;
951}
952
953/**
954 * Logs the VID and PID of any connected USB devices.
955 *
956 * Notes if any Audio, HID (input buttons/mouse/keyboard), or Storage interfaces are present.
957 *
958 * Logged by Vendor.
959 */
960message UsbDeviceAttached {
961    optional int32 vid = 1;
962    optional int32 pid = 2;
963    optional bool has_audio = 3;
964    optional bool has_hid = 4;
965    optional bool has_storage = 5;
966}
967
968
969/**
970 * Logs when Bluetooth is enabled and disabled.
971 *
972 * Logged from:
973 *   services/core/java/com/android/server/BluetoothManagerService.java
974 */
975message BluetoothEnabledStateChanged {
976    repeated AttributionNode attribution_node = 1;
977    // Whether or not bluetooth is enabled on the device.
978    enum State {
979        UNKNOWN = 0;
980        ENABLED = 1;
981        DISABLED = 2;
982    }
983    optional State state = 2;
984    // The reason for being enabled/disabled.
985    // Eg. Airplane mode, crash, application request.
986    optional android.bluetooth.EnableDisableReasonEnum reason = 3;
987    // If the reason is an application request, this will be the package name.
988    optional string pkgName = 4;
989}
990
991/**
992 * Logs when a Bluetooth device connects and disconnects.
993 *
994 * Logged from:
995 *    packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterProperties.java
996 */
997message BluetoothConnectionStateChanged {
998    // The state of the connection.
999    // Eg: CONNECTING, CONNECTED, DISCONNECTING, DISCONNECTED.
1000    optional android.bluetooth.ConnectionStateEnum state = 1;
1001    // An identifier that can be used to match connect and disconnect events.
1002    // Currently is last two bytes of a hash of a device level ID and
1003    // the mac address of the bluetooth device that is connected.
1004    optional int32 obfuscated_id = 2;
1005    // The profile that is connected. Eg. GATT, A2DP, HEADSET.
1006    // From android.bluetooth.BluetoothAdapter.java
1007    optional int32 bt_profile = 3;
1008}
1009
1010/**
1011 * Logs when something is plugged into or removed from the USB-C connector.
1012 *
1013 * Logged from:
1014 *  Vendor USB HAL.
1015 */
1016message UsbConnectorStateChanged {
1017    enum State {
1018      DISCONNECTED = 0;
1019      CONNECTED = 1;
1020    }
1021    optional State state = 1;
1022}
1023
1024/**
1025 * Logs the reported speaker impedance.
1026 *
1027 * Logged from:
1028 *  Vendor audio implementation.
1029 */
1030message SpeakerImpedanceReported {
1031    optional int32 speaker_location = 1;
1032    optional int32 impedance = 2;
1033}
1034
1035/**
1036 * Logs the report of a failed hardware.
1037 *
1038 * Logged from:
1039 *  Vendor HALs.
1040 *
1041 */
1042message HardwareFailed {
1043    enum HardwareType {
1044        HARDWARE_FAILED_UNKNOWN = 0;
1045        HARDWARE_FAILED_MICROPHONE = 1;
1046        HARDWARE_FAILED_CODEC = 2;
1047        HARDWARE_FAILED_SPEAKER = 3;
1048        HARDWARE_FAILED_FINGERPRINT = 4;
1049    }
1050    optional HardwareType hardware_type = 1;
1051
1052    /* hardware_location allows vendors to differentiate between multiple instances of
1053    * the same hardware_type.  The specific locations are vendor defined integers,
1054    * referring to board-specific numbering schemes.
1055    */
1056    optional int32 hardware_location = 2;
1057
1058    /* failure_code is specific to the HardwareType of the failed hardware.
1059     * It should use the enum values defined below.
1060     */
1061    enum MicrophoneFailureCode {
1062        MICROPHONE_FAILURE_COMPLETE = 0;
1063    }
1064    enum CodecFailureCode {
1065        CODEC_FAILURE_COMPLETE = 0;
1066    }
1067    enum SpeakerFailureCode {
1068        SPEAKER_FAILURE_COMPLETE = 0;
1069        SPEAKER_FAILURE_HIGH_Z = 1;
1070        SPEAKER_FAILURE_SHORT = 2;
1071    }
1072    enum FingerprintFailureCode {
1073        FINGERPRINT_FAILURE_COMPLETE = 0;
1074        FINGERPRINT_SENSOR_BROKEN = 1;
1075        FINGERPRINT_TOO_MANY_DEAD_PIXELS = 2;
1076    }
1077    optional int32 failure_code = 3;
1078}
1079
1080/**
1081 * Log an event when the device has been physically dropped.
1082 * Reported from the /vendor partition.
1083 */
1084message PhysicalDropDetected {
1085    // Confidence that the event was actually a drop, 0 -> 100
1086    optional int32 confidence_pctg = 1;
1087    // Peak acceleration of the drop, in 1/1000s of a g.
1088    optional int32 accel_peak_thousandths_g = 2;
1089    // Duration of freefall in ms
1090    optional int32 freefall_time_millis = 3;
1091}
1092
1093/**
1094 * Log bucketed battery charge cycles.
1095 *
1096 * Each bucket represents cycles of the battery past
1097 * a given charge point.  For example, bucket 1 is the
1098 * lowest 1/8th of the battery, and bucket 8 is 100%.
1099 *
1100 * Logged from:
1101 * /sys/class/power_supply/bms/cycle_count, via Vendor.
1102 */
1103message ChargeCyclesReported {
1104    optional int32 cycle_bucket_1 = 1;
1105    optional int32 cycle_bucket_2 = 2;
1106    optional int32 cycle_bucket_3 = 3;
1107    optional int32 cycle_bucket_4 = 4;
1108    optional int32 cycle_bucket_5 = 5;
1109    optional int32 cycle_bucket_6 = 6;
1110    optional int32 cycle_bucket_7 = 7;
1111    optional int32 cycle_bucket_8 = 8;
1112}
1113
1114/**
1115 * Logs the duration of a davey (jank of >=700ms) when it occurs
1116 *
1117 * Logged from:
1118 *   frameworks/base/libs/hwui/JankTracker.cpp
1119 */
1120message DaveyOccurred {
1121    // The UID that logged this atom.
1122    optional int32 uid = 1 [(is_uid) = true];
1123
1124    // Amount of time it took to render the frame. Should be >=700ms.
1125    optional int64 jank_duration_millis = 2;
1126}
1127
1128/**
1129 * Logs phone signal strength changes.
1130 *
1131 * Logged from:
1132 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
1133 */
1134message PhoneSignalStrengthChanged {
1135    // Signal strength, from frameworks/base/core/proto/android/telephony/enums.proto.
1136    optional android.telephony.SignalStrengthEnum signal_strength = 1;
1137}
1138
1139/**
1140 * Logs that a setting was updated.
1141 * Logged from:
1142 *   frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
1143 * The tag and is_default allow resetting of settings to default values based on the specified
1144 * tag. See Settings#putString(ContentResolver, String, String, String, boolean) for more details.
1145 */
1146message SettingChanged {
1147    // The name of the setting.
1148    optional string setting = 1;
1149
1150    // The change being imposed on this setting. May represent a number, eg "3".
1151    optional string value = 2;
1152
1153    // The new value of this setting. For most settings, this is same as value. For some settings,
1154    // value is +X or -X where X represents an element in a set. For example, if the previous value
1155    // is A,B,C and value is -B, then new_value is A,C and prev_value is A,B,C.
1156    // The +/- feature is currently only used for location_providers_allowed.
1157    optional string new_value = 3;
1158
1159    // The previous value of this setting.
1160    optional string prev_value = 4;
1161
1162    // The tag used with the is_default for resetting sets of settings. This is generally null.
1163    optional string tag = 5;
1164
1165    // True if this setting with tag should be resettable.
1166    optional bool is_default = 6;
1167
1168    // The associated user (for multi-user feature). Defined in android/os/UserHandle.java
1169    optional int32 user = 7;
1170
1171    enum ChangeReason {
1172        UPDATED = 1; // Updated can be an insertion or an update.
1173        DELETED = 2;
1174    }
1175    optional ChangeReason reason = 8;
1176}
1177
1178/**
1179 * Logs activity going to foreground or background
1180 *
1181 * Logged from:
1182  *   frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java
1183 */
1184message ActivityForegroundStateChanged {
1185    optional int32 uid = 1 [(is_uid) = true];
1186    optional string pkg_name = 2;
1187    optional string class_name = 3;
1188
1189    enum State {
1190        BACKGROUND = 0;
1191        FOREGROUND = 1;
1192    }
1193    optional State state = 4;
1194}
1195
1196/**
1197 * Logs when an app crashes.
1198 * Logged from:
1199 *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1200 */
1201message AppCrashOccurred {
1202    optional int32 uid = 1 [(is_uid) = true];
1203
1204    optional string event_type = 2;
1205
1206    // The name of the process.
1207    // system_server if it is not by an app
1208    optional string process_name = 3;
1209
1210    // The pid if available. -1 means not available.
1211    optional sint32 pid = 4;
1212
1213    optional string package_name = 5;
1214
1215    enum InstantApp {
1216        UNAVAILABLE = 0;
1217        FALSE = 1;
1218        TRUE = 2;
1219    }
1220    optional InstantApp is_instant_app = 6;
1221
1222    enum ForegroundState {
1223        UNKNOWN = 0;
1224        BACKGROUND = 1;
1225        FOREGROUND = 2;
1226    }
1227    optional ForegroundState foreground_state = 7;
1228}
1229
1230/**
1231 * Logs when a WTF (What a Terrible Failure) happened.
1232 * Logged from:
1233 *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1234 */
1235message WTFOccurred {
1236    optional int32 uid = 1 [(is_uid) = true];
1237
1238    optional string tag = 2;
1239
1240    // The name of the process.
1241    // system_server if it is not by an app
1242    optional string process_name = 3;
1243
1244    // The pid if available. -1 means not available.
1245    optional sint32 pid = 4;
1246}
1247
1248/**
1249 * Logs when system server reports low memory.
1250 * Logged from:
1251 *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1252 */
1253message LowMemReported {
1254}
1255
1256/**
1257 * Logs when an app ANR (App Not Responding) occurs.
1258 * Logged from:
1259 *      frameworks/base/services/core/java/com/android/server/am/AppErrors.java
1260 */
1261message ANROccurred {
1262    optional int32 uid = 1 [(is_uid) = true];
1263
1264    optional string process_name = 2;
1265
1266    optional string short_component_name = 3;
1267
1268    optional string reason = 4;
1269
1270    enum InstantApp {
1271        UNAVAILABLE = 0;
1272        FALSE = 1;
1273        TRUE = 2;
1274    }
1275    optional InstantApp is_instant_app = 5;
1276
1277    enum ForegroundState {
1278        UNKNOWN = 0;
1279        BACKGROUND = 1;
1280        FOREGROUND = 2;
1281    }
1282    optional ForegroundState foreground_state = 6;
1283}
1284
1285/*
1286 * Allows other apps to push events into statsd.
1287 * Logged from:
1288 *      frameworks/base/core/java/android/util/StatsLog.java
1289 */
1290message AppBreadcrumbReported {
1291    // The uid of the application that sent this custom atom.
1292    optional int32 uid = 1 [(is_uid) = true];
1293
1294    // An arbitrary label chosen by the developer. For Android P, the label should be in [0, 16).
1295    optional int32 label = 2;
1296
1297    // Allows applications to easily use a custom event as start/stop boundaries (ie, define custom
1298    // predicates for the metrics).
1299    enum State {
1300        UNKNOWN = 0;
1301        UNSPECIFIED = 1;  // For events that are known to not represent START/STOP.
1302        STOP = 2;
1303        START = 3;
1304    }
1305    optional State state = 3;
1306}
1307
1308/**
1309 * Logs when statsd detects an anomaly.
1310 *
1311 * Logged from:
1312 *   frameworks/base/cmds/statsd/src/anomaly/AnomalyTracker.cpp
1313 */
1314message AnomalyDetected {
1315    // Uid that owns the config whose anomaly detection alert fired.
1316    optional int32 config_uid = 1 [(is_uid) = true];
1317
1318    // Id of the config whose anomaly detection alert fired.
1319    optional int64 config_id = 2;
1320
1321    // Id of the alert (i.e. name of the anomaly that was detected).
1322    optional int64 alert_id = 3;
1323}
1324
1325message AppStartOccurred {
1326    // The uid if available. -1 means not available.
1327    optional int32 uid = 1 [(is_uid) = true];
1328
1329    // The app package name.
1330    optional string pkg_name = 2;
1331
1332    enum TransitionType {
1333        UNKNOWN = 0;
1334        WARM = 1;
1335        HOT = 2;
1336        COLD = 3;
1337    }
1338    // The transition type.
1339    optional TransitionType type = 3;
1340
1341    // The activity name.
1342    optional string activity_name = 4;
1343
1344    // The name of the calling app. Empty if not set.
1345    optional string calling_pkg_name = 5;
1346
1347    // Whether the app is an instant app.
1348    optional bool is_instant_app = 6;
1349
1350    // Device uptime when activity started.
1351    optional int64 activity_start_millis = 7;
1352
1353    optional android.app.AppTransitionReasonEnum reason = 8;
1354
1355    optional int32 transition_delay_millis = 9;
1356    // -1 if not set.
1357    optional int32 starting_window_delay_millis = 10;
1358    // -1 if not set.
1359    optional int32 bind_application_delay_millis = 11;
1360    optional int32 windows_drawn_delay_millis = 12;
1361
1362    // Empty if not set.
1363    optional string launch_token = 13;
1364
1365    // The compiler filter used when when the package was optimized.
1366    optional int32 package_optimization_compilation_filter = 14;
1367
1368    // The reason why the package was optimized.
1369    optional int32 package_optimization_compilation_reason = 15;
1370}
1371
1372message AppStartCanceled {
1373    // The uid if available. -1 means not available.
1374    optional int32 uid = 1 [(is_uid) = true];
1375
1376    // The app package name.
1377    optional string pkg_name = 2;
1378
1379    enum TransitionType {
1380        UNKNOWN = 0;
1381        WARM = 1;
1382        HOT = 2;
1383        COLD = 3;
1384    }
1385    // The transition type.
1386    optional TransitionType type = 3;
1387
1388    // The activity name.
1389    optional string activity_name = 4;
1390}
1391
1392message AppStartFullyDrawn {
1393    // The uid if available. -1 means not available.
1394    optional int32 uid = 1 [(is_uid) = true];
1395
1396    // The app package name.
1397    optional string pkg_name = 2;
1398
1399    enum TransitionType {
1400        UNKNOWN = 0;
1401        WITH_BUNDLE = 1;
1402        WITHOUT_BUNDLE = 2;
1403    }
1404    // The transition type.
1405    optional TransitionType type = 3;
1406
1407    // The activity name.
1408    optional string activity_name = 4;
1409
1410    optional bool transition_process_running = 5;
1411
1412    // App startup time (until call to Activity#reportFullyDrawn()).
1413    optional int64 app_startup_time_millis = 6;
1414}
1415
1416/**
1417 * Logs a picture-in-picture action
1418 * Logged from:
1419 *      frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1420 *      frameworks/base/services/core/java/com/android/server/am/ActivityStackSupervisor.java
1421 *      frameworks/base/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
1422 */
1423message PictureInPictureStateChanged {
1424    // -1 if it is not available
1425    optional int32 uid = 1 [(is_uid) = true];
1426
1427    optional string short_name = 2;
1428
1429    enum State {
1430        ENTERED = 1;
1431        EXPANDED_TO_FULL_SCREEN = 2;
1432        MINIMIZED = 3;
1433        DISMISSED = 4;
1434    }
1435    optional State state = 3;
1436}
1437
1438/**
1439 * Logs overlay action
1440 * Logged from:
1441 *     services/core/java/com/android/server/wm/Session.java
1442 */
1443message OverlayStateChanged {
1444    optional int32 uid = 1 [(is_uid) = true];
1445
1446    optional string package_name = 2;
1447
1448    optional bool using_alert_window = 3;
1449
1450    enum State {
1451        ENTERED = 1;
1452        EXITED = 2;
1453    }
1454    optional State state = 4;
1455}
1456
1457/*
1458 * Logs foreground service starts and stops.
1459 * Note that this is not when a service starts or stops, but when it is
1460 * considered foreground.
1461 * Logged from
1462 *     //frameworks/base/services/core/java/com/android/server/am/ActiveServices.java
1463 */
1464message ForegroundServiceStateChanged {
1465    optional int32 uid = 1 [(is_uid) = true];
1466    // package_name + "/" + class_name
1467    optional string short_name = 2;
1468
1469    enum State {
1470        ENTER = 1;
1471        EXIT = 2;
1472    }
1473    optional State state = 3;
1474}
1475
1476/**
1477 * Logs creation or removal of an isolated uid. Isolated uid's are temporary uid's to sandbox risky
1478 * behavior in its own uid. However, the metrics of these isolated uid's almost always should be
1479 * attributed back to the parent (host) uid. One example is Chrome.
1480 *
1481 * Logged from:
1482 *   frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
1483 */
1484message IsolatedUidChanged {
1485    // The host UID. Generally, we should attribute metrics from the isolated uid to the host uid.
1486    // NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd.
1487    optional int32 parent_uid = 1;
1488
1489    optional int32 isolated_uid = 2;
1490
1491    // We expect an isolated uid to be removed before if it's used for another parent uid.
1492    enum Event {
1493        REMOVED = 0;
1494        CREATED = 1;
1495    }
1496    optional Event event = 3;
1497}
1498
1499/*
1500 * Logs the reception of an incoming network packet causing the main system to wake up for
1501 * processing that packet. These events are notified by the kernel via Netlink NFLOG to Netd
1502 * and processed by WakeupController.cpp.
1503 */
1504message PacketWakeupOccurred {
1505    // The uid owning the socket into which the packet was delivered, or -1 if the packet was
1506    // delivered nowhere.
1507    optional int32 uid = 1 [(is_uid) = true];
1508    // The interface name on which the packet was received.
1509    optional string iface = 2;
1510    // The ethertype value of the packet.
1511    optional int32 ethertype = 3;
1512    // String representation of the destination MAC address of the packet.
1513    optional string destination_hardware_address = 4;
1514    // String representation of the source address of the packet if this was an IP packet.
1515    optional string source_ip = 5;
1516    // String representation of the destination address of the packet if this was an IP packet.
1517    optional string destination_ip = 6;
1518    // The value of the protocol field if this was an IPv4 packet or the value of the Next Header
1519    // field if this was an IPv6 packet. The range of possible values is the same for both IP
1520    // families.
1521    optional int32 ip_next_header = 7;
1522    // The source port if this was a TCP or UDP packet.
1523    optional int32 source_port = 8;
1524    // The destination port if this was a TCP or UDP packet.
1525    optional int32 destination_port = 9;
1526}
1527
1528/*
1529 * Logs the memory stats for an app on startup.
1530 * Logged from:
1531 *     frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1532 */
1533message AppStartMemoryStateCaptured {
1534    // The uid if available. -1 means not available.
1535    optional int32 uid = 1 [(is_uid) = true];
1536
1537    // The process name.
1538    optional string process_name = 2;
1539
1540    // The activity name.
1541    optional string activity_name = 3;
1542
1543    // # of page-faults
1544    optional int64 pgfault = 4;
1545
1546    // # of major page-faults
1547    optional int64 pgmajfault = 5;
1548
1549    // RSS
1550    optional int64 rss_in_bytes = 6;
1551
1552    // CACHE
1553    optional int64 cache_in_bytes = 7;
1554
1555    // SWAP
1556    optional int64 swap_in_bytes = 8;
1557}
1558
1559/*
1560 * Logs the change in Low Memory Killer Daemon (LMKD) state which is used as start/stop boundaries
1561 * for LMK event.
1562 * Logged from:
1563 *      system/core/lmkd/lmkd.c
1564 */
1565message LmkStateChanged {
1566    enum State {
1567        UNKNOWN = 0;
1568        START = 1;
1569        STOP = 2;
1570    }
1571    optional State state = 1;
1572}
1573
1574/*
1575 * Logs the event when Low Memory Killer Daemon (LMKD) kills a process to reduce memory pressure.
1576 * Logged from:
1577 *      system/core/lmkd/lmkd.c
1578 */
1579message LmkKillOccurred {
1580    // The uid if available. -1 means not available.
1581    optional int32 uid = 1 [(is_uid) = true];
1582
1583    // The process name.
1584    optional string process_name = 2;
1585
1586    // oom adj score.
1587    optional int32 oom_score = 3;
1588
1589    // # of page-faults
1590    optional int64 pgfault = 4;
1591
1592    // # of major page-faults
1593    optional int64 pgmajfault = 5;
1594
1595    // RSS
1596    optional int64 rss_in_bytes = 6;
1597
1598    // CACHE
1599    optional int64 cache_in_bytes = 7;
1600
1601    // SWAP
1602    optional int64 swap_in_bytes = 8;
1603}
1604
1605/*
1606 * Logs when the ActivityManagerService detects that an app died.
1607 *
1608 * Logged from:
1609 *   frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
1610 */
1611message AppDied {
1612    // timestamp(elapsedRealtime) of record creation
1613    optional uint64 timestamp_millis = 1 [(stateFieldOption).option = EXCLUSIVE];
1614}
1615
1616//////////////////////////////////////////////////////////////////////
1617// Pulled atoms below this line //
1618//////////////////////////////////////////////////////////////////////
1619
1620/**
1621 * Pulls bytes transferred via wifi (Sum of foreground and background usage).
1622 *
1623 * Pulled from:
1624 *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
1625 */
1626message WifiBytesTransfer {
1627    optional int32 uid = 1 [(is_uid) = true];
1628
1629    optional int64 rx_bytes = 2;
1630
1631    optional int64 rx_packets = 3;
1632
1633    optional int64 tx_bytes = 4;
1634
1635    optional int64 tx_packets = 5;
1636}
1637
1638/**
1639 * Pulls bytes transferred via wifi (separated by foreground and background usage).
1640 *
1641 * Pulled from:
1642 *   StatsCompanionService (using BatteryStats to get which interfaces are wifi)
1643 */
1644message WifiBytesTransferByFgBg {
1645    optional int32 uid = 1 [(is_uid) = true];
1646
1647    // 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats.
1648    optional bool is_foreground = 2;
1649
1650    optional int64 rx_bytes = 3;
1651
1652    optional int64 rx_packets = 4;
1653
1654    optional int64 tx_bytes = 5;
1655
1656    optional int64 tx_packets = 6;
1657}
1658
1659/**
1660 * Pulls bytes transferred via mobile networks (Sum of foreground and background usage).
1661 *
1662 * Pulled from:
1663 *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
1664 */
1665message MobileBytesTransfer {
1666    optional int32 uid = 1 [(is_uid) = true];
1667
1668    optional int64 rx_bytes = 2;
1669
1670    optional int64 rx_packets = 3;
1671
1672    optional int64 tx_bytes = 4;
1673
1674    optional int64 tx_packets = 5;
1675}
1676
1677/**
1678 * Pulls bytes transferred via mobile networks (separated by foreground and background usage).
1679 *
1680 * Pulled from:
1681 *   StatsCompanionService (using BatteryStats to get which interfaces are mobile data)
1682 */
1683message MobileBytesTransferByFgBg {
1684    optional int32 uid = 1 [(is_uid) = true];
1685
1686    // 1 denotes foreground and 0 denotes background. This is called Set in
1687    // NetworkStats.
1688    optional bool is_foreground = 2;
1689
1690    optional int64 rx_bytes = 3;
1691
1692    optional int64 rx_packets = 4;
1693
1694    optional int64 tx_bytes = 5;
1695
1696    optional int64 tx_packets = 6;
1697}
1698
1699/**
1700 * Pulls bytes transferred via bluetooth. It is pulled from Bluetooth controller.
1701 *
1702 * Pulled from:
1703 *   StatsCompanionService
1704 */
1705message BluetoothBytesTransfer {
1706    optional int32 uid = 1 [(is_uid) = true];
1707
1708    optional int64 rx_bytes = 2;
1709
1710    optional int64 tx_bytes = 3;
1711}
1712
1713/**
1714 * Pulls the kernel wakelock durations. This atom is adapted from
1715 * android/internal/os/KernelWakelockStats.java
1716 *
1717 * Pulled from:
1718 *   StatsCompanionService using KernelWakelockReader.
1719 */
1720message KernelWakelock {
1721    optional string name = 1;
1722
1723    optional int32 count = 2;
1724
1725    optional int32 version = 3;
1726
1727    optional int64 time = 4;
1728}
1729
1730/**
1731 * Pulls low power state information. This includes platform and subsystem sleep state information,
1732 * PowerStatePlatformSleepState, PowerStateVoter or PowerStateSubsystemSleepState as defined in
1733 *   hardware/interfaces/power/1.0/types.hal
1734 *   hardware/interfaces/power/1.1/types.hal
1735 */
1736message SubsystemSleepState {
1737    // Subsystem name
1738    optional string subsystem_name = 1;
1739    // For PlatformLowPowerStats (hal 1.0), this is the voter name, which could be empty.
1740    // For SubsystemLowPowerStats (hal 1.1), this is the sleep state name.
1741    optional string subname = 2;
1742    // The number of times it entered, or voted for entering the sleep state
1743    optional uint64 count = 3;
1744    // The length of time spent in, or spent voting for, the sleep state
1745    optional uint64 time_millis = 4;
1746}
1747
1748/**
1749 * Pulls Cpu time per frequency.
1750 * Pulls the time the cpu spend on the frequency index. Frequency index
1751 * starts from highest to lowest. The value should be monotonically
1752 * increasing since boot. However, if there is a cpu
1753 * hotplug event, the value would be reset as well.
1754 */
1755message CpuTimePerFreq {
1756    optional uint32 cluster = 1;
1757    optional uint32 freq_index = 2;
1758    optional uint64 time_millis = 3;
1759}
1760
1761/**
1762 * Pulls Cpu Time Per Uid.
1763 * Note that isolated process uid time should be attributed to host uids.
1764 */
1765message CpuTimePerUid {
1766    optional int32 uid = 1 [(is_uid) = true];
1767    optional uint64 user_time_millis = 2;
1768    optional uint64 sys_time_millis = 3;
1769}
1770
1771/**
1772 * Pulls Cpu Time Per Uid per frequency.
1773 * Note that isolated process uid time should be attributed to host uids.
1774 * For each uid, we order the time by descending frequencies.
1775 */
1776message CpuTimePerUidFreq {
1777    optional int32 uid = 1 [(is_uid) = true];
1778    optional uint32 freq_index = 2;
1779    optional uint64 time_millis = 3;
1780}
1781
1782/**
1783 * Pulls Wifi Controller Activity Energy Info
1784 */
1785message WifiActivityInfo {
1786    // timestamp(wall clock) of record creation
1787    optional uint64 timestamp_millis = 1;
1788    // stack reported state
1789    // TODO: replace this with proto enum
1790    optional int32 stack_state = 2;
1791    // tx time in ms
1792    optional uint64 controller_tx_time_millis = 3;
1793    // rx time in ms
1794    optional uint64 controller_rx_time_millis = 4;
1795    // idle time in ms
1796    optional uint64 controller_idle_time_millis = 5;
1797    // product of current(mA), voltage(V) and time(ms)
1798    optional uint64 controller_energy_used = 6;
1799}
1800
1801/**
1802 * Pulls Modem Activity Energy Info
1803 */
1804message ModemActivityInfo {
1805    // timestamp(wall clock) of record creation
1806    optional uint64 timestamp_millis = 1;
1807    // sleep time in ms.
1808    optional uint64 sleep_time_millis = 2;
1809    // idle time in ms
1810    optional uint64 controller_idle_time_millis = 3;
1811    /**
1812     * Tx power index
1813     * index 0 = tx_power < 0dBm
1814     * index 1 = 0dBm < tx_power < 5dBm
1815     * index 2 = 5dBm < tx_power < 15dBm
1816     * index 3 = 15dBm < tx_power < 20dBm
1817     * index 4 = tx_power > 20dBm
1818     */
1819    // tx time in ms at power level 0
1820    optional uint64 controller_tx_time_pl0_millis = 4;
1821    // tx time in ms at power level 1
1822    optional uint64 controller_tx_time_pl1_millis = 5;
1823    // tx time in ms at power level 2
1824    optional uint64 controller_tx_time_pl2_millis = 6;
1825    // tx time in ms at power level 3
1826    optional uint64 controller_tx_time_pl3_millis = 7;
1827    // tx time in ms at power level 4
1828    optional uint64 controller_tx_time_pl4_millis = 8;
1829    // rx time in ms at power level 5
1830    optional uint64 controller_rx_time_millis = 9;
1831    // product of current(mA), voltage(V) and time(ms)
1832    optional uint64 energy_used = 10;
1833}
1834
1835/**
1836 * Pulls Bluetooth Activity Energy Info
1837 * Note: BluetoothBytesTransfer is pulled at the same time from the controller.
1838 */
1839message BluetoothActivityInfo {
1840    // timestamp(wall clock) of record creation
1841    optional uint64 timestamp_millis = 1;
1842    // bluetooth stack state
1843    optional int32 bluetooth_stack_state = 2;
1844    // tx time in ms
1845    optional uint64 controller_tx_time_millis = 3;
1846    // rx time in ms
1847    optional uint64 controller_rx_time_millis = 4;
1848    // idle time in ms
1849    optional uint64 controller_idle_time_millis = 5;
1850    // product of current(mA), voltage(V) and time(ms)
1851    optional uint64 energy_used = 6;
1852}
1853
1854/*
1855 * Logs the memory stats for a process.
1856 */
1857message ProcessMemoryState {
1858    // The uid if available. -1 means not available.
1859    optional int32 uid = 1 [(is_uid) = true];
1860
1861    // The process name.
1862    optional string process_name = 2;
1863
1864    // oom adj score.
1865    optional int32 oom_score = 3;
1866
1867    // # of page-faults
1868    optional int64 pgfault = 4;
1869
1870    // # of major page-faults
1871    optional int64 pgmajfault = 5;
1872
1873    // RSS
1874    optional int64 rss_in_bytes = 6;
1875
1876    // CACHE
1877    optional int64 cache_in_bytes = 7;
1878
1879    // SWAP
1880    optional int64 swap_in_bytes = 8;
1881}
1882
1883/*
1884 * Elapsed real time from SystemClock.
1885 */
1886message SystemElapsedRealtime {
1887    optional uint64 time_millis = 1;
1888}
1889
1890/*
1891 * Up time from SystemClock.
1892 */
1893message SystemUptime {
1894    // Milliseconds since the system was booted.
1895    // This clock stops when the system enters deep sleep (CPU off, display dark, device waiting
1896    // for external input).
1897    // It is not affected by clock scaling, idle, or other power saving mechanisms.
1898    optional uint64 uptime_millis = 1;
1899}
1900
1901/*
1902 * Reads from /proc/uid_concurrent_active_time which has the format:
1903 * active: X (X is # cores)
1904 * [uid0]: [time-0] [time-1] [time-2] ... (# entries = # cores)
1905 * [uid1]: [time-0] [time-1] [time-2] ... ...
1906 * ...
1907 * Time-N means the CPU time a UID spent running concurrently with N other processes.
1908 * The file contains a monotonically increasing count of time for a single boot.
1909 */
1910message CpuActiveTime {
1911    optional int32 uid = 1 [(is_uid) = true];
1912    optional uint64 time_millis = 2;
1913}
1914
1915/**
1916 * Reads from /proc/uid_concurrent_policy_time which has the format:
1917 * policy0: X policy4: Y (there are X cores on policy0, Y cores on policy4)
1918 * [uid0]: [time-0-0] [time-0-1] ... [time-1-0] [time-1-1] ...
1919 * [uid1]: [time-0-0] [time-0-1] ... [time-1-0] [time-1-1] ...
1920 * ...
1921 * Time-X-Y means the time a UID spent on clusterX running concurrently with Y other processes.
1922 * The file contains a monotonically increasing count of time for a single boot.
1923 */
1924message CpuClusterTime {
1925    optional int32 uid = 1 [(is_uid) = true];
1926    optional int32 cluster_index = 2;
1927    optional uint64 time_millis = 3;
1928}
1929
1930/*
1931 * Pulls free disk space, for data, system partition and temporary directory.
1932 */
1933message DiskSpace {
1934    // available bytes in data partition
1935    optional uint64 data_available_bytes = 1;
1936    // available bytes in system partition
1937    optional uint64 system_available_bytes = 2;
1938    // available bytes in download cache or temp directories
1939    optional uint64 temp_available_bytes = 3;
1940}
1941
1942/**
1943 * Pulls battery coulomb counter, which is the remaining battery charge in uAh.
1944 * Pulled from:
1945 *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
1946 */
1947message RemainingBatteryCapacity {
1948    optional int32 charge_uAh = 1;
1949}
1950
1951/**
1952 * Pulls battery capacity, which is the battery capacity when full in uAh.
1953 * Pulled from:
1954 *   frameworks/base/cmds/statsd/src/external/ResourceHealthManagerPuller.cpp
1955 */
1956message FullBatteryCapacity {
1957    optional int32 capacity_uAh = 1;
1958}
1959
1960/**
1961 * Pulls the temperature of various parts of the device.
1962 * The units are tenths of a degree Celsius. Eg: 30.3C is reported as 303.
1963 *
1964 * Pulled from:
1965 *   frameworks/base/cmds/statsd/src/external/ResourceThermalManagerPuller.cpp
1966 */
1967message Temperature {
1968    // The type of temperature being reported. Eg. CPU, GPU, SKIN, BATTERY.
1969    optional android.os.TemperatureTypeEnum sensor_location = 1;
1970
1971    // The name of the temperature source. Eg. CPU0
1972    optional string sensor_name = 2;
1973
1974    // Temperature in tenths of a degree C.
1975    optional int32 temperature_dC = 3;
1976}
1977