1/* 2 * Copyright (C) 2016 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"; 18option java_multiple_files = true; 19 20package android.os; 21 22import "frameworks/base/core/proto/android/app/job/enums.proto"; 23import "frameworks/base/core/proto/android/os/powermanager.proto"; 24import "frameworks/base/core/proto/android/telephony/enums.proto"; 25import "frameworks/base/core/proto/android/privacy.proto"; 26 27message BatteryStatsProto { 28 option (android.msg_privacy).dest = DEST_AUTOMATIC; 29 30 optional int32 report_version = 1; 31 optional int64 parcel_version = 2; 32 optional string start_platform_version = 3; 33 optional string end_platform_version = 4; 34 repeated UidProto uids = 5; 35 optional SystemProto system = 6; 36} 37 38message ControllerActivityProto { 39 option (android.msg_privacy).dest = DEST_AUTOMATIC; 40 41 // Time (milliseconds) spent in the idle state. 42 optional int64 idle_duration_ms = 1; 43 // Time (milliseconds) spent in the receive state. 44 optional int64 rx_duration_ms = 2; 45 // Total power (mAh) consumed by the controller in all states. The value may 46 // always be 0 if the device doesn't support power calculations. 47 optional int64 power_mah = 3; 48 49 // Represents a transmit level, where each level may draw a different amount 50 // of power. The levels themselves are controller-specific (and may possibly 51 // be device specific...yet to be confirmed). 52 message TxLevel { 53 option (android.msg_privacy).dest = DEST_AUTOMATIC; 54 55 // Transmit level. Higher levels draw more power. 56 optional int32 level = 1; 57 // Time spent in this specific transmit level state. 58 optional int64 duration_ms = 2; 59 } 60 repeated TxLevel tx = 4; 61 62 // Total rail charge consumed by the monitored rails by the controller. The value may 63 // always be 0 if the device doesn't support monitored rail calculations. 64 optional double monitored_rail_charge_mah = 5; 65} 66 67message SystemProto { 68 option (android.msg_privacy).dest = DEST_AUTOMATIC; 69 70 message Battery { 71 option (android.msg_privacy).dest = DEST_AUTOMATIC; 72 73 // Wall clock time when the data collection started. 74 // In case of device time manually reset by users: 75 // start_clock_time_ms keeps the same value in the current collection 76 // period and changes for later collection periods. 77 optional int64 start_clock_time_ms = 1; 78 // #times the device has been started since start_clock_time_millis. 79 optional int64 start_count = 2; 80 // Total realtime duration (= SINCE_UNPLUGGED battery_realtime_millis.) 81 optional int64 total_realtime_ms = 3; 82 optional int64 total_uptime_ms = 4; 83 // Realtime duration on battery. 84 optional int64 battery_realtime_ms = 5; 85 // Uptime duration (i.e., not suspend). 86 // Uptime is anytime the CPUs were on. The radio and Wifi chip 87 // can be running while the CPUs are off. 88 optional int64 battery_uptime_ms = 6; 89 // Total realtime duration measured with screen off or dozing. 90 optional int64 screen_off_realtime_ms = 7; 91 // Total uptime duration measured with screen off or dozing. 92 optional int64 screen_off_uptime_ms = 8; 93 // Total time the screen was dozing while the device was running on battery. 94 // For historical reasons, screen_doze_duration_msec is a subset of 95 // screen_off_realtime_msec. 96 optional int64 screen_doze_duration_ms = 9; 97 // The estimated real battery capacity, which may be less than the declared 98 // battery capacity (for example, because of battery aging). This field is 99 // less reliable than min(max)_learned_battery_capacity_uah, use those two 100 // fields whenever possible. 101 optional int64 estimated_battery_capacity_mah = 10; 102 // The minimum learned battery capacity in uAh. 103 optional int64 min_learned_battery_capacity_uah = 11; 104 // The maximum learned battery capacity in uAh. 105 optional int64 max_learned_battery_capacity_uah = 12; 106 }; 107 optional Battery battery = 1; 108 109 message BatteryDischarge { 110 option (android.msg_privacy).dest = DEST_AUTOMATIC; 111 112 // Discharged battery percentage points since the stats were last reset 113 // after charging (lower bound approximation). 114 optional int32 lower_bound_since_charge = 1; 115 // Upper bound approximation. 116 optional int32 upper_bound_since_charge = 2; 117 // Discharged points while screen is on. 118 optional int32 screen_on_since_charge = 3; 119 // Discharged points while screen is off. 120 optional int32 screen_off_since_charge = 4; 121 // Discharged points while screen was dozing. For historical reasons, 122 // screen_doze_since_charge is a subset of screen_off_since_charge. 123 optional int32 screen_doze_since_charge = 5; 124 // Total amount of battery discharged in mAh. This will only be non-zero for 125 // devices that report battery discharge via a coulomb counter. 126 optional int64 total_mah = 6; 127 // Total amount of battery discharged while the screen was off in mAh. 128 // This will only be non-zero for devices that report battery discharge 129 // via a coulomb counter. 130 optional int64 total_mah_screen_off = 7; 131 // Total amount of battery discharged while the screen was dozing in mAh. 132 // This will only be non-zero for devices that report battery discharge 133 // via a coulomb counter. For historical reasons, total_mah_screen_doze is 134 // a subset of total_mah_screen_off. 135 optional int64 total_mah_screen_doze = 8; 136 // Total amount of battery discharged in mAh while the device was in light doze mode. 137 // This will only be non-zero for devices that report battery discharge 138 // via a coulomb counter. 139 optional int64 total_mah_light_doze = 9; 140 // Total amount of battery discharged in mAh while the device was in deep doze mode. 141 // This will only be non-zero for devices that report battery discharge 142 // via a coulomb counter. 143 optional int64 total_mah_deep_doze = 10; 144 }; 145 optional BatteryDischarge battery_discharge = 2; 146 147 oneof time_remaining { 148 // Approximation for how much time remains until the battery is fully 149 // charged. The device will print -1 if there wasn't enough data to 150 // calculate an estimate, or if the battery is currently discharging. 151 int64 charge_time_remaining_ms = 3; 152 // Approximation for how much time remains until the battery is fully 153 // discharged. The device will print -1 if there wasn't enough data to 154 // calculate an estimate, or if the battery is currently charging. 155 int64 discharge_time_remaining_ms = 4; 156 } 157 158 // BatteryLevelStep tracks data for which conditions were continuously held for 159 // the entire duration. Field for which the conditions were not consistent 160 // for the entire duration should be marked MIXED. 161 message BatteryLevelStep { 162 option (android.msg_privacy).dest = DEST_AUTOMATIC; 163 164 // How long the battery was at the current level. 165 optional int64 duration_ms = 1; 166 // Battery level 167 optional int32 level = 2; 168 169 // State of the display. A special enum is used rather than 170 // DisplayProto.State because a MIXED value needs to be in the enum, and 171 // batterystats doesn't care about all of the different display states. 172 enum DisplayState { 173 DS_MIXED = 0; 174 DS_ON = 1; 175 DS_OFF = 2; 176 DS_DOZE = 3; 177 DS_DOZE_SUSPEND = 4; 178 // Any display state error that comes through should be sent to hackbod@. 179 DS_ERROR = 5; 180 } 181 // The state of the display for the entire battery level step. MIXED is used 182 // if there were multiple states for this step. 183 optional DisplayState display_state = 3; 184 185 // Indicates status in power save mode. 186 enum PowerSaveMode { 187 PSM_MIXED = 0; 188 PSM_ON = 1; 189 PSM_OFF = 2; 190 } 191 // Battery Saver mode for the entire battery level step. MIXED is used 192 // if there were multiple states for this step. 193 optional PowerSaveMode power_save_mode = 4; 194 195 // Indicates status in idle mode. 196 enum IdleMode { 197 IM_MIXED = 0; 198 IM_ON = 2; 199 IM_OFF = 3; 200 } 201 // Doze mode for the entire battery level step. MIXED is used if there were 202 // multiple states for this step. 203 optional IdleMode idle_mode = 5; 204 }; 205 // Battery level steps when the device was charging. 206 repeated BatteryLevelStep charge_step = 5; 207 // Battery level steps when the device was discharging. 208 repeated BatteryLevelStep discharge_step = 6; 209 210 // All CPU frequencies of the device. 211 repeated int64 cpu_frequency = 7; 212 213 message DataConnection { 214 option (android.msg_privacy).dest = DEST_AUTOMATIC; 215 oneof type { 216 android.telephony.NetworkTypeEnum name = 1; 217 // If is_none is not set, then the name is a valid network type. 218 bool is_none = 2; 219 } 220 optional TimerProto total = 3; 221 }; 222 repeated DataConnection data_connection = 8; 223 224 optional ControllerActivityProto global_bluetooth_controller = 9; 225 optional ControllerActivityProto global_modem_controller = 10; 226 optional ControllerActivityProto global_wifi_controller = 11; 227 228 message GlobalNetwork { 229 option (android.msg_privacy).dest = DEST_AUTOMATIC; 230 231 // Total Bytes received on mobile connections. 232 optional int64 mobile_bytes_rx = 1; 233 // Total Bytes transmitted on mobile connections. 234 optional int64 mobile_bytes_tx = 2; 235 // Total Bytes received on wifi connections. 236 optional int64 wifi_bytes_rx = 3; 237 // Total Bytes transmitted on wifi connections. 238 optional int64 wifi_bytes_tx = 4; 239 // Total Packets received on mobile connections. 240 optional int64 mobile_packets_rx = 5; 241 // Total Packets transmitted on mobile connections. 242 optional int64 mobile_packets_tx = 6; 243 // Total Packets received on wifi connections. 244 optional int64 wifi_packets_rx = 7; 245 // Total Packets transmitted on wifi connections. 246 optional int64 wifi_packets_tx = 8; 247 // Total Bytes received on bluetooth connections. 248 optional int64 bt_bytes_rx = 9; 249 // Total Bytes transmitted on bluetooth connections. 250 optional int64 bt_bytes_tx = 10; 251 }; 252 optional GlobalNetwork global_network = 12; 253 254 message GlobalWifi { 255 option (android.msg_privacy).dest = DEST_AUTOMATIC; 256 257 // The amount of time that wifi has been on while the device was running on 258 // battery. 259 optional int64 on_duration_ms = 1; 260 // The amount of time that wifi has been on and the driver has been in the 261 // running state while the device was running on battery. 262 optional int64 running_duration_ms = 2; 263 } 264 optional GlobalWifi global_wifi = 13; 265 266 // Kernel wakelock metrics are only recorded when the device is unplugged 267 // *and* the screen is off. 268 message KernelWakelock { 269 option (android.msg_privacy).dest = DEST_AUTOMATIC; 270 271 optional string name = 1; 272 // Kernel wakelock stats aren't apportioned across all kernel wakelocks (as 273 // app wakelocks stats are). 274 optional TimerProto total = 2; 275 // The kernel doesn't have the data to enable printing out current and max 276 // durations. 277 }; 278 repeated KernelWakelock kernel_wakelock = 14; 279 280 message Misc { 281 option (android.msg_privacy).dest = DEST_AUTOMATIC; 282 283 optional int64 screen_on_duration_ms = 1; 284 optional int64 phone_on_duration_ms = 2; 285 optional int64 full_wakelock_total_duration_ms = 3; 286 // The total elapsed time that a partial wakelock was held. This duration 287 // does not double count wakelocks held at the same time. 288 optional int64 partial_wakelock_total_duration_ms = 4; 289 optional int64 mobile_radio_active_duration_ms = 5; 290 // The time that is the difference between the mobile radio time we saw 291 // based on the elapsed timestamp when going down vs. the given time stamp 292 // from the radio. 293 optional int64 mobile_radio_active_adjusted_time_ms = 6; 294 optional int32 mobile_radio_active_count = 7; 295 // The amount of time that the mobile network has been active (in a high 296 // power state) but not being able to blame on an app. 297 optional int32 mobile_radio_active_unknown_duration_ms = 8; 298 // Total amount of time the device was in the interactive state. 299 optional int64 interactive_duration_ms = 9; 300 optional int64 battery_saver_mode_enabled_duration_ms = 10; 301 optional int32 num_connectivity_changes = 11; 302 // Amount of time the device was in deep Doze. 303 optional int64 deep_doze_enabled_duration_ms = 12; 304 // How many times the device went into deep Doze mode. 305 optional int32 deep_doze_count = 13; 306 // Amount of time the device was idling in deep Doze. Idling time 307 // encompasses "doze" time and the maintenance windows that allow apps to 308 // operate. 309 optional int64 deep_doze_idling_duration_ms = 14; 310 // How many times the device idling for deep Doze mode. 311 optional int32 deep_doze_idling_count = 15; 312 optional int64 longest_deep_doze_duration_ms = 16; 313 // Amount of time the device was in Doze Light. 314 optional int64 light_doze_enabled_duration_ms = 17; 315 // How many times the device went into Doze Light mode. 316 optional int32 light_doze_count = 18; 317 // Amount of time the device was idling in Doze Light. Idling time 318 // encompasses "doze" time and the maintenance windows that allow apps to 319 // operate. 320 optional int64 light_doze_idling_duration_ms = 19; 321 // How many times the device idling for Doze Light mode. 322 optional int32 light_doze_idling_count = 20; 323 optional int64 longest_light_doze_duration_ms = 21; 324 } 325 optional Misc misc = 15; 326 327 message PhoneSignalStrength { 328 option (android.msg_privacy).dest = DEST_AUTOMATIC; 329 330 optional android.telephony.SignalStrengthEnum name = 1; 331 optional TimerProto total = 2; 332 }; 333 repeated PhoneSignalStrength phone_signal_strength = 16; 334 335 message PowerUseItem { 336 option (android.msg_privacy).dest = DEST_AUTOMATIC; 337 338 enum Sipper { 339 UNKNOWN_SIPPER = 0; 340 IDLE = 1; 341 CELL = 2; 342 PHONE = 3; 343 WIFI = 4; 344 BLUETOOTH = 5; 345 FLASHLIGHT = 6; 346 SCREEN = 7; 347 USER = 8; 348 UNACCOUNTED = 9; 349 OVERCOUNTED = 10; 350 CAMERA = 11; 351 MEMORY = 12; 352 AMBIENT_DISPLAY = 13; 353 }; 354 optional Sipper name = 1; 355 // UID, only valid for the USER sipper. 356 optional int32 uid = 2; 357 // Estimated power use in mAh. 358 optional double computed_power_mah = 3; 359 // Starting in Oreo, Battery Settings has two modes to display the battery 360 // info. The first is "app usage list". In this mode, items with should_hide 361 // enabled are hidden. 362 optional bool should_hide = 4; 363 // Smeared power from screen usage. Screen usage power is split and smeared 364 // among apps, based on activity time. 365 optional double screen_power_mah = 5; 366 // Smeared power using proportional method. Power usage from hidden sippers 367 // is smeared to all apps proportionally (except for screen usage). 368 optional double proportional_smear_mah = 6; 369 }; 370 repeated PowerUseItem power_use_item = 17; 371 372 message PowerUseSummary { 373 option (android.msg_privacy).dest = DEST_AUTOMATIC; 374 375 optional double battery_capacity_mah = 1; 376 optional double computed_power_mah = 2; 377 // Lower bound of actual power drained. 378 optional double min_drained_power_mah = 3; 379 // Upper bound of actual power drained. 380 optional double max_drained_power_mah = 4; 381 }; 382 optional PowerUseSummary power_use_summary = 18; 383 384 message ResourcePowerManager { 385 option (android.msg_privacy).dest = DEST_AUTOMATIC; 386 387 // Either StateName or StateName.VoterName. 388 optional string name = 1; 389 optional TimerProto total = 2; 390 optional TimerProto screen_off = 3; 391 } 392 repeated ResourcePowerManager resource_power_manager = 19; 393 394 message ScreenBrightness { 395 option (android.msg_privacy).dest = DEST_AUTOMATIC; 396 397 enum Name { 398 DARK = 0; // Not screen-off. 399 DIM = 1; 400 MEDIUM = 2; 401 LIGHT = 3; 402 BRIGHT = 4; 403 }; 404 optional Name name = 1; 405 optional TimerProto total = 2; 406 }; 407 repeated ScreenBrightness screen_brightness = 20; 408 409 // Duration and number of times trying to acquire a signal 410 optional TimerProto signal_scanning = 21; 411 412 message WakeupReason { 413 option (android.msg_privacy).dest = DEST_AUTOMATIC; 414 415 optional string name = 1; 416 optional TimerProto total = 2; 417 }; 418 repeated WakeupReason wakeup_reason = 22; 419 420 message WifiMulticastWakelockTotal { 421 option (android.msg_privacy).dest = DEST_AUTOMATIC; 422 423 optional int64 duration_ms = 1; 424 optional int32 count = 2; 425 } 426 optional WifiMulticastWakelockTotal wifi_multicast_wakelock_total = 23; 427 428 message WifiSignalStrength { 429 option (android.msg_privacy).dest = DEST_AUTOMATIC; 430 431 enum Name { 432 NONE = 0; 433 POOR = 1; 434 MODERATE = 2; 435 GOOD = 3; 436 GREAT = 4; 437 }; 438 optional Name name = 1; 439 optional TimerProto total = 2; 440 }; 441 repeated WifiSignalStrength wifi_signal_strength = 24; 442 443 message WifiState { 444 option (android.msg_privacy).dest = DEST_AUTOMATIC; 445 446 enum Name { 447 OFF = 0; 448 OFF_SCANNING = 1; 449 ON_NO_NETWORKS = 2; 450 ON_DISCONNECTED = 3; 451 ON_CONNECTED_STA = 4; 452 ON_CONNECTED_P2P = 5; 453 ON_CONNECTED_STA_P2P = 6; 454 SOFT_AP = 7; 455 }; 456 optional Name name = 1; 457 optional TimerProto total = 2; 458 }; 459 repeated WifiState wifi_state = 25; 460 461 message WifiSupplicantState { 462 option (android.msg_privacy).dest = DEST_AUTOMATIC; 463 464 enum Name { 465 INVALID = 0; 466 DISCONNECTED = 1; 467 INTERFACE_DISABLED = 2; 468 INACTIVE = 3; 469 SCANNING = 4; 470 AUTHENTICATING = 5; 471 ASSOCIATING = 6; 472 ASSOCIATED = 7; 473 FOUR_WAY_HANDSHAKE = 8; 474 GROUP_HANDSHAKE = 9; 475 COMPLETED = 10; 476 DORMANT = 11; 477 UNINITIALIZED = 12; 478 }; 479 optional Name name = 1; 480 optional TimerProto total = 2; 481 }; 482 repeated WifiSupplicantState wifi_supplicant_state = 26; 483} 484 485message TimerProto { 486 option (android.msg_privacy).dest = DEST_AUTOMATIC; 487 488 // This may be an apportioned time. 489 optional int64 duration_ms = 1; 490 optional int64 count = 2; 491 // The max duration if it is being tracked. Not all Timer subclasses 492 // track the max duration. 493 optional int64 max_duration_ms = 3; 494 // The current time the timer has been active, if it is being tracked. 495 // Not all Timer subclasses track the current duration. 496 optional int64 current_duration_ms = 4; 497 // The total cumulative duration (i.e. sum of past durations) that this timer 498 // has been on since reset. This may differ from duration_ms since, depending 499 // on the Timer, getTotalTimeLocked may represent the total 'blamed' or 500 // 'pooled' time, rather than the actual time. By contrast, total_duration_ms 501 // always gives the actual total time. Not all Timer subclasses track the 502 // total duration. 503 optional int64 total_duration_ms = 5; 504} 505 506message UidProto { 507 option (android.msg_privacy).dest = DEST_AUTOMATIC; 508 509 // Combination of app ID and user ID. 510 optional int32 uid = 1; 511 512 // The statistics associated with a particular package. 513 message Package { 514 option (android.msg_privacy).dest = DEST_AUTOMATIC; 515 516 optional string name = 1; 517 518 message Service { 519 option (android.msg_privacy).dest = DEST_AUTOMATIC; 520 521 optional string name = 1; 522 // Time spent started. 523 optional int64 start_duration_ms = 2; 524 optional int32 start_count = 3; 525 optional int32 launch_count = 4; 526 } 527 repeated Service services = 2; 528 } 529 repeated Package packages = 2; 530 531 optional ControllerActivityProto bluetooth_controller = 3; 532 optional ControllerActivityProto modem_controller = 4; 533 optional ControllerActivityProto wifi_controller = 5; 534 535 // Bluetooth misc data. 536 message BluetoothMisc { 537 option (android.msg_privacy).dest = DEST_AUTOMATIC; 538 539 // Duration spent BLE scanning blamed on this App (i.e. apportioned to this 540 // app amongst all apps doing BLE scanning; see explanation of 'apportioned' 541 // in App's comment). 542 optional TimerProto apportioned_ble_scan = 1; 543 // Background times aren't apportioned. 544 optional TimerProto background_ble_scan = 2; 545 // Running unoptimized BLE scanning, as defined by Bluetooth's 546 // AppScanStats.recordScanStart. As of May 2017, these are unfiltered, 547 // non-opportunistic, non-first-match scans. Durations are not 548 // pooled/apportioned. 549 optional TimerProto unoptimized_ble_scan = 3; 550 // Running unoptimized BLE scanning when app is in background. Durations are 551 // not pooled/apportioned. 552 optional TimerProto background_unoptimized_ble_scan = 4; 553 // Count of results returned by BLE scanning. 554 optional int32 ble_scan_result_count = 5; 555 // Count of results returned by BLE scans when app is in background. 556 // (Included in ble_scan_result_count.) 557 optional int32 background_ble_scan_result_count = 6; 558 } 559 optional BluetoothMisc bluetooth_misc = 6; 560 561 message Cpu { 562 option (android.msg_privacy).dest = DEST_AUTOMATIC; 563 564 // Total CPU time with processes executing in userspace. Summed up across 565 // multiple cores. 566 optional int64 user_duration_ms = 1; 567 // Total CPU time with processes executing kernel syscalls. Summed up across 568 // multiple cores. 569 optional int64 system_duration_ms = 2; 570 571 // CPU time broken down by CPU frequency (go/cpu-battery-metrics). 572 // 573 // These are real CPU time measurement from the kernel, so their sum can 574 // be different from the sum of user_duration_millis and 575 // system_duration_millis, which are just approximations. Data is not 576 // tracked when device is charging. 577 message ByFrequency { 578 option (android.msg_privacy).dest = DEST_AUTOMATIC; 579 580 // Index of the frequency in system.cpu_frequency. It starts from 1, to 581 // make it easier to analyze. 582 optional int32 frequency_index = 1; 583 // CPU time in milliseconds. 584 optional int64 total_duration_ms = 2; 585 // Screen-off CPU time in milliseconds. 586 optional int64 screen_off_duration_ms = 3; 587 } 588 // CPU times accumulated across all process states. 589 repeated ByFrequency by_frequency = 3; 590 591 enum ProcessState { 592 TOP = 0; 593 FOREGROUND_SERVICE = 1; 594 FOREGROUND = 2; 595 BACKGROUND = 3; 596 TOP_SLEEPING = 4; 597 HEAVY_WEIGHT = 5; 598 CACHED = 6; 599 } 600 // CPU times at different process states. 601 message ByProcessState { 602 option (android.msg_privacy).dest = DEST_AUTOMATIC; 603 604 optional ProcessState process_state = 1; 605 repeated ByFrequency by_frequency = 2; 606 } 607 repeated ByProcessState by_process_state = 4; 608 } 609 optional Cpu cpu = 7; 610 611 // Duration is pooled/apportioned. 612 optional TimerProto audio = 8; 613 // Duration is pooled/apportioned. 614 optional TimerProto camera = 9; 615 // Duration is pooled/apportioned. 616 optional TimerProto flashlight = 10; 617 // Duration is not pooled/apportioned. 618 optional TimerProto foreground_activity = 11; 619 // Duration is not pooled/apportioned. 620 optional TimerProto foreground_service = 12; 621 // Duration is not pooled/apportioned. 622 optional TimerProto vibrator = 13; 623 // Duration is pooled/apportioned. 624 optional TimerProto video = 14; 625 626 message Job { 627 option (android.msg_privacy).dest = DEST_AUTOMATIC; 628 629 optional string name = 1; 630 // Job times aren't apportioned. 631 optional TimerProto total = 2; 632 optional TimerProto background = 3; 633 } 634 repeated Job jobs = 15; 635 636 message JobCompletion { 637 option (android.msg_privacy).dest = DEST_AUTOMATIC; 638 639 // Job name. 640 optional string name = 1; 641 642 message ReasonCount { 643 option (android.msg_privacy).dest = DEST_AUTOMATIC; 644 645 optional android.app.job.StopReasonEnum name = 1; 646 optional int32 count = 2; 647 } 648 repeated ReasonCount reason_count = 2; 649 }; 650 repeated JobCompletion job_completion = 16; 651 652 message Network { 653 option (android.msg_privacy).dest = DEST_AUTOMATIC; 654 655 // Mobile data traffic (total, background + foreground). 656 optional int64 mobile_bytes_rx = 1; 657 optional int64 mobile_bytes_tx = 2; 658 // Wifi data traffic (total, background + foreground). 659 optional int64 wifi_bytes_rx = 3; 660 optional int64 wifi_bytes_tx = 4; 661 // Bluetooth data traffic (total, background + foreground). 662 optional int64 bt_bytes_rx = 5; 663 optional int64 bt_bytes_tx = 6; 664 // In packets (total, background + foreground). 665 optional int64 mobile_packets_rx = 7; 666 optional int64 mobile_packets_tx = 8; 667 optional int64 wifi_packets_rx = 9; 668 optional int64 wifi_packets_tx = 10; 669 // Radio active duration. 670 optional int64 mobile_active_duration_ms = 11; 671 optional int32 mobile_active_count = 12; 672 // Number of times the app woke up the mobile radio. 673 optional int32 mobile_wakeup_count = 13; 674 // Number of times the app woke up the wifi radio. 675 optional int32 wifi_wakeup_count = 14; 676 // Mobile data traffic in the background only, included in total above. 677 optional int64 mobile_bytes_bg_rx = 15; 678 optional int64 mobile_bytes_bg_tx = 16; 679 // Wifi data traffic in the background only, included in total above. 680 optional int64 wifi_bytes_bg_rx = 17; 681 optional int64 wifi_bytes_bg_tx = 18; 682 // In packets (background only, included in total packets above). 683 optional int64 mobile_packets_bg_rx = 19; 684 optional int64 mobile_packets_bg_tx = 20; 685 optional int64 wifi_packets_bg_rx = 21; 686 optional int64 wifi_packets_bg_tx = 22; 687 }; 688 optional Network network = 17; 689 690 // TODO: combine System and App messages? 691 message PowerUseItem { 692 option (android.msg_privacy).dest = DEST_AUTOMATIC; 693 694 // Estimated power use in mAh. 695 optional double computed_power_mah = 1; 696 // Starting in Oreo, Battery Settings has two modes to display the battery 697 // info. The first is "app usage list". In this mode, items with should_hide 698 // enabled are hidden. 699 optional bool should_hide = 2; 700 // Smeared power from screen usage. Screen usage power is split and smeared 701 // among apps, based on activity time. 702 optional double screen_power_mah = 3; 703 // Smeared power using proportional method. Power usage from hidden sippers 704 // is smeared to all apps proportionally (except for screen usage). 705 optional double proportional_smear_mah = 4; 706 }; 707 optional PowerUseItem power_use_item = 18; 708 709 // Durations are not pooled/apportioned. 710 message Process { 711 option (android.msg_privacy).dest = DEST_AUTOMATIC; 712 713 optional string name = 1; 714 // Time spent executing in user code. 715 optional int64 user_duration_ms = 2; 716 // Time spent executing in kernel code. 717 optional int64 system_duration_ms = 3; 718 // Time the process was running in the foreground. 719 optional int64 foreground_duration_ms = 4; 720 // Number of times the process has been started. 721 optional int32 start_count = 5; 722 // Number of times the process has had an ANR. 723 optional int32 anr_count = 6; 724 // Number of times the process has crashed. 725 optional int32 crash_count = 7; 726 }; 727 repeated Process process = 19; 728 729 message StateTime { 730 option (android.msg_privacy).dest = DEST_AUTOMATIC; 731 732 // All of these (non-deprecated) states are mutually exclusive and can be 733 // added together to find the total time a uid has had any processes running 734 // at all. 735 736 // In approximate order or priority (top being what the framework considers 737 // most important and is thus least likely to kill when resources are 738 // needed: 739 // top > foreground service > foreground > background > top sleeping > heavy weight > cache 740 enum State { 741 // Time this uid has any processes in the top state. 742 PROCESS_STATE_TOP = 0; 743 // Time this uid has any process with a started foreground service, but 744 // none in the "top" state. 745 PROCESS_STATE_FOREGROUND_SERVICE = 1; 746 // Time this uid has any process in an active foreground state, but none in the 747 // "foreground service" or better state. Persistent and other foreground states go here. 748 PROCESS_STATE_FOREGROUND = 2; 749 // Time this uid has any process in an active background state, but none 750 // in the "foreground" or better state. 751 PROCESS_STATE_BACKGROUND = 3; 752 // Time this uid has any process that is top while the device is sleeping, 753 // but not active for any other reason. We consider is a kind of cached 754 // process for execution restrictions. Sleeping is mostly screen off, but 755 // also includes the time when the screen is on but the device has not yet 756 // been unlocked. 757 PROCESS_STATE_TOP_SLEEPING = 4; 758 // Time this uid has any process that is in the background but it has an 759 // activity marked as "can't save state". This is essentially a cached 760 // process, though the system will try much harder than normal to avoid 761 // killing it. 762 PROCESS_STATE_HEAVY_WEIGHT = 5; 763 // Time this uid has any processes that are sitting around cached, not in 764 // one of the other active states. 765 PROCESS_STATE_CACHED = 6; 766 } 767 optional State state = 1; 768 optional int64 duration_ms = 2; 769 } 770 repeated StateTime states = 20; 771 772 message Sensor { 773 option (android.msg_privacy).dest = DEST_AUTOMATIC; 774 775 optional int32 id = 1; 776 optional TimerProto apportioned = 2; 777 // Background times aren't apportioned. 778 optional TimerProto background = 3; 779 } 780 repeated Sensor sensors = 21; 781 782 message Sync { 783 option (android.msg_privacy).dest = DEST_AUTOMATIC; 784 785 optional string name = 1; 786 // Sync times aren't apportioned. 787 optional TimerProto total = 2; 788 optional TimerProto background = 3; 789 } 790 repeated Sync syncs = 22; 791 792 message UserActivity { 793 option (android.msg_privacy).dest = DEST_AUTOMATIC; 794 795 optional PowerManagerProto.UserActivityEvent name = 1; 796 optional int32 count = 2; 797 }; 798 repeated UserActivity user_activity = 23; 799 800 // Aggregated wakelock data for an app overall, across all of its wakelocks. 801 // The Wakelock message holds data about each *individual* wakelock, but it 802 // cannot be used to ascertain the aggregated time the app spent holding 803 // wakelocks, since merely summing Wakelock data will either underestimate (in 804 // the case of wakelock.partial.duration_ms) or overestimate (in the case of 805 // wakelock.partial.total_duration_ms) the total time, due to overlapping 806 // wakelocks. AggregatedWakelock, on the other hand, holds overall per-app 807 // wakelock data. 808 message AggregatedWakelock { 809 option (android.msg_privacy).dest = DEST_AUTOMATIC; 810 811 // The total duration that the app spent holding partial wakelocks. 812 // It includes both foreground + background use. 813 optional int64 partial_duration_ms = 1; 814 // The total duration that the app spent holding partial wakelocks while the 815 // app was in the background. Subtracting from partial_duration_ms will 816 // yield foreground usage. 817 optional int64 background_partial_duration_ms = 2; 818 }; 819 optional AggregatedWakelock aggregated_wakelock = 24; 820 821 message Wakelock { 822 option (android.msg_privacy).dest = DEST_AUTOMATIC; 823 824 optional string name = 1; 825 826 // Full wakelocks keep the screen on. Based on 827 // PowerManager.SCREEN_BRIGHT_WAKE_LOCK (deprecated in API 13) and 828 // PowerManager.SCREEN_DIM_WAKE_LOCK (deprecated in API 17). Current, max, 829 // and total durations are not tracked for full wakelocks. 830 optional TimerProto full = 2; 831 832 // Partial wakelocks ensure the CPU is running while allowing the screen 833 // to turn off. Based on PowerManager.PARTIAL_WAKE_LOCK. 834 // Partial wakelock metrics are only recorded when the device is unplugged 835 // *and* the screen is off. Current, max, and total durations are tracked 836 // for partial wakelocks. 837 optional TimerProto partial = 3; 838 839 // These fields are for tracking partial wakelocks (see above), but only 840 // the time the wakelock was held while the app was in a background state. 841 // Since all background tracking is 'actual', not 'apportioned', 842 // background_partial.duration_ms is identical to 843 // background_partial.total_duration_ms. 844 optional TimerProto background_partial = 4; 845 846 // Window wakelocks keep the screen on. Current, max, and total durations 847 // are not tracked for window wakelocks. 848 optional TimerProto window = 5; 849 }; 850 repeated Wakelock wakelocks = 25; 851 852 message WakeupAlarm { 853 option (android.msg_privacy).dest = DEST_AUTOMATIC; 854 855 // Wakeup alarm name. 856 optional string name = 1; 857 // Only includes counts when screen-off (& on battery). 858 optional int32 count = 2; 859 } 860 repeated WakeupAlarm wakeup_alarm = 26; 861 862 message Wifi { 863 option (android.msg_privacy).dest = DEST_AUTOMATIC; 864 865 // Duration holding Wifi-lock. This time is apportioned. 866 optional int64 full_wifi_lock_duration_ms = 1; 867 // Duration running Wifi. This time is apportioned. 868 optional int64 running_duration_ms = 2; 869 // Duration performing Wifi-scan blamed on this App (i.e. apportioned to 870 // this app amongst all apps doing Wifi-scanning; see explanation of 871 // 'apportioned' in App's comment). 872 optional TimerProto apportioned_scan = 3; 873 // Scans performed when app is in background. (Included in 874 // apportioned_scan). This value is not apportioned. Subtracting 875 // background_scan.total_duration_ms from apportioned_scan.total_duration_ms 876 // will yield foreground usage. 877 optional TimerProto background_scan = 4; 878 }; 879 optional Wifi wifi = 27; 880 881 // WiFi Multicast Wakelock 882 // This timer tracks the duration and count for the app to request the 883 // wakelock for wifi multicast traffic. 884 // This wakelock disables the filtering of multicast packets to reach the host 885 // processor, and results in a power penalty. 886 // It is useful to monitor the applications resulting in that 887 optional TimerProto wifi_multicast_wakelock = 28; 888} 889