diff options
author | Elliott Hughes <enh@google.com> | 2020-07-23 15:26:10 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2020-07-23 16:33:53 -0700 |
commit | a660cb3f13ad369554678ea19753cbc7e92726f3 (patch) | |
tree | 3559b09f77391adc9c74016ff9d9d2e52d2d1fb2 /debuggerd/util.cpp | |
parent | 4aa073337d6b872ff87b702c4dcfa26142e6c9c2 (diff) |
debuggerd: use One True timestamp function.
An OEM asks for sub-second granularity, and that's most easily done if
we only have one timestamp generator. I'm not convinced sub-second
granularity is particularly useful myself, and I definitely don't think
that nanosecond resolution is meaningful but I do like this cleanup, and
if I'm going to use sub-second precision I may as well use the maximum
precision available to me.
Also reduce some duplication of code reading cmdline/comm.
Bug: https://issuetracker.google.com/161860597
Test: head /data/tombstones/*
Change-Id: I035ecfd4a3338ccd84dae0ef973a998a7c7c5056
Diffstat (limited to 'debuggerd/util.cpp')
-rw-r--r-- | debuggerd/util.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/debuggerd/util.cpp b/debuggerd/util.cpp index a37b3b93b..9d09210f5 100644 --- a/debuggerd/util.cpp +++ b/debuggerd/util.cpp @@ -17,6 +17,7 @@ #include "util.h" #include <sys/socket.h> +#include <time.h> #include <string> #include <utility> @@ -38,3 +39,19 @@ std::string get_thread_name(pid_t tid) { android::base::ReadFileToString(android::base::StringPrintf("/proc/%d/comm", tid), &result); return android::base::Trim(result); } + +std::string get_timestamp() { + timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + + tm tm; + localtime_r(&ts.tv_sec, &tm); + + char buf[strlen("1970-01-01 00:00:00.123456789+0830") + 1]; + char* s = buf; + size_t sz = sizeof(buf), n; + n = strftime(s, sz, "%F %H:%M", &tm), s += n, sz -= n; + n = snprintf(s, sz, ":%02d.%09ld", tm.tm_sec, ts.tv_nsec), s += n, sz -= n; + n = strftime(s, sz, "%z", &tm), s += n, sz -= n; + return buf; +} |