diff options
Diffstat (limited to 'core/java/android/os/BatteryStats.java')
| -rw-r--r-- | core/java/android/os/BatteryStats.java | 165 |
1 files changed, 114 insertions, 51 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 66b6b47887b9..bf0a264b49ed 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -78,17 +78,17 @@ public abstract class BatteryStats implements Parcelable { * A constant indicating a sensor timer. */ public static final int SENSOR = 3; - + /** * A constant indicating a a wifi running timer */ public static final int WIFI_RUNNING = 4; - + /** * A constant indicating a full wifi lock timer */ public static final int FULL_WIFI_LOCK = 5; - + /** * A constant indicating a wifi scan */ @@ -217,8 +217,10 @@ public abstract class BatteryStats implements Parcelable { * - Package wakeup alarms are now on screen-off timebase * New in version 26: * - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly] + * New in version 27: + * - Always On Display (screen doze mode) time and power */ - static final String CHECKIN_VERSION = "26"; + static final String CHECKIN_VERSION = "27"; /** * Old version, we hit 9 and ran out of room, need to remove. @@ -1381,12 +1383,12 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE_PHONE_SCANNING_FLAG = 1<<21; public static final int STATE_SCREEN_ON_FLAG = 1<<20; // consider moving to states2 public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19; // consider moving to states2 - // empty slot + public static final int STATE_SCREEN_DOZE_FLAG = 1 << 18; // empty slot public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<16; public static final int MOST_INTERESTING_STATES = - STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG; + STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG | STATE_SCREEN_DOZE_FLAG; public static final int SETTLE_TO_ZERO_STATES = 0xffff0000 & ~MOST_INTERESTING_STATES; @@ -1414,8 +1416,8 @@ public abstract class BatteryStats implements Parcelable { public static final int STATE2_BLUETOOTH_SCAN_FLAG = 1 << 20; public static final int MOST_INTERESTING_STATES2 = - STATE2_POWER_SAVE_FLAG | STATE2_WIFI_ON_FLAG | STATE2_DEVICE_IDLE_MASK - | STATE2_CHARGING_FLAG | STATE2_PHONE_IN_CALL_FLAG | STATE2_BLUETOOTH_ON_FLAG; + STATE2_POWER_SAVE_FLAG | STATE2_WIFI_ON_FLAG | STATE2_DEVICE_IDLE_MASK + | STATE2_CHARGING_FLAG | STATE2_PHONE_IN_CALL_FLAG | STATE2_BLUETOOTH_ON_FLAG; public static final int SETTLE_TO_ZERO_STATES2 = 0xffff0000 & ~MOST_INTERESTING_STATES2; @@ -1863,6 +1865,21 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getScreenOnCount(int which); + /** + * Returns the time in microseconds that the screen has been dozing while the device was + * running on battery. + * + * {@hide} + */ + public abstract long getScreenDozeTime(long elapsedRealtimeUs, int which); + + /** + * Returns the number of times the screen was turned dozing. + * + * {@hide} + */ + public abstract int getScreenDozeCount(int which); + public abstract long getInteractiveTime(long elapsedRealtimeUs, int which); public static final int SCREEN_BRIGHTNESS_DARK = 0; @@ -2116,8 +2133,7 @@ public abstract class BatteryStats implements Parcelable { "group", "compl", "dorm", "uninit" }; - public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS - = new BitDescription[] { + public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] { new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"), new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"), new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"), @@ -2131,6 +2147,7 @@ public abstract class BatteryStats implements Parcelable { new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"), new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"), new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"), + new BitDescription(HistoryItem.STATE_SCREEN_DOZE_FLAG, "screen_doze", "Sd"), new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK, HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn", DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES), @@ -2467,6 +2484,18 @@ public abstract class BatteryStats implements Parcelable { public abstract int getDischargeAmountScreenOffSinceCharge(); /** + * Get the amount the battery has discharged while the screen was doze, + * since the last time power was unplugged. + */ + public abstract int getDischargeAmountScreenDoze(); + + /** + * Get the amount the battery has discharged while the screen was doze, + * since the last time the device was charged. + */ + public abstract int getDischargeAmountScreenDozeSinceCharge(); + + /** * Returns the total, last, or current battery uptime in microseconds. * * @param curTime the elapsed realtime in microseconds. @@ -2483,7 +2512,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryRealtime(long curTime, int which); /** - * Returns the total, last, or current battery screen off uptime in microseconds. + * Returns the total, last, or current battery screen off/doze uptime in microseconds. * * @param curTime the elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. @@ -2491,7 +2520,7 @@ public abstract class BatteryStats implements Parcelable { public abstract long computeBatteryScreenOffUptime(long curTime, int which); /** - * Returns the total, last, or current battery screen off realtime in microseconds. + * Returns the total, last, or current battery screen off/doze realtime in microseconds. * * @param curTime the current elapsed realtime in microseconds. * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. @@ -2590,18 +2619,24 @@ public abstract class BatteryStats implements Parcelable { }; /** - * Return the counter keeping track of the amount of battery discharge while the screen was off, - * measured in micro-Ampere-hours. This will be non-zero only if the device's battery has + * Return the amount of battery discharge while the screen was off, measured in + * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ - public abstract LongCounter getDischargeScreenOffCoulombCounter(); + public abstract long getMahDischargeScreenOff(int which); /** - * Return the counter keeping track of the amount of battery discharge measured in + * Return the amount of battery discharge while the screen was in doze mode, measured in * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ - public abstract LongCounter getDischargeCoulombCounter(); + public abstract long getMahDischargeScreenDoze(int which); + + /** + * Return the amount of battery discharge measured in micro-Ampere-hours. This will be + * non-zero only if the device's battery has a coulomb counter. + */ + public abstract long getMahDischarge(int which); /** * Returns the estimated real battery capacity, which may be less than the capacity @@ -3112,6 +3147,7 @@ public abstract class BatteryStats implements Parcelable { final long totalRealtime = computeRealtime(rawRealtime, which); final long totalUptime = computeUptime(rawUptime, which); final long screenOnTime = getScreenOnTime(rawRealtime, which); + final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final long interactiveTime = getInteractiveTime(rawRealtime, which); final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which); final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT, @@ -3124,9 +3160,9 @@ public abstract class BatteryStats implements Parcelable { rawRealtime, which); final int connChanges = getNumConnectivityChange(which); final long phoneOnTime = getPhoneOnTime(rawRealtime, which); - final long dischargeCount = getDischargeCoulombCounter().getCountLocked(which); - final long dischargeScreenOffCount = getDischargeScreenOffCoulombCounter() - .getCountLocked(which); + final long dischargeCount = getMahDischarge(which); + final long dischargeScreenOffCount = getMahDischargeScreenOff(which); + final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); final StringBuilder sb = new StringBuilder(128); @@ -3143,7 +3179,8 @@ public abstract class BatteryStats implements Parcelable { getStartClockTime(), whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000, getEstimatedBatteryCapacity(), - getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity()); + getMinLearnedBatteryCapacity(), getMaxLearnedBatteryCapacity(), + screenDozeTime / 1000); // Calculate wakelock times across all uids. @@ -3295,13 +3332,15 @@ public abstract class BatteryStats implements Parcelable { getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeStartLevel()-getDischargeCurrentLevel(), getDischargeAmountScreenOn(), getDischargeAmountScreenOff(), - dischargeCount / 1000, dischargeScreenOffCount / 1000); + dischargeCount / 1000, dischargeScreenOffCount / 1000, + getDischargeAmountScreenDoze(), dischargeScreenDozeCount / 1000); } else { dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA, getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(), getDischargeAmountScreenOnSinceCharge(), getDischargeAmountScreenOffSinceCharge(), - dischargeCount / 1000, dischargeScreenOffCount / 1000); + dischargeCount / 1000, dischargeScreenOffCount / 1000, + getDischargeAmountScreenDozeSinceCharge(), dischargeScreenDozeCount / 1000); } if (reqUid < 0) { @@ -3831,6 +3870,7 @@ public abstract class BatteryStats implements Parcelable { which); final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime); final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime); + final long screenDozeTime = getScreenDozeTime(rawRealtime, which); final StringBuilder sb = new StringBuilder(128); @@ -3868,25 +3908,35 @@ public abstract class BatteryStats implements Parcelable { sb.setLength(0); sb.append(prefix); - sb.append(" Time on battery: "); - formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); - sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); - sb.append(") realtime, "); - formatTimeMs(sb, whichBatteryUptime / 1000); - sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); - sb.append(") uptime"); + sb.append(" Time on battery: "); + formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); + sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); + sb.append(") realtime, "); + formatTimeMs(sb, whichBatteryUptime / 1000); + sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, whichBatteryRealtime)); + sb.append(") uptime"); pw.println(sb.toString()); + sb.setLength(0); sb.append(prefix); - sb.append(" Time on battery screen off: "); - formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("("); - sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime)); - sb.append(") realtime, "); - formatTimeMs(sb, whichBatteryScreenOffUptime / 1000); - sb.append("("); - sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime)); - sb.append(") uptime"); + sb.append(" Time on battery screen off: "); + formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("("); + sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, whichBatteryRealtime)); + sb.append(") realtime, "); + formatTimeMs(sb, whichBatteryScreenOffUptime / 1000); + sb.append("("); + sb.append(formatRatioLocked(whichBatteryScreenOffUptime, whichBatteryRealtime)); + sb.append(") uptime"); + pw.println(sb.toString()); + + sb.setLength(0); + sb.append(prefix); + sb.append(" Time on battery screen doze: "); + formatTimeMs(sb, screenDozeTime / 1000); sb.append("("); + sb.append(formatRatioLocked(screenDozeTime, whichBatteryRealtime)); + sb.append(")"); pw.println(sb.toString()); + sb.setLength(0); sb.append(prefix); sb.append(" Total run time: "); @@ -3910,8 +3960,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final LongCounter dischargeCounter = getDischargeCoulombCounter(); - final long dischargeCount = dischargeCounter.getCountLocked(which); + final long dischargeCount = getMahDischarge(which); if (dischargeCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -3921,8 +3970,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final LongCounter dischargeScreenOffCounter = getDischargeScreenOffCoulombCounter(); - final long dischargeScreenOffCount = dischargeScreenOffCounter.getCountLocked(which); + final long dischargeScreenOffCount = getMahDischargeScreenOff(which); if (dischargeScreenOffCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -3932,7 +3980,18 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final long dischargeScreenOnCount = dischargeCount - dischargeScreenOffCount; + final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); + if (dischargeScreenDozeCount >= 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" Screen doze discharge: "); + sb.append(BatteryStatsHelper.makemAh(dischargeScreenDozeCount / 1000.0)); + sb.append(" mAh"); + pw.println(sb.toString()); + } + + final long dischargeScreenOnCount = + dischargeCount - dischargeScreenOffCount - dischargeScreenDozeCount; if (dischargeScreenOnCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -4340,20 +4399,24 @@ public abstract class BatteryStats implements Parcelable { pw.println(getDischargeCurrentLevel()); } pw.print(prefix); pw.print(" Amount discharged while screen on: "); - pw.println(getDischargeAmountScreenOn()); + pw.println(getDischargeAmountScreenOn()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); - pw.println(getDischargeAmountScreenOff()); + pw.println(getDischargeAmountScreenOff()); + pw.print(prefix); pw.print(" Amount discharged while screen doze: "); + pw.println(getDischargeAmountScreenDoze()); pw.println(" "); } else { pw.print(prefix); pw.println(" Device battery use since last full charge"); pw.print(prefix); pw.print(" Amount discharged (lower bound): "); - pw.println(getLowDischargeAmountSinceCharge()); + pw.println(getLowDischargeAmountSinceCharge()); pw.print(prefix); pw.print(" Amount discharged (upper bound): "); - pw.println(getHighDischargeAmountSinceCharge()); + pw.println(getHighDischargeAmountSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen on: "); - pw.println(getDischargeAmountScreenOnSinceCharge()); + pw.println(getDischargeAmountScreenOnSinceCharge()); pw.print(prefix); pw.print(" Amount discharged while screen off: "); - pw.println(getDischargeAmountScreenOffSinceCharge()); + pw.println(getDischargeAmountScreenOffSinceCharge()); + pw.print(prefix); pw.print(" Amount discharged while screen doze: "); + pw.println(getDischargeAmountScreenDozeSinceCharge()); pw.println(); } @@ -5426,7 +5489,7 @@ public abstract class BatteryStats implements Parcelable { } } } - + public void prepareForDumpLocked() { } @@ -6248,7 +6311,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(); } } - + @SuppressWarnings("unused") public void dumpCheckinLocked(Context context, PrintWriter pw, List<ApplicationInfo> apps, int flags, long histStart) { |
