diff options
author | Mark Salyzyn <salyzyn@google.com> | 2015-07-23 09:22:50 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2015-08-27 10:14:10 -0700 |
commit | bc193c53ecc740d0ac3de976c6654b90a24669b6 (patch) | |
tree | 4412413b6b77c9b4515afd97f52dc17eca9d7d38 /healthd/BatteryMonitor.cpp | |
parent | cb19b08dac6c486f64e0577bc4c0fd92e0ea4552 (diff) | |
download | core-bc193c53ecc740d0ac3de976c6654b90a24669b6.tar.gz core-bc193c53ecc740d0ac3de976c6654b90a24669b6.tar.bz2 core-bc193c53ecc740d0ac3de976c6654b90a24669b6.zip |
healthd: logd: add timestamp to kernel logged battery messages
(cherry pick from commit acb1ddf56c98a75a49b263f99ef07ce361dc4323)
Aid monotonic to realtime logging synchronization correction in
the Android ecosystem by providing a periodic notification. We
now have the following messages in the kernel logs:
- PM: suspend entry %Y-%m-%d %H:%M:%S.%09q UTC
- PM: suspend exit %Y-%m-%d %H:%M:%S.%09q UTC
- Suspended for %s.%03q seconds
- healthd: battery l=100 ... %Y-%m-%d %H:%M:%S.%09q UTC
Alter klogd to resynchronize on healthd messages as well.
NB: Time using strftime format, %q is a reference to fractional
second as introduced into log_time strptime method.
Bug: 21868540
Change-Id: I854afc0a07dff9c7f26d2b2f68990e52bf90e300
Diffstat (limited to 'healthd/BatteryMonitor.cpp')
-rw-r--r-- | healthd/BatteryMonitor.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/healthd/BatteryMonitor.cpp b/healthd/BatteryMonitor.cpp index c75ed1394..1cad427bd 100644 --- a/healthd/BatteryMonitor.cpp +++ b/healthd/BatteryMonitor.cpp @@ -24,11 +24,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> @@ -275,10 +277,32 @@ bool BatteryMonitor::update(void) { "battery none"); } - KLOG_WARNING(LOG_TAG, "%s chg=%s%s%s\n", dmesgline, - props.chargerAcOnline ? "a" : "", - props.chargerUsbOnline ? "u" : "", - props.chargerWirelessOnline ? "w" : ""); + 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); |