in android/os/BatteryStats.java [5550:5867]
public void printNextItem(PrintWriter pw, HistoryItem rec, long baseTime, boolean checkin,
boolean verbose) {
if (!checkin) {
pw.print(" ");
TimeUtils.formatDuration(rec.time - baseTime, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN);
pw.print(" (");
pw.print(rec.numReadInts);
pw.print(") ");
} else {
pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
pw.print(HISTORY_DATA); pw.print(',');
if (lastTime < 0) {
pw.print(rec.time - baseTime);
} else {
pw.print(rec.time - lastTime);
}
lastTime = rec.time;
}
if (rec.cmd == HistoryItem.CMD_START) {
if (checkin) {
pw.print(":");
}
pw.println("START");
reset();
} else if (rec.cmd == HistoryItem.CMD_CURRENT_TIME
|| rec.cmd == HistoryItem.CMD_RESET) {
if (checkin) {
pw.print(":");
}
if (rec.cmd == HistoryItem.CMD_RESET) {
pw.print("RESET:");
reset();
}
pw.print("TIME:");
if (checkin) {
pw.println(rec.currentTime);
} else {
pw.print(" ");
pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss",
rec.currentTime).toString());
}
} else if (rec.cmd == HistoryItem.CMD_SHUTDOWN) {
if (checkin) {
pw.print(":");
}
pw.println("SHUTDOWN");
} else if (rec.cmd == HistoryItem.CMD_OVERFLOW) {
if (checkin) {
pw.print(":");
}
pw.println("*OVERFLOW*");
} else {
if (!checkin) {
if (rec.batteryLevel < 10) pw.print("00");
else if (rec.batteryLevel < 100) pw.print("0");
pw.print(rec.batteryLevel);
if (verbose) {
pw.print(" ");
if (rec.states < 0) ;
else if (rec.states < 0x10) pw.print("0000000");
else if (rec.states < 0x100) pw.print("000000");
else if (rec.states < 0x1000) pw.print("00000");
else if (rec.states < 0x10000) pw.print("0000");
else if (rec.states < 0x100000) pw.print("000");
else if (rec.states < 0x1000000) pw.print("00");
else if (rec.states < 0x10000000) pw.print("0");
pw.print(Integer.toHexString(rec.states));
}
} else {
if (oldLevel != rec.batteryLevel) {
oldLevel = rec.batteryLevel;
pw.print(",Bl="); pw.print(rec.batteryLevel);
}
}
if (oldStatus != rec.batteryStatus) {
oldStatus = rec.batteryStatus;
pw.print(checkin ? ",Bs=" : " status=");
switch (oldStatus) {
case BatteryManager.BATTERY_STATUS_UNKNOWN:
pw.print(checkin ? "?" : "unknown");
break;
case BatteryManager.BATTERY_STATUS_CHARGING:
pw.print(checkin ? "c" : "charging");
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
pw.print(checkin ? "d" : "discharging");
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
pw.print(checkin ? "n" : "not-charging");
break;
case BatteryManager.BATTERY_STATUS_FULL:
pw.print(checkin ? "f" : "full");
break;
default:
pw.print(oldStatus);
break;
}
}
if (oldHealth != rec.batteryHealth) {
oldHealth = rec.batteryHealth;
pw.print(checkin ? ",Bh=" : " health=");
switch (oldHealth) {
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
pw.print(checkin ? "?" : "unknown");
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
pw.print(checkin ? "g" : "good");
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
pw.print(checkin ? "h" : "overheat");
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
pw.print(checkin ? "d" : "dead");
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
pw.print(checkin ? "v" : "over-voltage");
break;
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
pw.print(checkin ? "f" : "failure");
break;
case BatteryManager.BATTERY_HEALTH_COLD:
pw.print(checkin ? "c" : "cold");
break;
default:
pw.print(oldHealth);
break;
}
}
if (oldPlug != rec.batteryPlugType) {
oldPlug = rec.batteryPlugType;
pw.print(checkin ? ",Bp=" : " plug=");
switch (oldPlug) {
case 0:
pw.print(checkin ? "n" : "none");
break;
case BatteryManager.BATTERY_PLUGGED_AC:
pw.print(checkin ? "a" : "ac");
break;
case BatteryManager.BATTERY_PLUGGED_USB:
pw.print(checkin ? "u" : "usb");
break;
case BatteryManager.BATTERY_PLUGGED_WIRELESS:
pw.print(checkin ? "w" : "wireless");
break;
default:
pw.print(oldPlug);
break;
}
}
if (oldTemp != rec.batteryTemperature) {
oldTemp = rec.batteryTemperature;
pw.print(checkin ? ",Bt=" : " temp=");
pw.print(oldTemp);
}
if (oldVolt != rec.batteryVoltage) {
oldVolt = rec.batteryVoltage;
pw.print(checkin ? ",Bv=" : " volt=");
pw.print(oldVolt);
}
final int chargeMAh = rec.batteryChargeUAh / 1000;
if (oldChargeMAh != chargeMAh) {
oldChargeMAh = chargeMAh;
pw.print(checkin ? ",Bcc=" : " charge=");
pw.print(oldChargeMAh);
}
printBitDescriptions(pw, oldState, rec.states, rec.wakelockTag,
HISTORY_STATE_DESCRIPTIONS, !checkin);
printBitDescriptions(pw, oldState2, rec.states2, null,
HISTORY_STATE2_DESCRIPTIONS, !checkin);
if (rec.wakeReasonTag != null) {
if (checkin) {
pw.print(",wr=");
pw.print(rec.wakeReasonTag.poolIdx);
} else {
pw.print(" wake_reason=");
pw.print(rec.wakeReasonTag.uid);
pw.print(":\"");
pw.print(rec.wakeReasonTag.string);
pw.print("\"");
}
}
if (rec.eventCode != HistoryItem.EVENT_NONE) {
pw.print(checkin ? "," : " ");
if ((rec.eventCode&HistoryItem.EVENT_FLAG_START) != 0) {
pw.print("+");
} else if ((rec.eventCode&HistoryItem.EVENT_FLAG_FINISH) != 0) {
pw.print("-");
}
String[] eventNames = checkin ? HISTORY_EVENT_CHECKIN_NAMES
: HISTORY_EVENT_NAMES;
int idx = rec.eventCode & ~(HistoryItem.EVENT_FLAG_START
| HistoryItem.EVENT_FLAG_FINISH);
if (idx >= 0 && idx < eventNames.length) {
pw.print(eventNames[idx]);
} else {
pw.print(checkin ? "Ev" : "event");
pw.print(idx);
}
pw.print("=");
if (checkin) {
pw.print(rec.eventTag.poolIdx);
} else {
pw.append(HISTORY_EVENT_INT_FORMATTERS[idx]
.applyAsString(rec.eventTag.uid));
pw.print(":\"");
pw.print(rec.eventTag.string);
pw.print("\"");
}
}
pw.println();
if (rec.stepDetails != null) {
if (!checkin) {
pw.print(" Details: cpu=");
pw.print(rec.stepDetails.userTime);
pw.print("u+");
pw.print(rec.stepDetails.systemTime);
pw.print("s");
if (rec.stepDetails.appCpuUid1 >= 0) {
pw.print(" (");
printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid1,
rec.stepDetails.appCpuUTime1, rec.stepDetails.appCpuSTime1);
if (rec.stepDetails.appCpuUid2 >= 0) {
pw.print(", ");
printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid2,
rec.stepDetails.appCpuUTime2, rec.stepDetails.appCpuSTime2);
}
if (rec.stepDetails.appCpuUid3 >= 0) {
pw.print(", ");
printStepCpuUidDetails(pw, rec.stepDetails.appCpuUid3,
rec.stepDetails.appCpuUTime3, rec.stepDetails.appCpuSTime3);
}
pw.print(')');
}
pw.println();
pw.print(" /proc/stat=");
pw.print(rec.stepDetails.statUserTime);
pw.print(" usr, ");
pw.print(rec.stepDetails.statSystemTime);
pw.print(" sys, ");
pw.print(rec.stepDetails.statIOWaitTime);
pw.print(" io, ");
pw.print(rec.stepDetails.statIrqTime);
pw.print(" irq, ");
pw.print(rec.stepDetails.statSoftIrqTime);
pw.print(" sirq, ");
pw.print(rec.stepDetails.statIdlTime);
pw.print(" idle");
int totalRun = rec.stepDetails.statUserTime + rec.stepDetails.statSystemTime
+ rec.stepDetails.statIOWaitTime + rec.stepDetails.statIrqTime
+ rec.stepDetails.statSoftIrqTime;
int total = totalRun + rec.stepDetails.statIdlTime;
if (total > 0) {
pw.print(" (");
float perc = ((float)totalRun) / ((float)total) * 100;
pw.print(String.format("%.1f%%", perc));
pw.print(" of ");
StringBuilder sb = new StringBuilder(64);
formatTimeMsNoSpace(sb, total*10);
pw.print(sb);
pw.print(")");
}
pw.print(", PlatformIdleStat ");
pw.print(rec.stepDetails.statPlatformIdleState);
pw.println();
pw.print(", SubsystemPowerState ");
pw.print(rec.stepDetails.statSubsystemPowerState);
pw.println();
} else {
pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
pw.print(HISTORY_DATA); pw.print(",0,Dcpu=");
pw.print(rec.stepDetails.userTime);
pw.print(":");
pw.print(rec.stepDetails.systemTime);
if (rec.stepDetails.appCpuUid1 >= 0) {
printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid1,
rec.stepDetails.appCpuUTime1, rec.stepDetails.appCpuSTime1);
if (rec.stepDetails.appCpuUid2 >= 0) {
printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid2,
rec.stepDetails.appCpuUTime2, rec.stepDetails.appCpuSTime2);
}
if (rec.stepDetails.appCpuUid3 >= 0) {
printStepCpuUidCheckinDetails(pw, rec.stepDetails.appCpuUid3,
rec.stepDetails.appCpuUTime3, rec.stepDetails.appCpuSTime3);
}
}
pw.println();
pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
pw.print(HISTORY_DATA); pw.print(",0,Dpst=");
pw.print(rec.stepDetails.statUserTime);
pw.print(',');
pw.print(rec.stepDetails.statSystemTime);
pw.print(',');
pw.print(rec.stepDetails.statIOWaitTime);
pw.print(',');
pw.print(rec.stepDetails.statIrqTime);
pw.print(',');
pw.print(rec.stepDetails.statSoftIrqTime);
pw.print(',');
pw.print(rec.stepDetails.statIdlTime);
pw.print(',');
if (rec.stepDetails.statPlatformIdleState != null) {
pw.print(rec.stepDetails.statPlatformIdleState);
if (rec.stepDetails.statSubsystemPowerState != null) {
pw.print(',');
}
}
if (rec.stepDetails.statSubsystemPowerState != null) {
pw.print(rec.stepDetails.statSubsystemPowerState);
}
pw.println();
}
}
oldState = rec.states;
oldState2 = rec.states2;
}
}