diff options
Diffstat (limited to 'android/os/BatteryStats.java')
-rw-r--r-- | android/os/BatteryStats.java | 757 |
1 files changed, 127 insertions, 630 deletions
diff --git a/android/os/BatteryStats.java b/android/os/BatteryStats.java index 59956964..98819279 100644 --- a/android/os/BatteryStats.java +++ b/android/os/BatteryStats.java @@ -1911,13 +1911,6 @@ public abstract class BatteryStats implements Parcelable { long elapsedRealtimeUs, int which); /** - * Returns the {@link Timer} object that tracks the given screen brightness. - * - * {@hide} - */ - public abstract Timer getScreenBrightnessTimer(int brightnessBin); - - /** * Returns the time in microseconds that power save mode has been enabled while the device was * running on battery. * @@ -2026,14 +2019,6 @@ public abstract class BatteryStats implements Parcelable { long elapsedRealtimeUs, int which); /** - * Returns the {@link Timer} object that tracks how much the phone has been trying to - * acquire a signal. - * - * {@hide} - */ - public abstract Timer getPhoneSignalScanningTimer(); - - /** * Returns the number of times the phone has entered the given signal strength. * * {@hide} @@ -2041,12 +2026,6 @@ public abstract class BatteryStats implements Parcelable { public abstract int getPhoneSignalStrengthCount(int strengthBin, int which); /** - * Return the {@link Timer} object used to track the given signal strength's duration and - * counts. - */ - protected abstract Timer getPhoneSignalStrengthTimer(int strengthBin); - - /** * Returns the time in microseconds that the mobile network has been active * (in a high power state). * @@ -2129,11 +2108,6 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getPhoneDataConnectionCount(int dataType, int which); - /** - * Returns the {@link Timer} object that tracks the phone's data connection type stats. - */ - public abstract Timer getPhoneDataConnectionTimer(int dataType); - public static final int WIFI_SUPPL_STATE_INVALID = 0; public static final int WIFI_SUPPL_STATE_DISCONNECTED = 1; public static final int WIFI_SUPPL_STATE_INTERFACE_DISABLED = 2; @@ -2293,13 +2267,6 @@ public abstract class BatteryStats implements Parcelable { public abstract int getWifiStateCount(int wifiState, int which); /** - * Returns the {@link Timer} object that tracks the given WiFi state. - * - * {@hide} - */ - public abstract Timer getWifiStateTimer(int wifiState); - - /** * Returns the time in microseconds that the wifi supplicant has been * in a given state. * @@ -2315,13 +2282,6 @@ public abstract class BatteryStats implements Parcelable { */ public abstract int getWifiSupplStateCount(int state, int which); - /** - * Returns the {@link Timer} object that tracks the given wifi supplicant state. - * - * {@hide} - */ - public abstract Timer getWifiSupplStateTimer(int state); - public static final int NUM_WIFI_SIGNAL_STRENGTH_BINS = 5; /** @@ -2341,13 +2301,6 @@ public abstract class BatteryStats implements Parcelable { public abstract int getWifiSignalStrengthCount(int strengthBin, int which); /** - * Returns the {@link Timer} object that tracks the given WIFI signal strength. - * - * {@hide} - */ - public abstract Timer getWifiSignalStrengthTimer(int strengthBin); - - /** * Returns the time in microseconds that the flashlight has been on while the device was * running on battery. * @@ -2534,13 +2487,13 @@ public abstract class BatteryStats implements Parcelable { public abstract int getDischargeAmountScreenOffSinceCharge(); /** - * Get the amount the battery has discharged while the screen was dozing, + * 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 dozing, + * Get the amount the battery has discharged while the screen was doze, * since the last time the device was charged. */ public abstract int getDischargeAmountScreenDozeSinceCharge(); @@ -2673,20 +2626,20 @@ public abstract class BatteryStats implements Parcelable { * micro-Ampere-hours. This will be non-zero only if the device's battery has * a coulomb counter. */ - public abstract long getUahDischargeScreenOff(int which); + public abstract long getMahDischargeScreenOff(int which); /** * 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 long getUahDischargeScreenDoze(int which); + 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 getUahDischarge(int which); + public abstract long getMahDischarge(int which); /** * Returns the estimated real battery capacity, which may be less than the capacity @@ -3031,7 +2984,7 @@ public abstract class BatteryStats implements Parcelable { final long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; final int count = timer.getCountLocked(which); - if (totalTime != 0 || count != 0) { + if (totalTime != 0) { dumpLine(pw, uid, category, type, totalTime, count); } } @@ -3047,12 +3000,12 @@ public abstract class BatteryStats implements Parcelable { * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT */ private static void dumpTimer(ProtoOutputStream proto, long fieldId, - Timer timer, long rawRealtimeUs, int which) { + Timer timer, long rawRealtime, int which) { if (timer == null) { return; } // Convert from microseconds to milliseconds with rounding - final long totalTimeMs = (timer.getTotalTimeLocked(rawRealtimeUs, which) + 500) / 1000; + final long totalTimeMs = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; final int count = timer.getCountLocked(which); if (totalTimeMs != 0 || count != 0) { final long token = proto.start(fieldId); @@ -3161,104 +3114,71 @@ public abstract class BatteryStats implements Parcelable { final long idleTimeMs = counter.getIdleTimeCounter().getCountLocked(which); final long rxTimeMs = counter.getRxTimeCounter().getCountLocked(which); final long powerDrainMaMs = counter.getPowerCounter().getCountLocked(which); - // Battery real time - final long totalControllerActivityTimeMs - = computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which) / 1000; long totalTxTimeMs = 0; for (LongCounter txState : counter.getTxTimeCounters()) { totalTxTimeMs += txState.getCountLocked(which); } - final long sleepTimeMs - = totalControllerActivityTimeMs - (idleTimeMs + rxTimeMs + totalTxTimeMs); - sb.setLength(0); - sb.append(prefix); - sb.append(" "); - sb.append(controllerName); - sb.append(" Sleep time: "); - formatTimeMs(sb, sleepTimeMs); - sb.append("("); - sb.append(formatRatioLocked(sleepTimeMs, totalControllerActivityTimeMs)); - sb.append(")"); - pw.println(sb.toString()); + final long totalTimeMs = idleTimeMs + rxTimeMs + totalTxTimeMs; sb.setLength(0); sb.append(prefix); - sb.append(" "); + sb.append(" "); sb.append(controllerName); sb.append(" Idle time: "); formatTimeMs(sb, idleTimeMs); sb.append("("); - sb.append(formatRatioLocked(idleTimeMs, totalControllerActivityTimeMs)); + sb.append(formatRatioLocked(idleTimeMs, totalTimeMs)); sb.append(")"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); - sb.append(" "); + sb.append(" "); sb.append(controllerName); sb.append(" Rx time: "); formatTimeMs(sb, rxTimeMs); sb.append("("); - sb.append(formatRatioLocked(rxTimeMs, totalControllerActivityTimeMs)); + sb.append(formatRatioLocked(rxTimeMs, totalTimeMs)); sb.append(")"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); - sb.append(" "); + sb.append(" "); sb.append(controllerName); sb.append(" Tx time: "); + formatTimeMs(sb, totalTxTimeMs); + sb.append("("); + sb.append(formatRatioLocked(totalTxTimeMs, totalTimeMs)); + sb.append(")"); + pw.println(sb.toString()); - String [] powerLevel; - switch(controllerName) { - case "Cellular": - powerLevel = new String[] { - " less than 0dBm: ", - " 0dBm to 8dBm: ", - " 8dBm to 15dBm: ", - " 15dBm to 20dBm: ", - " above 20dBm: "}; - break; - default: - powerLevel = new String[] {"[0]", "[1]", "[2]", "[3]", "[4]"}; - break; - } - final int numTxLvls = Math.min(counter.getTxTimeCounters().length, powerLevel.length); + final int numTxLvls = counter.getTxTimeCounters().length; if (numTxLvls > 1) { - pw.println(sb.toString()); for (int lvl = 0; lvl < numTxLvls; lvl++) { final long txLvlTimeMs = counter.getTxTimeCounters()[lvl].getCountLocked(which); sb.setLength(0); sb.append(prefix); - sb.append(" "); - sb.append(powerLevel[lvl]); - sb.append(" "); + sb.append(" ["); + sb.append(lvl); + sb.append("] "); formatTimeMs(sb, txLvlTimeMs); sb.append("("); - sb.append(formatRatioLocked(txLvlTimeMs, totalControllerActivityTimeMs)); + sb.append(formatRatioLocked(txLvlTimeMs, totalTxTimeMs)); sb.append(")"); pw.println(sb.toString()); } - } else { - final long txLvlTimeMs = counter.getTxTimeCounters()[0].getCountLocked(which); - formatTimeMs(sb, txLvlTimeMs); - sb.append("("); - sb.append(formatRatioLocked(txLvlTimeMs, totalControllerActivityTimeMs)); - sb.append(")"); - pw.println(sb.toString()); } - if (powerDrainMaMs > 0) { - sb.setLength(0); - sb.append(prefix); - sb.append(" "); - sb.append(controllerName); - sb.append(" Battery drain: ").append( + sb.setLength(0); + sb.append(prefix); + sb.append(" "); + sb.append(controllerName); + sb.append(" Power drain: ").append( BatteryStatsHelper.makemAh(powerDrainMaMs / (double) (1000*60*60))); - sb.append("mAh"); - pw.println(sb.toString()); - } + sb.append("mAh"); + pw.println(sb.toString()); } /** @@ -3271,13 +3191,13 @@ public abstract class BatteryStats implements Parcelable { /** * Checkin server version of dump to produce more compact, computer-readable log. * - * NOTE: all times are expressed in microseconds, unless specified otherwise. + * NOTE: all times are expressed in 'ms'. */ public final void dumpCheckinLocked(Context context, PrintWriter pw, int which, int reqUid, boolean wifiOnly) { final long rawUptime = SystemClock.uptimeMillis() * 1000; - final long rawRealtimeMs = SystemClock.elapsedRealtime(); - final long rawRealtime = rawRealtimeMs * 1000; + final long rawRealtime = SystemClock.elapsedRealtime() * 1000; + final long rawRealtimeMs = (rawRealtime + 500) / 1000; final long batteryUptime = getBatteryUptime(rawUptime); final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); @@ -3300,9 +3220,9 @@ public abstract class BatteryStats implements Parcelable { rawRealtime, which); final int connChanges = getNumConnectivityChange(which); final long phoneOnTime = getPhoneOnTime(rawRealtime, which); - final long dischargeCount = getUahDischarge(which); - final long dischargeScreenOffCount = getUahDischargeScreenOff(which); - final long dischargeScreenDozeCount = getUahDischargeScreenDoze(which); + final long dischargeCount = getMahDischarge(which); + final long dischargeScreenOffCount = getMahDischargeScreenOff(which); + final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); final StringBuilder sb = new StringBuilder(128); @@ -3540,9 +3460,9 @@ public abstract class BatteryStats implements Parcelable { BatteryStatsHelper.makemAh(helper.getComputedPower()), BatteryStatsHelper.makemAh(helper.getMinDrainedPower()), BatteryStatsHelper.makemAh(helper.getMaxDrainedPower())); - int uid = 0; for (int i=0; i<sippers.size(); i++) { final BatterySipper bs = sippers.get(i); + int uid = 0; String label; switch (bs.drainType) { case IDLE: @@ -3583,9 +3503,6 @@ public abstract class BatteryStats implements Parcelable { case CAMERA: label = "camera"; break; - case MEMORY: - label = "memory"; - break; default: label = "???"; } @@ -3606,7 +3523,6 @@ public abstract class BatteryStats implements Parcelable { dumpLine(pw, 0 /* uid */, category, GLOBAL_CPU_FREQ_DATA, sb.toString()); } - // Dump stats per UID. for (int iu = 0; iu < NU; iu++) { final int uid = uidStats.keyAt(iu); if (reqUid >= 0 && uid != reqUid) { @@ -4104,7 +4020,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final long dischargeCount = getUahDischarge(which); + final long dischargeCount = getMahDischarge(which); if (dischargeCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -4114,7 +4030,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final long dischargeScreenOffCount = getUahDischargeScreenOff(which); + final long dischargeScreenOffCount = getMahDischargeScreenOff(which); if (dischargeScreenOffCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -4124,7 +4040,7 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - final long dischargeScreenDozeCount = getUahDischargeScreenDoze(which); + final long dischargeScreenDozeCount = getMahDischargeScreenDoze(which); if (dischargeScreenDozeCount >= 0) { sb.setLength(0); sb.append(prefix); @@ -4330,116 +4246,126 @@ public abstract class BatteryStats implements Parcelable { pw.println(sb.toString()); } - pw.println(""); - pw.print(prefix); - sb.setLength(0); - sb.append(prefix); - sb.append(" CONNECTIVITY POWER SUMMARY START"); - pw.println(sb.toString()); - - pw.print(prefix); - sb.setLength(0); - sb.append(prefix); - sb.append(" Logging duration for connectivity statistics: "); - formatTimeMs(sb, whichBatteryRealtime / 1000); - pw.println(sb.toString()); - - sb.setLength(0); - sb.append(prefix); - sb.append(" Cellular Statistics:"); - pw.println(sb.toString()); - pw.print(prefix); + pw.print(" Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotalBytes)); + pw.print(", sent: "); pw.print(formatBytesLocked(mobileTxTotalBytes)); + pw.print(" (packets received "); pw.print(mobileRxTotalPackets); + pw.print(", sent "); pw.print(mobileTxTotalPackets); pw.println(")"); sb.setLength(0); sb.append(prefix); - sb.append(" Cellular kernel active time: "); - final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which); - formatTimeMs(sb, mobileActiveTime / 1000); - sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime)); - sb.append(")"); - pw.println(sb.toString()); - - pw.print(" Cellular data received: "); pw.println(formatBytesLocked(mobileRxTotalBytes)); - pw.print(" Cellular data sent: "); pw.println(formatBytesLocked(mobileTxTotalBytes)); - pw.print(" Cellular packets received: "); pw.println(mobileRxTotalPackets); - pw.print(" Cellular packets sent: "); pw.println(mobileTxTotalPackets); - - sb.setLength(0); - sb.append(prefix); - sb.append(" Cellular Radio Access Technology:"); + sb.append(" Phone signal levels:"); didOne = false; - for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { - final long time = getPhoneDataConnectionTime(i, rawRealtime, which); + for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { + final long time = getPhoneSignalStrengthTime(i, rawRealtime, which); if (time == 0) { continue; } - sb.append("\n "); + sb.append("\n "); sb.append(prefix); didOne = true; - sb.append(DATA_CONNECTION_NAMES[i]); + sb.append(SignalStrength.SIGNAL_STRENGTH_NAMES[i]); sb.append(" "); formatTimeMs(sb, time/1000); sb.append("("); sb.append(formatRatioLocked(time, whichBatteryRealtime)); sb.append(") "); + sb.append(getPhoneSignalStrengthCount(i, which)); + sb.append("x"); } if (!didOne) sb.append(" (no activity)"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); - sb.append(" Cellular Rx signal strength (RSRP):"); - final String[] cellularRxSignalStrengthDescription = new String[]{ - "very poor (less than -128dBm): ", - "poor (-128dBm to -118dBm): ", - "moderate (-118dBm to -108dBm): ", - "good (-108dBm to -98dBm): ", - "great (greater than -98dBm): "}; + sb.append(" Signal scanning time: "); + formatTimeMsNoSpace(sb, getPhoneSignalScanningTime(rawRealtime, which) / 1000); + pw.println(sb.toString()); + + sb.setLength(0); + sb.append(prefix); + sb.append(" Radio types:"); didOne = false; - final int numCellularRxBins = Math.min(SignalStrength.NUM_SIGNAL_STRENGTH_BINS, - cellularRxSignalStrengthDescription.length); - for (int i=0; i<numCellularRxBins; i++) { - final long time = getPhoneSignalStrengthTime(i, rawRealtime, which); + for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { + final long time = getPhoneDataConnectionTime(i, rawRealtime, which); if (time == 0) { continue; } - sb.append("\n "); + sb.append("\n "); sb.append(prefix); didOne = true; - sb.append(cellularRxSignalStrengthDescription[i]); + sb.append(DATA_CONNECTION_NAMES[i]); sb.append(" "); formatTimeMs(sb, time/1000); sb.append("("); sb.append(formatRatioLocked(time, whichBatteryRealtime)); sb.append(") "); + sb.append(getPhoneDataConnectionCount(i, which)); + sb.append("x"); } if (!didOne) sb.append(" (no activity)"); pw.println(sb.toString()); - printControllerActivity(pw, sb, prefix, "Cellular", - getModemControllerActivity(), which); + sb.setLength(0); + sb.append(prefix); + sb.append(" Mobile radio active time: "); + final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which); + formatTimeMs(sb, mobileActiveTime / 1000); + sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime)); + sb.append(") "); sb.append(getMobileRadioActiveCount(which)); + sb.append("x"); + pw.println(sb.toString()); + + final long mobileActiveUnknownTime = getMobileRadioActiveUnknownTime(which); + if (mobileActiveUnknownTime != 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" Mobile radio active unknown time: "); + formatTimeMs(sb, mobileActiveUnknownTime / 1000); + sb.append("("); + sb.append(formatRatioLocked(mobileActiveUnknownTime, whichBatteryRealtime)); + sb.append(") "); sb.append(getMobileRadioActiveUnknownCount(which)); + sb.append("x"); + pw.println(sb.toString()); + } + + final long mobileActiveAdjustedTime = getMobileRadioActiveAdjustedTime(which); + if (mobileActiveAdjustedTime != 0) { + sb.setLength(0); + sb.append(prefix); + sb.append(" Mobile radio active adjusted time: "); + formatTimeMs(sb, mobileActiveAdjustedTime / 1000); + sb.append("("); + sb.append(formatRatioLocked(mobileActiveAdjustedTime, whichBatteryRealtime)); + sb.append(")"); + pw.println(sb.toString()); + } + + printControllerActivity(pw, sb, prefix, "Radio", getModemControllerActivity(), which); pw.print(prefix); + pw.print(" Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes)); + pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes)); + pw.print(" (packets received "); pw.print(wifiRxTotalPackets); + pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")"); sb.setLength(0); sb.append(prefix); - sb.append(" Wifi Statistics:"); + sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000); + sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime)); + sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000); + sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime)); + sb.append(")"); pw.println(sb.toString()); - pw.print(" Wifi data received: "); pw.println(formatBytesLocked(wifiRxTotalBytes)); - pw.print(" Wifi data sent: "); pw.println(formatBytesLocked(wifiTxTotalBytes)); - pw.print(" Wifi packets received: "); pw.println(wifiRxTotalPackets); - pw.print(" Wifi packets sent: "); pw.println(wifiTxTotalPackets); - sb.setLength(0); sb.append(prefix); - sb.append(" Wifi states:"); + sb.append(" Wifi states:"); didOne = false; for (int i=0; i<NUM_WIFI_STATES; i++) { final long time = getWifiStateTime(i, rawRealtime, which); if (time == 0) { continue; } - sb.append("\n "); + sb.append("\n "); didOne = true; sb.append(WIFI_STATE_NAMES[i]); sb.append(" "); @@ -4447,20 +4373,22 @@ public abstract class BatteryStats implements Parcelable { sb.append("("); sb.append(formatRatioLocked(time, whichBatteryRealtime)); sb.append(") "); + sb.append(getWifiStateCount(i, which)); + sb.append("x"); } if (!didOne) sb.append(" (no activity)"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); - sb.append(" Wifi supplicant states:"); + sb.append(" Wifi supplicant states:"); didOne = false; for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { final long time = getWifiSupplStateTime(i, rawRealtime, which); if (time == 0) { continue; } - sb.append("\n "); + sb.append("\n "); didOne = true; sb.append(WIFI_SUPPL_STATE_NAMES[i]); sb.append(" "); @@ -4468,23 +4396,17 @@ public abstract class BatteryStats implements Parcelable { sb.append("("); sb.append(formatRatioLocked(time, whichBatteryRealtime)); sb.append(") "); + sb.append(getWifiSupplStateCount(i, which)); + sb.append("x"); } if (!didOne) sb.append(" (no activity)"); pw.println(sb.toString()); sb.setLength(0); sb.append(prefix); - sb.append(" Wifi Rx signal strength (RSSI):"); - final String[] wifiRxSignalStrengthDescription = new String[]{ - "very poor (less than -88.75dBm): ", - "poor (-88.75 to -77.5dBm): ", - "moderate (-77.5dBm to -66.25dBm): ", - "good (-66.25dBm to -55dBm): ", - "great (greater than -55dBm): "}; + sb.append(" Wifi signal levels:"); didOne = false; - final int numWifiRxBins = Math.min(NUM_WIFI_SIGNAL_STRENGTH_BINS, - wifiRxSignalStrengthDescription.length); - for (int i=0; i<numWifiRxBins; i++) { + for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { final long time = getWifiSignalStrengthTime(i, rawRealtime, which); if (time == 0) { continue; @@ -4492,12 +4414,15 @@ public abstract class BatteryStats implements Parcelable { sb.append("\n "); sb.append(prefix); didOne = true; - sb.append(" "); - sb.append(wifiRxSignalStrengthDescription[i]); + sb.append("level("); + sb.append(i); + sb.append(") "); formatTimeMs(sb, time/1000); sb.append("("); sb.append(formatRatioLocked(time, whichBatteryRealtime)); sb.append(") "); + sb.append(getWifiSignalStrengthCount(i, which)); + sb.append("x"); } if (!didOne) sb.append(" (no activity)"); pw.println(sb.toString()); @@ -4505,13 +4430,6 @@ public abstract class BatteryStats implements Parcelable { printControllerActivity(pw, sb, prefix, "WiFi", getWifiControllerActivity(), which); pw.print(prefix); - sb.setLength(0); - sb.append(prefix); - sb.append(" CONNECTIVITY POWER SUMMARY END"); - pw.println(sb.toString()); - pw.println(""); - - pw.print(prefix); pw.print(" Bluetooth total received: "); pw.print(formatBytesLocked(btRxTotalBytes)); pw.print(", sent: "); pw.println(formatBytesLocked(btTxTotalBytes)); @@ -6120,61 +6038,6 @@ public abstract class BatteryStats implements Parcelable { return true; } - private static void dumpDurationSteps(ProtoOutputStream proto, long fieldId, - LevelStepTracker steps) { - if (steps == null) { - return; - } - int count = steps.mNumStepDurations; - long token; - for (int i = 0; i < count; ++i) { - token = proto.start(fieldId); - proto.write(SystemProto.BatteryLevelStep.DURATION_MS, steps.getDurationAt(i)); - proto.write(SystemProto.BatteryLevelStep.LEVEL, steps.getLevelAt(i)); - - final long initMode = steps.getInitModeAt(i); - final long modMode = steps.getModModeAt(i); - - int ds = SystemProto.BatteryLevelStep.DS_MIXED; - if ((modMode & STEP_LEVEL_MODE_SCREEN_STATE) == 0) { - switch ((int) (initMode & STEP_LEVEL_MODE_SCREEN_STATE) + 1) { - case Display.STATE_OFF: - ds = SystemProto.BatteryLevelStep.DS_OFF; - break; - case Display.STATE_ON: - ds = SystemProto.BatteryLevelStep.DS_ON; - break; - case Display.STATE_DOZE: - ds = SystemProto.BatteryLevelStep.DS_DOZE; - break; - case Display.STATE_DOZE_SUSPEND: - ds = SystemProto.BatteryLevelStep.DS_DOZE_SUSPEND; - break; - default: - ds = SystemProto.BatteryLevelStep.DS_ERROR; - break; - } - } - proto.write(SystemProto.BatteryLevelStep.DISPLAY_STATE, ds); - - int psm = SystemProto.BatteryLevelStep.PSM_MIXED; - if ((modMode & STEP_LEVEL_MODE_POWER_SAVE) == 0) { - psm = (initMode & STEP_LEVEL_MODE_POWER_SAVE) != 0 - ? SystemProto.BatteryLevelStep.PSM_ON : SystemProto.BatteryLevelStep.PSM_OFF; - } - proto.write(SystemProto.BatteryLevelStep.POWER_SAVE_MODE, psm); - - int im = SystemProto.BatteryLevelStep.IM_MIXED; - if ((modMode & STEP_LEVEL_MODE_DEVICE_IDLE) == 0) { - im = (initMode & STEP_LEVEL_MODE_DEVICE_IDLE) != 0 - ? SystemProto.BatteryLevelStep.IM_ON : SystemProto.BatteryLevelStep.IM_OFF; - } - proto.write(SystemProto.BatteryLevelStep.IDLE_MODE, im); - - proto.end(token); - } - } - public static final int DUMP_CHARGED_ONLY = 1<<1; public static final int DUMP_DAILY_ONLY = 1<<2; public static final int DUMP_HISTORY_ONLY = 1<<3; @@ -6600,7 +6463,7 @@ public abstract class BatteryStats implements Parcelable { } } - /** Dump #STATS_SINCE_CHARGED batterystats data to a proto. @hide */ + /** Dump batterystats data to a proto. @hide */ public void dumpProtoLocked(Context context, FileDescriptor fd, List<ApplicationInfo> apps, int flags, long historyStart) { final ProtoOutputStream proto = new ProtoOutputStream(fd); @@ -6622,376 +6485,10 @@ public abstract class BatteryStats implements Parcelable { if ((flags & (DUMP_HISTORY_ONLY | DUMP_DAILY_ONLY)) == 0) { // TODO: implement dumpProtoAppsLocked(proto, apps); - dumpProtoSystemLocked(context, proto, (flags & DUMP_DEVICE_WIFI_ONLY) != 0); + // TODO: implement dumpProtoSystemLocked(proto); } proto.end(bToken); proto.flush(); } - - private void dumpProtoSystemLocked(Context context, ProtoOutputStream proto, boolean wifiOnly) { - final long sToken = proto.start(BatteryStatsProto.SYSTEM); - final long rawUptimeUs = SystemClock.uptimeMillis() * 1000; - final long rawRealtimeMs = SystemClock.elapsedRealtime(); - final long rawRealtimeUs = rawRealtimeMs * 1000; - final int which = STATS_SINCE_CHARGED; - - // Battery data (BATTERY_DATA) - long token = proto.start(SystemProto.BATTERY); - proto.write(SystemProto.Battery.START_CLOCK_TIME_MS, getStartClockTime()); - proto.write(SystemProto.Battery.START_COUNT, getStartCount()); - proto.write(SystemProto.Battery.TOTAL_REALTIME_MS, - computeRealtime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Battery.TOTAL_UPTIME_MS, - computeUptime(rawUptimeUs, which) / 1000); - proto.write(SystemProto.Battery.BATTERY_REALTIME_MS, - computeBatteryRealtime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Battery.BATTERY_UPTIME_MS, - computeBatteryUptime(rawUptimeUs, which) / 1000); - proto.write(SystemProto.Battery.SCREEN_OFF_REALTIME_MS, - computeBatteryScreenOffRealtime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Battery.SCREEN_OFF_UPTIME_MS, - computeBatteryScreenOffUptime(rawUptimeUs, which) / 1000); - proto.write(SystemProto.Battery.SCREEN_DOZE_DURATION_MS, - getScreenDozeTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Battery.ESTIMATED_BATTERY_CAPACITY_MAH, - getEstimatedBatteryCapacity()); - proto.write(SystemProto.Battery.MIN_LEARNED_BATTERY_CAPACITY_UAH, - getMinLearnedBatteryCapacity()); - proto.write(SystemProto.Battery.MAX_LEARNED_BATTERY_CAPACITY_UAH, - getMaxLearnedBatteryCapacity()); - proto.end(token); - - // Battery discharge (BATTERY_DISCHARGE_DATA) - token = proto.start(SystemProto.BATTERY_DISCHARGE); - proto.write(SystemProto.BatteryDischarge.LOWER_BOUND_SINCE_CHARGE, - getLowDischargeAmountSinceCharge()); - proto.write(SystemProto.BatteryDischarge.UPPER_BOUND_SINCE_CHARGE, - getHighDischargeAmountSinceCharge()); - proto.write(SystemProto.BatteryDischarge.SCREEN_ON_SINCE_CHARGE, - getDischargeAmountScreenOnSinceCharge()); - proto.write(SystemProto.BatteryDischarge.SCREEN_OFF_SINCE_CHARGE, - getDischargeAmountScreenOffSinceCharge()); - proto.write(SystemProto.BatteryDischarge.SCREEN_DOZE_SINCE_CHARGE, - getDischargeAmountScreenDozeSinceCharge()); - proto.write(SystemProto.BatteryDischarge.TOTAL_MAH, - getUahDischarge(which) / 1000); - proto.write(SystemProto.BatteryDischarge.TOTAL_MAH_SCREEN_OFF, - getUahDischargeScreenOff(which) / 1000); - proto.write(SystemProto.BatteryDischarge.TOTAL_MAH_SCREEN_DOZE, - getUahDischargeScreenDoze(which) / 1000); - proto.end(token); - - // Time remaining - long timeRemainingUs = computeChargeTimeRemaining(rawRealtimeUs); - if (timeRemainingUs >= 0) { - // Charge time remaining (CHARGE_TIME_REMAIN_DATA) - proto.write(SystemProto.CHARGE_TIME_REMAINING_MS, timeRemainingUs / 1000); - } else { - timeRemainingUs = computeBatteryTimeRemaining(rawRealtimeUs); - // Discharge time remaining (DISCHARGE_TIME_REMAIN_DATA) - if (timeRemainingUs >= 0) { - proto.write(SystemProto.DISCHARGE_TIME_REMAINING_MS, timeRemainingUs / 1000); - } else { - proto.write(SystemProto.DISCHARGE_TIME_REMAINING_MS, -1); - } - } - - // Charge step (CHARGE_STEP_DATA) - dumpDurationSteps(proto, SystemProto.CHARGE_STEP, getChargeLevelStepTracker()); - - // Phone data connection (DATA_CONNECTION_TIME_DATA and DATA_CONNECTION_COUNT_DATA) - for (int i = 0; i < NUM_DATA_CONNECTION_TYPES; ++i) { - token = proto.start(SystemProto.DATA_CONNECTION); - proto.write(SystemProto.DataConnection.NAME, i); - dumpTimer(proto, SystemProto.DataConnection.TOTAL, getPhoneDataConnectionTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - // Discharge step (DISCHARGE_STEP_DATA) - dumpDurationSteps(proto, SystemProto.DISCHARGE_STEP, getDischargeLevelStepTracker()); - - // CPU frequencies (GLOBAL_CPU_FREQ_DATA) - final long[] cpuFreqs = getCpuFreqs(); - if (cpuFreqs != null) { - for (long i : cpuFreqs) { - proto.write(SystemProto.CPU_FREQUENCY, i); - } - } - - // Bluetooth controller (GLOBAL_BLUETOOTH_CONTROLLER_DATA) - dumpControllerActivityProto(proto, SystemProto.GLOBAL_BLUETOOTH_CONTROLLER, - getBluetoothControllerActivity(), which); - - // Modem controller (GLOBAL_MODEM_CONTROLLER_DATA) - dumpControllerActivityProto(proto, SystemProto.GLOBAL_MODEM_CONTROLLER, - getModemControllerActivity(), which); - - // Global network data (GLOBAL_NETWORK_DATA) - token = proto.start(SystemProto.GLOBAL_NETWORK); - proto.write(SystemProto.GlobalNetwork.MOBILE_BYTES_RX, - getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.MOBILE_BYTES_TX, - getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.MOBILE_PACKETS_RX, - getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.MOBILE_PACKETS_TX, - getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.WIFI_BYTES_RX, - getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.WIFI_BYTES_TX, - getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.WIFI_PACKETS_RX, - getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.WIFI_PACKETS_TX, - getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.BT_BYTES_RX, - getNetworkActivityBytes(NETWORK_BT_RX_DATA, which)); - proto.write(SystemProto.GlobalNetwork.BT_BYTES_TX, - getNetworkActivityBytes(NETWORK_BT_TX_DATA, which)); - proto.end(token); - - // Wifi controller (GLOBAL_WIFI_CONTROLLER_DATA) - dumpControllerActivityProto(proto, SystemProto.GLOBAL_WIFI_CONTROLLER, - getWifiControllerActivity(), which); - - - // Global wifi (GLOBAL_WIFI_DATA) - token = proto.start(SystemProto.GLOBAL_WIFI); - proto.write(SystemProto.GlobalWifi.ON_DURATION_MS, - getWifiOnTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.GlobalWifi.RUNNING_DURATION_MS, - getGlobalWifiRunningTime(rawRealtimeUs, which) / 1000); - proto.end(token); - - // Kernel wakelock (KERNEL_WAKELOCK_DATA) - final Map<String, ? extends Timer> kernelWakelocks = getKernelWakelockStats(); - for (Map.Entry<String, ? extends Timer> ent : kernelWakelocks.entrySet()) { - token = proto.start(SystemProto.KERNEL_WAKELOCK); - proto.write(SystemProto.KernelWakelock.NAME, ent.getKey()); - dumpTimer(proto, SystemProto.KernelWakelock.TOTAL, ent.getValue(), - rawRealtimeUs, which); - proto.end(token); - } - - // Misc (MISC_DATA) - // Calculate wakelock times across all uids. - long fullWakeLockTimeTotalUs = 0; - long partialWakeLockTimeTotalUs = 0; - - final SparseArray<? extends Uid> uidStats = getUidStats(); - for (int iu = 0; iu < uidStats.size(); iu++) { - final Uid u = uidStats.valueAt(iu); - - final ArrayMap<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = - u.getWakelockStats(); - for (int iw = wakelocks.size() - 1; iw >= 0; --iw) { - final Uid.Wakelock wl = wakelocks.valueAt(iw); - - final Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); - if (fullWakeTimer != null) { - fullWakeLockTimeTotalUs += fullWakeTimer.getTotalTimeLocked(rawRealtimeUs, - which); - } - - final Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); - if (partialWakeTimer != null) { - partialWakeLockTimeTotalUs += partialWakeTimer.getTotalTimeLocked( - rawRealtimeUs, which); - } - } - } - token = proto.start(SystemProto.MISC); - proto.write(SystemProto.Misc.SCREEN_ON_DURATION_MS, - getScreenOnTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.PHONE_ON_DURATION_MS, - getPhoneOnTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.FULL_WAKELOCK_TOTAL_DURATION_MS, - fullWakeLockTimeTotalUs / 1000); - proto.write(SystemProto.Misc.PARTIAL_WAKELOCK_TOTAL_DURATION_MS, - partialWakeLockTimeTotalUs / 1000); - proto.write(SystemProto.Misc.MOBILE_RADIO_ACTIVE_DURATION_MS, - getMobileRadioActiveTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.MOBILE_RADIO_ACTIVE_ADJUSTED_TIME_MS, - getMobileRadioActiveAdjustedTime(which) / 1000); - proto.write(SystemProto.Misc.MOBILE_RADIO_ACTIVE_COUNT, - getMobileRadioActiveCount(which)); - proto.write(SystemProto.Misc.MOBILE_RADIO_ACTIVE_UNKNOWN_DURATION_MS, - getMobileRadioActiveUnknownTime(which) / 1000); - proto.write(SystemProto.Misc.INTERACTIVE_DURATION_MS, - getInteractiveTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.BATTERY_SAVER_MODE_ENABLED_DURATION_MS, - getPowerSaveModeEnabledTime(rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.NUM_CONNECTIVITY_CHANGES, - getNumConnectivityChange(which)); - proto.write(SystemProto.Misc.DEEP_DOZE_ENABLED_DURATION_MS, - getDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP, rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.DEEP_DOZE_COUNT, - getDeviceIdleModeCount(DEVICE_IDLE_MODE_DEEP, which)); - proto.write(SystemProto.Misc.DEEP_DOZE_IDLING_DURATION_MS, - getDeviceIdlingTime(DEVICE_IDLE_MODE_DEEP, rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.DEEP_DOZE_IDLING_COUNT, - getDeviceIdlingCount(DEVICE_IDLE_MODE_DEEP, which)); - proto.write(SystemProto.Misc.LONGEST_DEEP_DOZE_DURATION_MS, - getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP)); - proto.write(SystemProto.Misc.LIGHT_DOZE_ENABLED_DURATION_MS, - getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT, rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.LIGHT_DOZE_COUNT, - getDeviceIdleModeCount(DEVICE_IDLE_MODE_LIGHT, which)); - proto.write(SystemProto.Misc.LIGHT_DOZE_IDLING_DURATION_MS, - getDeviceIdlingTime(DEVICE_IDLE_MODE_LIGHT, rawRealtimeUs, which) / 1000); - proto.write(SystemProto.Misc.LIGHT_DOZE_IDLING_COUNT, - getDeviceIdlingCount(DEVICE_IDLE_MODE_LIGHT, which)); - proto.write(SystemProto.Misc.LONGEST_LIGHT_DOZE_DURATION_MS, - getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT)); - proto.end(token); - - final BatteryStatsHelper helper = new BatteryStatsHelper(context, false, wifiOnly); - helper.create(this); - helper.refreshStats(which, UserHandle.USER_ALL); - - // Power use item (POWER_USE_ITEM_DATA) - final List<BatterySipper> sippers = helper.getUsageList(); - if (sippers != null) { - for (int i = 0; i < sippers.size(); ++i) { - final BatterySipper bs = sippers.get(i); - int n = SystemProto.PowerUseItem.UNKNOWN_SIPPER; - int uid = 0; - switch (bs.drainType) { - case IDLE: - n = SystemProto.PowerUseItem.IDLE; - break; - case CELL: - n = SystemProto.PowerUseItem.CELL; - break; - case PHONE: - n = SystemProto.PowerUseItem.PHONE; - break; - case WIFI: - n = SystemProto.PowerUseItem.WIFI; - break; - case BLUETOOTH: - n = SystemProto.PowerUseItem.BLUETOOTH; - break; - case SCREEN: - n = SystemProto.PowerUseItem.SCREEN; - break; - case FLASHLIGHT: - n = SystemProto.PowerUseItem.FLASHLIGHT; - break; - case APP: - // dumpProtoAppLocked will handle this. - continue; - case USER: - n = SystemProto.PowerUseItem.USER; - uid = UserHandle.getUid(bs.userId, 0); - break; - case UNACCOUNTED: - n = SystemProto.PowerUseItem.UNACCOUNTED; - break; - case OVERCOUNTED: - n = SystemProto.PowerUseItem.OVERCOUNTED; - break; - case CAMERA: - n = SystemProto.PowerUseItem.CAMERA; - break; - case MEMORY: - n = SystemProto.PowerUseItem.MEMORY; - break; - } - token = proto.start(SystemProto.POWER_USE_ITEM); - proto.write(SystemProto.PowerUseItem.NAME, n); - proto.write(SystemProto.PowerUseItem.UID, uid); - proto.write(SystemProto.PowerUseItem.COMPUTED_POWER_MAH, bs.totalPowerMah); - proto.write(SystemProto.PowerUseItem.SHOULD_HIDE, bs.shouldHide); - proto.write(SystemProto.PowerUseItem.SCREEN_POWER_MAH, bs.screenPowerMah); - proto.write(SystemProto.PowerUseItem.PROPORTIONAL_SMEAR_MAH, - bs.proportionalSmearMah); - proto.end(token); - } - } - - // Power use summary (POWER_USE_SUMMARY_DATA) - token = proto.start(SystemProto.POWER_USE_SUMMARY); - proto.write(SystemProto.PowerUseSummary.BATTERY_CAPACITY_MAH, - helper.getPowerProfile().getBatteryCapacity()); - proto.write(SystemProto.PowerUseSummary.COMPUTED_POWER_MAH, helper.getComputedPower()); - proto.write(SystemProto.PowerUseSummary.MIN_DRAINED_POWER_MAH, helper.getMinDrainedPower()); - proto.write(SystemProto.PowerUseSummary.MAX_DRAINED_POWER_MAH, helper.getMaxDrainedPower()); - proto.end(token); - - // RPM stats (RESOURCE_POWER_MANAGER_DATA) - final Map<String, ? extends Timer> rpmStats = getRpmStats(); - final Map<String, ? extends Timer> screenOffRpmStats = getScreenOffRpmStats(); - for (Map.Entry<String, ? extends Timer> ent : rpmStats.entrySet()) { - token = proto.start(SystemProto.RESOURCE_POWER_MANAGER); - proto.write(SystemProto.ResourcePowerManager.NAME, ent.getKey()); - dumpTimer(proto, SystemProto.ResourcePowerManager.TOTAL, - ent.getValue(), rawRealtimeUs, which); - dumpTimer(proto, SystemProto.ResourcePowerManager.SCREEN_OFF, - screenOffRpmStats.get(ent.getKey()), rawRealtimeUs, which); - proto.end(token); - } - - // Screen brightness (SCREEN_BRIGHTNESS_DATA) - for (int i = 0; i < NUM_SCREEN_BRIGHTNESS_BINS; ++i) { - token = proto.start(SystemProto.SCREEN_BRIGHTNESS); - proto.write(SystemProto.ScreenBrightness.NAME, i); - dumpTimer(proto, SystemProto.ScreenBrightness.TOTAL, getScreenBrightnessTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - // Signal scanning time (SIGNAL_SCANNING_TIME_DATA) - dumpTimer(proto, SystemProto.SIGNAL_SCANNING, getPhoneSignalScanningTimer(), rawRealtimeUs, - which); - - // Phone signal strength (SIGNAL_STRENGTH_TIME_DATA and SIGNAL_STRENGTH_COUNT_DATA) - for (int i = 0; i < SignalStrength.NUM_SIGNAL_STRENGTH_BINS; ++i) { - token = proto.start(SystemProto.PHONE_SIGNAL_STRENGTH); - proto.write(SystemProto.PhoneSignalStrength.NAME, i); - dumpTimer(proto, SystemProto.PhoneSignalStrength.TOTAL, getPhoneSignalStrengthTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - // Wakeup reasons (WAKEUP_REASON_DATA) - final Map<String, ? extends Timer> wakeupReasons = getWakeupReasonStats(); - for (Map.Entry<String, ? extends Timer> ent : wakeupReasons.entrySet()) { - token = proto.start(SystemProto.WAKEUP_REASON); - proto.write(SystemProto.WakeupReason.NAME, ent.getKey()); - dumpTimer(proto, SystemProto.WakeupReason.TOTAL, ent.getValue(), rawRealtimeUs, which); - proto.end(token); - } - - // Wifi signal strength (WIFI_SIGNAL_STRENGTH_TIME_DATA and WIFI_SIGNAL_STRENGTH_COUNT_DATA) - for (int i = 0; i < NUM_WIFI_SIGNAL_STRENGTH_BINS; ++i) { - token = proto.start(SystemProto.WIFI_SIGNAL_STRENGTH); - proto.write(SystemProto.WifiSignalStrength.NAME, i); - dumpTimer(proto, SystemProto.WifiSignalStrength.TOTAL, getWifiSignalStrengthTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - // Wifi state (WIFI_STATE_TIME_DATA and WIFI_STATE_COUNT_DATA) - for (int i = 0; i < NUM_WIFI_STATES; ++i) { - token = proto.start(SystemProto.WIFI_STATE); - proto.write(SystemProto.WifiState.NAME, i); - dumpTimer(proto, SystemProto.WifiState.TOTAL, getWifiStateTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - // Wifi supplicant state (WIFI_SUPPL_STATE_TIME_DATA and WIFI_SUPPL_STATE_COUNT_DATA) - for (int i = 0; i < NUM_WIFI_SUPPL_STATES; ++i) { - token = proto.start(SystemProto.WIFI_SUPPLICANT_STATE); - proto.write(SystemProto.WifiSupplicantState.NAME, i); - dumpTimer(proto, SystemProto.WifiSupplicantState.TOTAL, getWifiSupplStateTimer(i), - rawRealtimeUs, which); - proto.end(token); - } - - proto.end(sToken); - } } |