Loading cmds/statsd/src/config/ConfigManager.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -130,12 +130,12 @@ static StatsdConfig build_fake_config() { int APP_USAGE_FOREGROUND = 1; int APP_USAGE_BACKGROUND = 0; int SCREEN_EVENT_TAG_ID = 2; int SCREEN_EVENT_TAG_ID = 29; int SCREEN_EVENT_STATE_KEY = 1; int SCREEN_EVENT_ON_VALUE = 2; int SCREEN_EVENT_OFF_VALUE = 1; int UID_PROCESS_STATE_TAG_ID = 3; int UID_PROCESS_STATE_TAG_ID = 27; int UID_PROCESS_STATE_UID_KEY = 1; // Count Screen ON events. Loading cmds/statsd/src/stats_events.proto +344 −11 Original line number Diff line number Diff line Loading @@ -36,9 +36,28 @@ option java_outer_classname = "StatsEventProto"; */ message StatsEvent { oneof event { ScreenStateChanged screen_state_changed = 1; ProcessStateChanged process_state_changed = 2; WakeLockChanged wakelock_changed = 3; // For StatsLog reasons, 1 is illegal and will not work. Must start at 2. BleScanStateChanged ble_scan_state_changed = 2; BleUnoptimizedScanStateChanged ble_unoptimized_scan_state_changed = 3; BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; GpsScanStateChanged gps_scan_state_changed = 6; // TODO: untested SyncStateChanged sync_state_changed = 7; ScheduledJobStateChanged scheduled_job_state_changed = 8; ScreenBrightnessChanged screen_brightness_changed = 9; // 10-20 are temporarily reserved for wakelocks etc. UidWakelockStateChanged uid_wakelock_state_changed = 11; LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 12; BatterySaverModeStateChanged battery_saver_mode_state_changed = 21; DeviceIdleModeStateChanged device_idle_mode_state_changed = 22; AudioStateChanged audio_state_changed = 23; MediaCodecActivityChanged media_codec_activity_changed = 24; CameraStateChanged camera_state_changed = 25; FlashlightStateChanged flashlight_state_changed = 26; UidProcessStateChanged uid_process_state_changed = 27; ProcessLifeCycleStateChanged process_life_cycle_state_changed = 28; ScreenStateChanged screen_state_changed = 29; // TODO: Reorder the numbering so that the most frequent occur events occur in the first 15. } } Loading Loading @@ -72,7 +91,7 @@ message WorkSource { * and those UIDs will be translated in xxx to those strings. * * CONVENTIONS: * - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange * - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange. * - If there is a UID, it goes first. Think in an object-oriented fashion. * ***************************************************************************** */ Loading @@ -98,33 +117,347 @@ message ScreenStateChanged { } /** * Logs that the state of a process state, as per the activity manager has changed. * Logs that the state of a process state, as per the activity manager, has changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ProcessStateChanged { // TODO: Use the real (mapped) process states. message UidProcessStateChanged { optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation // The state. // TODO: Use the real (mapped) process states. optional int32 state = 2; } /** * Logs that the state of a wakelock has changed. * Logs that a process started, finished, crashed, or ANRed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ProcessLifeCycleStateChanged { // TODO: Use the real (mapped) process states. optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation // TODO: What is this? optional string name = 2; // The state. // TODO: Use an enum. optional int32 event = 3; } /** * Logs when the ble scan state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message BleScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when an unoptimized ble scan state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ // TODO: Consider changing to tracking per-scanner-id (log from AppScanStats). message BleUnoptimizedScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs reporting of a ble scan finding results. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ // TODO: Consider changing to tracking per-scanner-id (log from AppScanStats). message BleScanResultReceived { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Number of ble scan results returned. optional int32 num_of_results = 2; } /** * Logs when a sensor state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message SensorStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // TODO: Is there a way to get the actual name of the sensor? // The id (int) of the sensor. optional int32 sensor_id = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when GPS state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message GpsScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when a sync manager sync state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message SyncStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Name of the sync (as named in the app) optional string name = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when a job scheduler job state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message ScheduledJobStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Name of the job (as named in the app) optional string name = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; // TODO: Consider adding the stopReason (int) } /** * Logs when the audio state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message AudioStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the video codec state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message MediaCodecActivityChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the flashlight state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message FlashlightStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the camera state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message CameraStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs that the state of a wakelock (per app and per wakelock name) has changed. * * Logged from: * TODO */ message WakeLockChanged { message WakelockChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Type of wakelock. enum Type { PARTIAL = 0; FULL = 1; WINDOW = 2; } optional int32 type = 2; // The wakelock tag (Called tag in the Java API, sometimes name elsewhere). optional string tag = 3; enum State { OFF = 0; ON = 1; } optional State state = 4; } /** * Logs when an app is holding a wakelock, regardless of the wakelock's name. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message UidWakelockStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Type of wakelock. enum Type { PARTIAL = 0; FULL = 1; WINDOW = 2; } optional int32 type = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when a partial wakelock is considered 'long' (over 1 min). * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message LongPartialWakelockStateChanged { // TODO: Add attribution instead of uid? optional int32 uid = 1; // The wakelock tag (Called tag in the Java API, sometimes name elsewhere). optional string tag = 2; // TODO: Use a constant instead of boolean? optional bool state = 3; // TODO: I have no idea what this is. optional string history_tag = 3; enum State { OFF = 0; ON = 1; } optional State state = 4; } /** * Logs Battery Saver state change. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message BatterySaverModeStateChanged { enum State { OFF = 0; ON = 1; } optional State state = 1; } /** * Logs Doze mode state change. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message DeviceIdleModeStateChanged { // TODO: Use the enum matching BatteryStats.DEVICE_IDLE_MODE_. optional int32 state = 1; } /** * Logs screen brightness level. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ScreenBrightnessChanged { // Screen brightness level. Should be in [-1, 255] according to PowerManager.java. optional int32 level = 1; } No newline at end of file core/java/com/android/internal/os/BatteryStatsImpl.java +88 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.SparseLongArray; import android.util.StatsLog; import android.util.TimeUtils; import android.util.Xml; import android.view.Display; Loading Loading @@ -4030,6 +4031,7 @@ public class BatteryStatsImpl extends BatteryStats { } addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_LONG_WAKE_LOCK_START, historyName, uid); StatsLog.write(StatsLog.LONG_PARTIAL_WAKELOCK_STATE_CHANGED, uid, name, historyName, 1); } public void noteLongPartialWakelockFinish(String name, String historyName, int uid) { Loading @@ -4045,6 +4047,7 @@ public class BatteryStatsImpl extends BatteryStats { } addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH, historyName, uid); StatsLog.write(StatsLog.LONG_PARTIAL_WAKELOCK_STATE_CHANGED, uid, name, historyName, 0); } void aggregateLastWakeupUptimeLocked(long uptimeMs) { Loading Loading @@ -4403,6 +4406,7 @@ public class BatteryStatsImpl extends BatteryStats { mPowerSaveModeEnabledTimer.stopRunningLocked(elapsedRealtime); } addHistoryRecordLocked(elapsedRealtime, uptime); StatsLog.write(StatsLog.BATTERY_SAVER_MODE_STATE_CHANGED, enabled ? 1 : 0); } } Loading Loading @@ -6180,17 +6184,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteAudioTurnedOnLocked(long elapsedRealtimeMs) { createAudioTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 1); } public void noteAudioTurnedOffLocked(long elapsedRealtimeMs) { if (mAudioTurnedOnTimer != null) { mAudioTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mAudioTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 0); } } } public void noteResetAudioLocked(long elapsedRealtimeMs) { if (mAudioTurnedOnTimer != null) { mAudioTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 0); } } Loading @@ -6204,17 +6216,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteVideoTurnedOnLocked(long elapsedRealtimeMs) { createVideoTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 1); } public void noteVideoTurnedOffLocked(long elapsedRealtimeMs) { if (mVideoTurnedOnTimer != null) { mVideoTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mVideoTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 0); } } } public void noteResetVideoLocked(long elapsedRealtimeMs) { if (mVideoTurnedOnTimer != null) { mVideoTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 0); } } Loading @@ -6228,17 +6248,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteFlashlightTurnedOnLocked(long elapsedRealtimeMs) { createFlashlightTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 1); } public void noteFlashlightTurnedOffLocked(long elapsedRealtimeMs) { if (mFlashlightTurnedOnTimer != null) { mFlashlightTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mFlashlightTurnedOnTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 0); } } } public void noteResetFlashlightLocked(long elapsedRealtimeMs) { if (mFlashlightTurnedOnTimer != null) { mFlashlightTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 0); } } Loading @@ -6252,17 +6280,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteCameraTurnedOnLocked(long elapsedRealtimeMs) { createCameraTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 1); } public void noteCameraTurnedOffLocked(long elapsedRealtimeMs) { if (mCameraTurnedOnTimer != null) { mCameraTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mCameraTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 0); } } } public void noteResetCameraLocked(long elapsedRealtimeMs) { if (mCameraTurnedOnTimer != null) { mCameraTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 0); } } Loading Loading @@ -6311,26 +6347,42 @@ public class BatteryStatsImpl extends BatteryStats { public void noteBluetoothScanStartedLocked(long elapsedRealtimeMs, boolean isUnoptimized) { createBluetoothScanTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 1); if (isUnoptimized) { createBluetoothUnoptimizedScanTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 1); } } public void noteBluetoothScanStoppedLocked(long elapsedRealtimeMs, boolean isUnoptimized) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopRunningLocked(elapsedRealtimeMs); if (!mBluetoothScanTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 0); } } if (isUnoptimized && mBluetoothUnoptimizedScanTimer != null) { mBluetoothUnoptimizedScanTimer.stopRunningLocked(elapsedRealtimeMs); if (!mBluetoothUnoptimizedScanTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 0); } } } public void noteResetBluetoothScanLocked(long elapsedRealtimeMs) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 0); } if (mBluetoothUnoptimizedScanTimer != null) { mBluetoothUnoptimizedScanTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 0); } } Loading @@ -6352,6 +6404,9 @@ public class BatteryStatsImpl extends BatteryStats { createBluetoothScanResultCounterLocked().addAtomic(numNewResults); // Uses background timebase, so the count will only be incremented if uid in background. createBluetoothScanResultBgCounterLocked().addAtomic(numNewResults); // TODO(statsd): Possibly use a worksource instead of a uid. // TODO(statsd): This could be in AppScanStats instead, if desired. StatsLog.write(StatsLog.BLE_SCAN_RESULT_RECEIVED, getUid(), numNewResults); } @Override Loading Loading @@ -8725,6 +8780,8 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mSyncStats.startObject(name); if (t != null) { t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SYNC_STATE_CHANGED, getUid(), name, 1); } } Loading @@ -8732,6 +8789,10 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mSyncStats.stopObject(name); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SYNC_STATE_CHANGED, getUid(), name, 0); } } } Loading @@ -8739,6 +8800,8 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mJobStats.startObject(name); if (t != null) { t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SCHEDULED_JOB_STATE_CHANGED, getUid(), name, 1); } } Loading @@ -8746,6 +8809,10 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mJobStats.stopObject(name); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SCHEDULED_JOB_STATE_CHANGED, getUid(), name, 0); } } if (mBsi.mOnBatteryTimeBase.isRunning()) { SparseIntArray types = mJobCompletions.get(name); Loading Loading @@ -8812,6 +8879,8 @@ public class BatteryStatsImpl extends BatteryStats { } if (type == WAKE_TYPE_PARTIAL) { createAggregatedPartialWakelockTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.UID_WAKELOCK_STATE_CHANGED, getUid(), type, 1); if (pid >= 0) { Pid p = getPidStatsLocked(pid); if (p.mWakeNesting++ == 0) { Loading @@ -8829,6 +8898,11 @@ public class BatteryStatsImpl extends BatteryStats { if (type == WAKE_TYPE_PARTIAL) { if (mAggregatedPartialWakelockTimer != null) { mAggregatedPartialWakelockTimer.stopRunningLocked(elapsedRealtimeMs); if (!mAggregatedPartialWakelockTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.UID_WAKELOCK_STATE_CHANGED, getUid(), type, 0); } } if (pid >= 0) { Pid p = mPids.get(pid); Loading @@ -8852,6 +8926,12 @@ public class BatteryStatsImpl extends BatteryStats { public void noteStartSensor(int sensor, long elapsedRealtimeMs) { DualTimer t = getSensorTimerLocked(sensor, /* create= */ true); t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. if (sensor == Sensor.GPS) { StatsLog.write(StatsLog.GPS_SCAN_STATE_CHANGED, getUid(), 1); } else { StatsLog.write(StatsLog.SENSOR_STATE_CHANGED, getUid(), sensor, 1); } } public void noteStopSensor(int sensor, long elapsedRealtimeMs) { Loading @@ -8859,6 +8939,14 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = getSensorTimerLocked(sensor, false); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. if (sensor == Sensor.GPS) { StatsLog.write(StatsLog.GPS_SCAN_STATE_CHANGED, getUid(), 0); } else { StatsLog.write(StatsLog.SENSOR_STATE_CHANGED, getUid(), sensor, 0); } } } } Loading services/core/java/com/android/server/am/BatteryStatsService.java +11 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
cmds/statsd/src/config/ConfigManager.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -130,12 +130,12 @@ static StatsdConfig build_fake_config() { int APP_USAGE_FOREGROUND = 1; int APP_USAGE_BACKGROUND = 0; int SCREEN_EVENT_TAG_ID = 2; int SCREEN_EVENT_TAG_ID = 29; int SCREEN_EVENT_STATE_KEY = 1; int SCREEN_EVENT_ON_VALUE = 2; int SCREEN_EVENT_OFF_VALUE = 1; int UID_PROCESS_STATE_TAG_ID = 3; int UID_PROCESS_STATE_TAG_ID = 27; int UID_PROCESS_STATE_UID_KEY = 1; // Count Screen ON events. Loading
cmds/statsd/src/stats_events.proto +344 −11 Original line number Diff line number Diff line Loading @@ -36,9 +36,28 @@ option java_outer_classname = "StatsEventProto"; */ message StatsEvent { oneof event { ScreenStateChanged screen_state_changed = 1; ProcessStateChanged process_state_changed = 2; WakeLockChanged wakelock_changed = 3; // For StatsLog reasons, 1 is illegal and will not work. Must start at 2. BleScanStateChanged ble_scan_state_changed = 2; BleUnoptimizedScanStateChanged ble_unoptimized_scan_state_changed = 3; BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; GpsScanStateChanged gps_scan_state_changed = 6; // TODO: untested SyncStateChanged sync_state_changed = 7; ScheduledJobStateChanged scheduled_job_state_changed = 8; ScreenBrightnessChanged screen_brightness_changed = 9; // 10-20 are temporarily reserved for wakelocks etc. UidWakelockStateChanged uid_wakelock_state_changed = 11; LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 12; BatterySaverModeStateChanged battery_saver_mode_state_changed = 21; DeviceIdleModeStateChanged device_idle_mode_state_changed = 22; AudioStateChanged audio_state_changed = 23; MediaCodecActivityChanged media_codec_activity_changed = 24; CameraStateChanged camera_state_changed = 25; FlashlightStateChanged flashlight_state_changed = 26; UidProcessStateChanged uid_process_state_changed = 27; ProcessLifeCycleStateChanged process_life_cycle_state_changed = 28; ScreenStateChanged screen_state_changed = 29; // TODO: Reorder the numbering so that the most frequent occur events occur in the first 15. } } Loading Loading @@ -72,7 +91,7 @@ message WorkSource { * and those UIDs will be translated in xxx to those strings. * * CONVENTIONS: * - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange * - Events are past tense. e.g. ScreenStateChanged, not ScreenStateChange. * - If there is a UID, it goes first. Think in an object-oriented fashion. * ***************************************************************************** */ Loading @@ -98,33 +117,347 @@ message ScreenStateChanged { } /** * Logs that the state of a process state, as per the activity manager has changed. * Logs that the state of a process state, as per the activity manager, has changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ProcessStateChanged { // TODO: Use the real (mapped) process states. message UidProcessStateChanged { optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation // The state. // TODO: Use the real (mapped) process states. optional int32 state = 2; } /** * Logs that the state of a wakelock has changed. * Logs that a process started, finished, crashed, or ANRed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ProcessLifeCycleStateChanged { // TODO: Use the real (mapped) process states. optional int32 uid = 1; // TODO: should be a string tagged w/ uid annotation // TODO: What is this? optional string name = 2; // The state. // TODO: Use an enum. optional int32 event = 3; } /** * Logs when the ble scan state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message BleScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when an unoptimized ble scan state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ // TODO: Consider changing to tracking per-scanner-id (log from AppScanStats). message BleUnoptimizedScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs reporting of a ble scan finding results. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ // TODO: Consider changing to tracking per-scanner-id (log from AppScanStats). message BleScanResultReceived { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Number of ble scan results returned. optional int32 num_of_results = 2; } /** * Logs when a sensor state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message SensorStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // TODO: Is there a way to get the actual name of the sensor? // The id (int) of the sensor. optional int32 sensor_id = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when GPS state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message GpsScanStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when a sync manager sync state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message SyncStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Name of the sync (as named in the app) optional string name = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when a job scheduler job state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message ScheduledJobStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Name of the job (as named in the app) optional string name = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; // TODO: Consider adding the stopReason (int) } /** * Logs when the audio state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message AudioStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the video codec state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message MediaCodecActivityChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the flashlight state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message FlashlightStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs when the camera state changes. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message CameraStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; enum State { OFF = 0; ON = 1; } optional State state = 2; } /** * Logs that the state of a wakelock (per app and per wakelock name) has changed. * * Logged from: * TODO */ message WakeLockChanged { message WakelockChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Type of wakelock. enum Type { PARTIAL = 0; FULL = 1; WINDOW = 2; } optional int32 type = 2; // The wakelock tag (Called tag in the Java API, sometimes name elsewhere). optional string tag = 3; enum State { OFF = 0; ON = 1; } optional State state = 4; } /** * Logs when an app is holding a wakelock, regardless of the wakelock's name. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message UidWakelockStateChanged { // TODO: Add attribution instead of uid. optional int32 uid = 1; // Type of wakelock. enum Type { PARTIAL = 0; FULL = 1; WINDOW = 2; } optional int32 type = 2; enum State { OFF = 0; ON = 1; } optional State state = 3; } /** * Logs when a partial wakelock is considered 'long' (over 1 min). * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message LongPartialWakelockStateChanged { // TODO: Add attribution instead of uid? optional int32 uid = 1; // The wakelock tag (Called tag in the Java API, sometimes name elsewhere). optional string tag = 2; // TODO: Use a constant instead of boolean? optional bool state = 3; // TODO: I have no idea what this is. optional string history_tag = 3; enum State { OFF = 0; ON = 1; } optional State state = 4; } /** * Logs Battery Saver state change. * * Logged from: * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message BatterySaverModeStateChanged { enum State { OFF = 0; ON = 1; } optional State state = 1; } /** * Logs Doze mode state change. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message DeviceIdleModeStateChanged { // TODO: Use the enum matching BatteryStats.DEVICE_IDLE_MODE_. optional int32 state = 1; } /** * Logs screen brightness level. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ScreenBrightnessChanged { // Screen brightness level. Should be in [-1, 255] according to PowerManager.java. optional int32 level = 1; } No newline at end of file
core/java/com/android/internal/os/BatteryStatsImpl.java +88 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.util.SparseLongArray; import android.util.StatsLog; import android.util.TimeUtils; import android.util.Xml; import android.view.Display; Loading Loading @@ -4030,6 +4031,7 @@ public class BatteryStatsImpl extends BatteryStats { } addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_LONG_WAKE_LOCK_START, historyName, uid); StatsLog.write(StatsLog.LONG_PARTIAL_WAKELOCK_STATE_CHANGED, uid, name, historyName, 1); } public void noteLongPartialWakelockFinish(String name, String historyName, int uid) { Loading @@ -4045,6 +4047,7 @@ public class BatteryStatsImpl extends BatteryStats { } addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_LONG_WAKE_LOCK_FINISH, historyName, uid); StatsLog.write(StatsLog.LONG_PARTIAL_WAKELOCK_STATE_CHANGED, uid, name, historyName, 0); } void aggregateLastWakeupUptimeLocked(long uptimeMs) { Loading Loading @@ -4403,6 +4406,7 @@ public class BatteryStatsImpl extends BatteryStats { mPowerSaveModeEnabledTimer.stopRunningLocked(elapsedRealtime); } addHistoryRecordLocked(elapsedRealtime, uptime); StatsLog.write(StatsLog.BATTERY_SAVER_MODE_STATE_CHANGED, enabled ? 1 : 0); } } Loading Loading @@ -6180,17 +6184,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteAudioTurnedOnLocked(long elapsedRealtimeMs) { createAudioTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 1); } public void noteAudioTurnedOffLocked(long elapsedRealtimeMs) { if (mAudioTurnedOnTimer != null) { mAudioTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mAudioTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 0); } } } public void noteResetAudioLocked(long elapsedRealtimeMs) { if (mAudioTurnedOnTimer != null) { mAudioTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.AUDIO_STATE_CHANGED, getUid(), 0); } } Loading @@ -6204,17 +6216,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteVideoTurnedOnLocked(long elapsedRealtimeMs) { createVideoTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 1); } public void noteVideoTurnedOffLocked(long elapsedRealtimeMs) { if (mVideoTurnedOnTimer != null) { mVideoTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mVideoTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 0); } } } public void noteResetVideoLocked(long elapsedRealtimeMs) { if (mVideoTurnedOnTimer != null) { mVideoTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, getUid(), 0); } } Loading @@ -6228,17 +6248,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteFlashlightTurnedOnLocked(long elapsedRealtimeMs) { createFlashlightTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 1); } public void noteFlashlightTurnedOffLocked(long elapsedRealtimeMs) { if (mFlashlightTurnedOnTimer != null) { mFlashlightTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mFlashlightTurnedOnTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 0); } } } public void noteResetFlashlightLocked(long elapsedRealtimeMs) { if (mFlashlightTurnedOnTimer != null) { mFlashlightTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.FLASHLIGHT_STATE_CHANGED, getUid(), 0); } } Loading @@ -6252,17 +6280,25 @@ public class BatteryStatsImpl extends BatteryStats { public void noteCameraTurnedOnLocked(long elapsedRealtimeMs) { createCameraTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 1); } public void noteCameraTurnedOffLocked(long elapsedRealtimeMs) { if (mCameraTurnedOnTimer != null) { mCameraTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs); if (!mCameraTurnedOnTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 0); } } } public void noteResetCameraLocked(long elapsedRealtimeMs) { if (mCameraTurnedOnTimer != null) { mCameraTurnedOnTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.CAMERA_STATE_CHANGED, getUid(), 0); } } Loading Loading @@ -6311,26 +6347,42 @@ public class BatteryStatsImpl extends BatteryStats { public void noteBluetoothScanStartedLocked(long elapsedRealtimeMs, boolean isUnoptimized) { createBluetoothScanTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 1); if (isUnoptimized) { createBluetoothUnoptimizedScanTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 1); } } public void noteBluetoothScanStoppedLocked(long elapsedRealtimeMs, boolean isUnoptimized) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopRunningLocked(elapsedRealtimeMs); if (!mBluetoothScanTimer.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 0); } } if (isUnoptimized && mBluetoothUnoptimizedScanTimer != null) { mBluetoothUnoptimizedScanTimer.stopRunningLocked(elapsedRealtimeMs); if (!mBluetoothUnoptimizedScanTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 0); } } } public void noteResetBluetoothScanLocked(long elapsedRealtimeMs) { if (mBluetoothScanTimer != null) { mBluetoothScanTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_SCAN_STATE_CHANGED, getUid(), 0); } if (mBluetoothUnoptimizedScanTimer != null) { mBluetoothUnoptimizedScanTimer.stopAllRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.BLE_UNOPTIMIZED_SCAN_STATE_CHANGED, getUid(), 0); } } Loading @@ -6352,6 +6404,9 @@ public class BatteryStatsImpl extends BatteryStats { createBluetoothScanResultCounterLocked().addAtomic(numNewResults); // Uses background timebase, so the count will only be incremented if uid in background. createBluetoothScanResultBgCounterLocked().addAtomic(numNewResults); // TODO(statsd): Possibly use a worksource instead of a uid. // TODO(statsd): This could be in AppScanStats instead, if desired. StatsLog.write(StatsLog.BLE_SCAN_RESULT_RECEIVED, getUid(), numNewResults); } @Override Loading Loading @@ -8725,6 +8780,8 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mSyncStats.startObject(name); if (t != null) { t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SYNC_STATE_CHANGED, getUid(), name, 1); } } Loading @@ -8732,6 +8789,10 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mSyncStats.stopObject(name); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SYNC_STATE_CHANGED, getUid(), name, 0); } } } Loading @@ -8739,6 +8800,8 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mJobStats.startObject(name); if (t != null) { t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SCHEDULED_JOB_STATE_CHANGED, getUid(), name, 1); } } Loading @@ -8746,6 +8809,10 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = mJobStats.stopObject(name); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.SCHEDULED_JOB_STATE_CHANGED, getUid(), name, 0); } } if (mBsi.mOnBatteryTimeBase.isRunning()) { SparseIntArray types = mJobCompletions.get(name); Loading Loading @@ -8812,6 +8879,8 @@ public class BatteryStatsImpl extends BatteryStats { } if (type == WAKE_TYPE_PARTIAL) { createAggregatedPartialWakelockTimerLocked().startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.UID_WAKELOCK_STATE_CHANGED, getUid(), type, 1); if (pid >= 0) { Pid p = getPidStatsLocked(pid); if (p.mWakeNesting++ == 0) { Loading @@ -8829,6 +8898,11 @@ public class BatteryStatsImpl extends BatteryStats { if (type == WAKE_TYPE_PARTIAL) { if (mAggregatedPartialWakelockTimer != null) { mAggregatedPartialWakelockTimer.stopRunningLocked(elapsedRealtimeMs); if (!mAggregatedPartialWakelockTimer.isRunningLocked()) { // TODO(statsd): Possibly use a worksource instead of a uid. StatsLog.write(StatsLog.UID_WAKELOCK_STATE_CHANGED, getUid(), type, 0); } } if (pid >= 0) { Pid p = mPids.get(pid); Loading @@ -8852,6 +8926,12 @@ public class BatteryStatsImpl extends BatteryStats { public void noteStartSensor(int sensor, long elapsedRealtimeMs) { DualTimer t = getSensorTimerLocked(sensor, /* create= */ true); t.startRunningLocked(elapsedRealtimeMs); // TODO(statsd): Possibly use a worksource instead of a uid. if (sensor == Sensor.GPS) { StatsLog.write(StatsLog.GPS_SCAN_STATE_CHANGED, getUid(), 1); } else { StatsLog.write(StatsLog.SENSOR_STATE_CHANGED, getUid(), sensor, 1); } } public void noteStopSensor(int sensor, long elapsedRealtimeMs) { Loading @@ -8859,6 +8939,14 @@ public class BatteryStatsImpl extends BatteryStats { DualTimer t = getSensorTimerLocked(sensor, false); if (t != null) { t.stopRunningLocked(elapsedRealtimeMs); if (!t.isRunningLocked()) { // only tell statsd if truly stopped // TODO(statsd): Possibly use a worksource instead of a uid. if (sensor == Sensor.GPS) { StatsLog.write(StatsLog.GPS_SCAN_STATE_CHANGED, getUid(), 0); } else { StatsLog.write(StatsLog.SENSOR_STATE_CHANGED, getUid(), sensor, 0); } } } } Loading
services/core/java/com/android/server/am/BatteryStatsService.java +11 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes