Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1a050ad authored by Bookatz's avatar Bookatz
Browse files

Add pushing many batterystats events to statsd

Statsd is now informed for starts/stops/etc of the following events:
BleScan
BleScanUnoptimized
BleScanResult
Sensor
Gps
Sync
ScheduledJob
UidWakelock (aggregate wakelock)
LongPartialWakelock
BatterySaverMode (power save mode)
DeviceIdleMode (doze)
ScreenBrightness
Audio
Video (media codec)
Camera
Flashlight
ProcessLifeCycle

TODO: Note that, although tags are java constants (e.g.
StatsLog.SCREEN_STATE), the values passed in for states do not have java
constants associated with them, so we use literals (0 vs 1 for off vs
on). In the future, when corresponding java constants exist, these can
be updated.

Test: manually confirmed statslog received each type of events
Change-Id: I24282cdb56265bba61dceb0932112804273dcfc8
parent d2167ba9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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.
+344 −11
Original line number Diff line number Diff line
@@ -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.
    }
}

@@ -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.
 * *****************************************************************************
 */
@@ -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
+88 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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) {
@@ -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) {
@@ -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);
        }
    }
@@ -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);
            }
        }
@@ -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);
            }
        }
@@ -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);
            }
        }
@@ -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);
            }
        }
@@ -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);
            }
        }
@@ -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
@@ -8712,6 +8767,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);
            }
        }
@@ -8719,6 +8776,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);
                }
            }
        }
@@ -8726,6 +8787,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);
            }
        }
@@ -8733,6 +8796,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);
@@ -8799,6 +8866,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) {
@@ -8816,6 +8885,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);
@@ -8839,6 +8913,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) {
@@ -8846,6 +8926,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);
                    }
                }
            }
        }
+11 −1

File changed.

Preview size limit exceeded, changes collapsed.