Loading core/java/android/os/BatteryStats.java +25 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,7 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE2_VIDEO_ON_FLAG = 1<<30; public static final int STATE2_WIFI_RUNNING_FLAG = 1<<29; public static final int STATE2_WIFI_ON_FLAG = 1<<28; public static final int STATE2_FLASHLIGHT_FLAG = 1<<27; public static final int MOST_INTERESTING_STATES2 = STATE2_LOW_POWER_FLAG | STATE2_WIFI_ON_FLAG; Loading Loading @@ -1235,6 +1236,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE2_VIDEO_ON_FLAG, "video", "v"), new BitDescription(HistoryItem.STATE2_WIFI_RUNNING_FLAG, "wifi_running", "Wr"), new BitDescription(HistoryItem.STATE2_WIFI_ON_FLAG, "wifi", "W"), new BitDescription(HistoryItem.STATE2_FLASHLIGHT_FLAG, "flashlight", "fl"), new BitDescription(HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_MASK, HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_SHIFT, "wifi_signal_strength", "Wss", new String[] { "0", "1", "2", "3", "4" }, Loading Loading @@ -1370,6 +1372,22 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getBluetoothStateCount(int bluetoothState, int which); /** * Returns the time in microseconds that the flashlight has been on while the device was * running on battery. * * {@hide} */ public abstract long getFlashlightOnTime(long elapsedRealtimeUs, int which); /** * Returns the number of times that the flashlight has been turned on while the device was * running on battery. * * {@hide} */ public abstract long getFlashlightOnCount(int which); public static final int NETWORK_MOBILE_RX_DATA = 0; public static final int NETWORK_MOBILE_TX_DATA = 1; public static final int NETWORK_WIFI_RX_DATA = 2; Loading Loading @@ -1965,6 +1983,9 @@ public abstract class BatteryStats implements Parcelable { case SCREEN: label="scrn"; break; case FLASHLIGHT: label="flashlight"; break; case APP: uid = bs.uidObj.getUid(); label = "uid"; Loading Loading @@ -2637,6 +2658,10 @@ public abstract class BatteryStats implements Parcelable { pw.print(prefix); pw.print(" Screen: "); printmAh(pw, bs.value); pw.println(); break; case FLASHLIGHT: pw.print(prefix); pw.print(" Flashlight: "); printmAh(pw, bs.value); pw.println(); break; case APP: pw.print(prefix); pw.print(" Uid "); UserHandle.formatUid(pw, bs.uidObj.getUid()); Loading core/java/com/android/internal/app/IBatteryStats.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ interface IBatteryStats { void noteVibratorOn(int uid, long durationMillis); void noteVibratorOff(int uid); void noteFlashlightOn(); void noteFlashlightOff(); void noteStartGps(int uid); void noteStopGps(int uid); void noteScreenState(int state); Loading core/java/com/android/internal/os/BatterySipper.java +1 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class BatterySipper implements Comparable<BatterySipper> { PHONE, WIFI, BLUETOOTH, FLASHLIGHT, SCREEN, APP, USER, Loading core/java/com/android/internal/os/BatteryStatsHelper.java +10 −0 Original line number Diff line number Diff line Loading @@ -706,6 +706,15 @@ public class BatteryStatsHelper { } } private void addFlashlightUsage() { long flashlightOnTimeMs = mStats.getFlashlightOnTime(mRawRealtime, mStatsType) / 1000; double flashlightPower = flashlightOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_FLASHLIGHT) / (60*60*1000); if (flashlightPower != 0) { addEntry(BatterySipper.DrainType.FLASHLIGHT, flashlightOnTimeMs, flashlightPower); } } private void addUserUsage() { for (int i=0; i<mUserSippers.size(); i++) { final int userId = mUserSippers.keyAt(i); Loading Loading @@ -760,6 +769,7 @@ public class BatteryStatsHelper { addUserUsage(); addPhoneUsage(); addScreenUsage(); addFlashlightUsage(); addWiFiUsage(); addBluetoothUsage(); addIdleUsage(); // Not including cellular idle power Loading core/java/com/android/internal/os/BatteryStatsImpl.java +48 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version private static final int VERSION = 107 + (USE_OLD_HISTORY ? 1000 : 0); private static final int VERSION = 108 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; Loading Loading @@ -260,6 +260,9 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mVideoOn; StopwatchTimer mVideoOnTimer; boolean mFlashlightOn; StopwatchTimer mFlashlightOnTimer; int mPhoneSignalStrengthBin = -1; int mPhoneSignalStrengthBinRaw = -1; final StopwatchTimer[] mPhoneSignalStrengthsTimer = Loading Loading @@ -3177,6 +3180,32 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteVibratorOffLocked(); } public void noteFlashlightOnLocked() { if (!mFlashlightOn) { final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); mHistoryCur.states2 |= HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight on to: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mFlashlightOn = true; mFlashlightOnTimer.startRunningLocked(elapsedRealtime); } } public void noteFlashlightOffLocked() { final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); if (mFlashlightOn) { mHistoryCur.states2 &= ~HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight off to: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mFlashlightOn = false; mFlashlightOnTimer.stopRunningLocked(elapsedRealtime); } } public void noteWifiRunningLocked(WorkSource ws) { if (!mGlobalWifiRunning) { final long elapsedRealtime = SystemClock.elapsedRealtime(); Loading Loading @@ -3682,6 +3711,14 @@ public final class BatteryStatsImpl extends BatteryStats { return mBluetoothStateTimer[bluetoothState].getCountLocked(which); } @Override public long getFlashlightOnTime(long elapsedRealtimeUs, int which) { return mFlashlightOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which); } @Override public long getFlashlightOnCount(int which) { return mFlashlightOnTimer.getCountLocked(which); } @Override public long getNetworkActivityBytes(int type, int which) { if (type >= 0 && type < mNetworkByteActivityCounters.length) { Loading Loading @@ -5681,6 +5718,7 @@ public final class BatteryStatsImpl extends BatteryStats { } mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase); mOnBattery = mOnBatteryInternal = false; long uptime = SystemClock.uptimeMillis() * 1000; long realtime = SystemClock.elapsedRealtime() * 1000; Loading Loading @@ -5930,6 +5968,7 @@ public final class BatteryStatsImpl extends BatteryStats { mPhoneOnTimer.reset(false); mAudioOnTimer.reset(false); mVideoOnTimer.reset(false); mFlashlightOnTimer.reset(false); for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { mPhoneSignalStrengthsTimer[i].reset(false); } Loading Loading @@ -7124,6 +7163,8 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].readSummaryFromParcelLocked(in); } mFlashlightOn = false; mFlashlightOnTimer.readSummaryFromParcelLocked(in); int NKW = in.readInt(); if (NKW > 10000) { Loading Loading @@ -7381,6 +7422,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS); } mFlashlightOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS); out.writeInt(mKernelWakelockStats.size()); for (Map.Entry<String, SamplingTimer> ent : mKernelWakelockStats.entrySet()) { Loading Loading @@ -7667,6 +7709,8 @@ public final class BatteryStatsImpl extends BatteryStats { mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); mVideoOn = false; mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); mFlashlightOn = false; mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase, in); mDischargeUnplugLevel = in.readInt(); mDischargePlugLevel = in.readInt(); mDischargeCurrentLevel = in.readInt(); Loading Loading @@ -7798,6 +7842,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].writeToParcel(out, uSecRealtime); } mFlashlightOnTimer.writeToParcel(out, uSecRealtime); out.writeInt(mDischargeUnplugLevel); out.writeInt(mDischargePlugLevel); out.writeInt(mDischargeCurrentLevel); Loading Loading @@ -7931,6 +7976,8 @@ public final class BatteryStatsImpl extends BatteryStats { pr.println("*** Bluetooth active type #" + i + ":"); mBluetoothStateTimer[i].logState(pr, " "); } pr.println("*** Flashlight timer:"); mFlashlightOnTimer.logState(pr, " "); } super.dumpLocked(context, pw, flags, reqUid, histStart); } Loading Loading
core/java/android/os/BatteryStats.java +25 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,7 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE2_VIDEO_ON_FLAG = 1<<30; public static final int STATE2_WIFI_RUNNING_FLAG = 1<<29; public static final int STATE2_WIFI_ON_FLAG = 1<<28; public static final int STATE2_FLASHLIGHT_FLAG = 1<<27; public static final int MOST_INTERESTING_STATES2 = STATE2_LOW_POWER_FLAG | STATE2_WIFI_ON_FLAG; Loading Loading @@ -1235,6 +1236,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE2_VIDEO_ON_FLAG, "video", "v"), new BitDescription(HistoryItem.STATE2_WIFI_RUNNING_FLAG, "wifi_running", "Wr"), new BitDescription(HistoryItem.STATE2_WIFI_ON_FLAG, "wifi", "W"), new BitDescription(HistoryItem.STATE2_FLASHLIGHT_FLAG, "flashlight", "fl"), new BitDescription(HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_MASK, HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_SHIFT, "wifi_signal_strength", "Wss", new String[] { "0", "1", "2", "3", "4" }, Loading Loading @@ -1370,6 +1372,22 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getBluetoothStateCount(int bluetoothState, int which); /** * Returns the time in microseconds that the flashlight has been on while the device was * running on battery. * * {@hide} */ public abstract long getFlashlightOnTime(long elapsedRealtimeUs, int which); /** * Returns the number of times that the flashlight has been turned on while the device was * running on battery. * * {@hide} */ public abstract long getFlashlightOnCount(int which); public static final int NETWORK_MOBILE_RX_DATA = 0; public static final int NETWORK_MOBILE_TX_DATA = 1; public static final int NETWORK_WIFI_RX_DATA = 2; Loading Loading @@ -1965,6 +1983,9 @@ public abstract class BatteryStats implements Parcelable { case SCREEN: label="scrn"; break; case FLASHLIGHT: label="flashlight"; break; case APP: uid = bs.uidObj.getUid(); label = "uid"; Loading Loading @@ -2637,6 +2658,10 @@ public abstract class BatteryStats implements Parcelable { pw.print(prefix); pw.print(" Screen: "); printmAh(pw, bs.value); pw.println(); break; case FLASHLIGHT: pw.print(prefix); pw.print(" Flashlight: "); printmAh(pw, bs.value); pw.println(); break; case APP: pw.print(prefix); pw.print(" Uid "); UserHandle.formatUid(pw, bs.uidObj.getUid()); Loading
core/java/com/android/internal/app/IBatteryStats.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ interface IBatteryStats { void noteVibratorOn(int uid, long durationMillis); void noteVibratorOff(int uid); void noteFlashlightOn(); void noteFlashlightOff(); void noteStartGps(int uid); void noteStopGps(int uid); void noteScreenState(int state); Loading
core/java/com/android/internal/os/BatterySipper.java +1 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class BatterySipper implements Comparable<BatterySipper> { PHONE, WIFI, BLUETOOTH, FLASHLIGHT, SCREEN, APP, USER, Loading
core/java/com/android/internal/os/BatteryStatsHelper.java +10 −0 Original line number Diff line number Diff line Loading @@ -706,6 +706,15 @@ public class BatteryStatsHelper { } } private void addFlashlightUsage() { long flashlightOnTimeMs = mStats.getFlashlightOnTime(mRawRealtime, mStatsType) / 1000; double flashlightPower = flashlightOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_FLASHLIGHT) / (60*60*1000); if (flashlightPower != 0) { addEntry(BatterySipper.DrainType.FLASHLIGHT, flashlightOnTimeMs, flashlightPower); } } private void addUserUsage() { for (int i=0; i<mUserSippers.size(); i++) { final int userId = mUserSippers.keyAt(i); Loading Loading @@ -760,6 +769,7 @@ public class BatteryStatsHelper { addUserUsage(); addPhoneUsage(); addScreenUsage(); addFlashlightUsage(); addWiFiUsage(); addBluetoothUsage(); addIdleUsage(); // Not including cellular idle power Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +48 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version private static final int VERSION = 107 + (USE_OLD_HISTORY ? 1000 : 0); private static final int VERSION = 108 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; Loading Loading @@ -260,6 +260,9 @@ public final class BatteryStatsImpl extends BatteryStats { boolean mVideoOn; StopwatchTimer mVideoOnTimer; boolean mFlashlightOn; StopwatchTimer mFlashlightOnTimer; int mPhoneSignalStrengthBin = -1; int mPhoneSignalStrengthBinRaw = -1; final StopwatchTimer[] mPhoneSignalStrengthsTimer = Loading Loading @@ -3177,6 +3180,32 @@ public final class BatteryStatsImpl extends BatteryStats { getUidStatsLocked(uid).noteVibratorOffLocked(); } public void noteFlashlightOnLocked() { if (!mFlashlightOn) { final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); mHistoryCur.states2 |= HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight on to: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mFlashlightOn = true; mFlashlightOnTimer.startRunningLocked(elapsedRealtime); } } public void noteFlashlightOffLocked() { final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); if (mFlashlightOn) { mHistoryCur.states2 &= ~HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight off to: " + Integer.toHexString(mHistoryCur.states)); addHistoryRecordLocked(elapsedRealtime, uptime); mFlashlightOn = false; mFlashlightOnTimer.stopRunningLocked(elapsedRealtime); } } public void noteWifiRunningLocked(WorkSource ws) { if (!mGlobalWifiRunning) { final long elapsedRealtime = SystemClock.elapsedRealtime(); Loading Loading @@ -3682,6 +3711,14 @@ public final class BatteryStatsImpl extends BatteryStats { return mBluetoothStateTimer[bluetoothState].getCountLocked(which); } @Override public long getFlashlightOnTime(long elapsedRealtimeUs, int which) { return mFlashlightOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which); } @Override public long getFlashlightOnCount(int which) { return mFlashlightOnTimer.getCountLocked(which); } @Override public long getNetworkActivityBytes(int type, int which) { if (type >= 0 && type < mNetworkByteActivityCounters.length) { Loading Loading @@ -5681,6 +5718,7 @@ public final class BatteryStatsImpl extends BatteryStats { } mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase); mOnBattery = mOnBatteryInternal = false; long uptime = SystemClock.uptimeMillis() * 1000; long realtime = SystemClock.elapsedRealtime() * 1000; Loading Loading @@ -5930,6 +5968,7 @@ public final class BatteryStatsImpl extends BatteryStats { mPhoneOnTimer.reset(false); mAudioOnTimer.reset(false); mVideoOnTimer.reset(false); mFlashlightOnTimer.reset(false); for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { mPhoneSignalStrengthsTimer[i].reset(false); } Loading Loading @@ -7124,6 +7163,8 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].readSummaryFromParcelLocked(in); } mFlashlightOn = false; mFlashlightOnTimer.readSummaryFromParcelLocked(in); int NKW = in.readInt(); if (NKW > 10000) { Loading Loading @@ -7381,6 +7422,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS); } mFlashlightOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS); out.writeInt(mKernelWakelockStats.size()); for (Map.Entry<String, SamplingTimer> ent : mKernelWakelockStats.entrySet()) { Loading Loading @@ -7667,6 +7709,8 @@ public final class BatteryStatsImpl extends BatteryStats { mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); mVideoOn = false; mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); mFlashlightOn = false; mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase, in); mDischargeUnplugLevel = in.readInt(); mDischargePlugLevel = in.readInt(); mDischargeCurrentLevel = in.readInt(); Loading Loading @@ -7798,6 +7842,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int i=0; i< NUM_BLUETOOTH_STATES; i++) { mBluetoothStateTimer[i].writeToParcel(out, uSecRealtime); } mFlashlightOnTimer.writeToParcel(out, uSecRealtime); out.writeInt(mDischargeUnplugLevel); out.writeInt(mDischargePlugLevel); out.writeInt(mDischargeCurrentLevel); Loading Loading @@ -7931,6 +7976,8 @@ public final class BatteryStatsImpl extends BatteryStats { pr.println("*** Bluetooth active type #" + i + ":"); mBluetoothStateTimer[i].logState(pr, " "); } pr.println("*** Flashlight timer:"); mFlashlightOnTimer.logState(pr, " "); } super.dumpLocked(context, pw, flags, reqUid, histStart); } Loading