diff options
-rw-r--r-- | healthd/BatteryMonitor.cpp | 35 | ||||
-rw-r--r-- | logd/LogKlog.cpp | 10 |
2 files changed, 39 insertions, 6 deletions
diff --git a/healthd/BatteryMonitor.cpp b/healthd/BatteryMonitor.cpp index d611add..688348e 100644 --- a/healthd/BatteryMonitor.cpp +++ b/healthd/BatteryMonitor.cpp @@ -25,11 +25,13 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <sys/types.h> #include <unistd.h> + #include <batteryservice/BatteryService.h> #include <cutils/klog.h> #include <cutils/properties.h> -#include <sys/types.h> +#include <log/log_read.h> #include <utils/Errors.h> #include <utils/String8.h> #include <utils/Vector.h> @@ -352,11 +354,32 @@ bool BatteryMonitor::update(void) { "dock-battery none"); } - KLOG_WARNING(LOG_TAG, "%s %s chg=%s%s%s%s\n", dmesgline, dmesglinedock, - props.chargerAcOnline ? "a" : "", - props.chargerUsbOnline ? "u" : "", - props.chargerWirelessOnline ? "w" : "", - props.chargerDockAcOnline ? "d" : ""); + size_t len = strlen(dmesgline); + snprintf(dmesgline + len, sizeof(dmesgline) - len, " chg=%s%s%s", + props.chargerAcOnline ? "a" : "", + props.chargerUsbOnline ? "u" : "", + props.chargerWirelessOnline ? "w" : ""); + + log_time realtime(CLOCK_REALTIME); + time_t t = realtime.tv_sec; + struct tm *tmp = gmtime(&t); + if (tmp) { + static const char fmt[] = " %Y-%m-%d %H:%M:%S.XXXXXXXXX UTC"; + len = strlen(dmesgline); + if ((len < (sizeof(dmesgline) - sizeof(fmt) - 8)) // margin + && strftime(dmesgline + len, sizeof(dmesgline) - len, + fmt, tmp)) { + char *usec = strchr(dmesgline + len, 'X'); + if (usec) { + len = usec - dmesgline; + snprintf(dmesgline + len, sizeof(dmesgline) - len, + "%09u", realtime.tv_nsec); + usec[9] = ' '; + } + } + } + + KLOG_WARNING(LOG_TAG, "%s\n", dmesgline); } healthd_mode_ops->battery_update(&props); diff --git a/logd/LogKlog.cpp b/logd/LogKlog.cpp index eff26f5..1e6f55f 100644 --- a/logd/LogKlog.cpp +++ b/logd/LogKlog.cpp @@ -254,6 +254,7 @@ void LogKlog::sniffTime(log_time &now, const char **buf, bool reverse) { if ((cp = now.strptime(*buf, "[ %s.%q]"))) { static const char suspend[] = "PM: suspend entry "; static const char resume[] = "PM: suspend exit "; + static const char healthd[] = "healthd: battery "; static const char suspended[] = "Suspended for "; if (isspace(*cp)) { @@ -263,6 +264,15 @@ void LogKlog::sniffTime(log_time &now, const char **buf, bool reverse) { calculateCorrection(now, cp + sizeof(suspend) - 1); } else if (!strncmp(cp, resume, sizeof(resume) - 1)) { calculateCorrection(now, cp + sizeof(resume) - 1); + } else if (!strncmp(cp, healthd, sizeof(healthd) - 1)) { + // look for " 2???-??-?? ??:??:??.????????? ???" + const char *tp; + for (tp = cp + sizeof(healthd) - 1; *tp && (*tp != '\n'); ++tp) { + if ((tp[0] == ' ') && (tp[1] == '2') && (tp[5] == '-')) { + calculateCorrection(now, tp + 1); + break; + } + } } else if (!strncmp(cp, suspended, sizeof(suspended) - 1)) { log_time real; char *endp; |