summaryrefslogtreecommitdiffstats
path: root/logd
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2017-04-13 15:35:22 -0700
committerMark Salyzyn <salyzyn@google.com>2017-04-13 16:33:20 -0700
commitf31ae3d666f6e723a7dde6734c6d8395f8bcdc11 (patch)
tree866e1f85d3ef1bc822a761c128122e536923b5d3 /logd
parent659b78ed10fb9116e5dbbf6971fc2e36ca88a465 (diff)
downloadsystem_core-f31ae3d666f6e723a7dde6734c6d8395f8bcdc11.tar.gz
system_core-f31ae3d666f6e723a7dde6734c6d8395f8bcdc11.tar.bz2
system_core-f31ae3d666f6e723a7dde6734c6d8395f8bcdc11.zip
logd: statistics truncate name
Prefix long truncated names with an ellipse (...). Shift left as much as possible when doing so, but keep spaces between command name and other tabular fields. Test: manual/visual Bug: 37254265 Change-Id: I185b1e121ba911a9410a8b6624e013d5a531962b
Diffstat (limited to 'logd')
-rw-r--r--logd/LogStatistics.cpp61
1 files changed, 31 insertions, 30 deletions
diff --git a/logd/LogStatistics.cpp b/logd/LogStatistics.cpp
index cc30f7783..d3167ad3a 100644
--- a/logd/LogStatistics.cpp
+++ b/logd/LogStatistics.cpp
@@ -248,18 +248,38 @@ std::string UidEntry::formatHeader(const std::string& name, log_id_t id) const {
std::string(isprune ? "NUM" : ""));
}
-std::string UidEntry::format(const LogStatistics& stat, log_id_t id) const {
- uid_t uid = getUid();
- std::string name = android::base::StringPrintf("%u", uid);
- const char* nameTmp = stat.uidToName(uid);
+// Helper to truncate name, if too long, and add name dressings
+static void formatTmp(const LogStatistics& stat, const char* nameTmp, uid_t uid,
+ std::string& name, std::string& size, size_t nameLen) {
+ const char* allocNameTmp = nullptr;
+ if (!nameTmp) nameTmp = allocNameTmp = stat.uidToName(uid);
if (nameTmp) {
- name += android::base::StringPrintf(
- "%*s%s", (int)std::max(6 - name.length(), (size_t)1), "", nameTmp);
- free(const_cast<char*>(nameTmp));
+ size_t lenSpace = std::max(nameLen - name.length(), (size_t)1);
+ size_t len = EntryBaseConstants::total_len -
+ EntryBaseConstants::pruned_len - size.length() -
+ name.length() - lenSpace - 2;
+ size_t lenNameTmp = strlen(nameTmp);
+ while ((len < lenNameTmp) && (lenSpace > 1)) {
+ ++len;
+ --lenSpace;
+ }
+ name += android::base::StringPrintf("%*s", (int)lenSpace, "");
+ if (len < lenNameTmp) {
+ name += "...";
+ nameTmp += lenNameTmp - std::max(len - 3, (size_t)1);
+ }
+ name += nameTmp;
+ free(const_cast<char*>(allocNameTmp));
}
+}
+std::string UidEntry::format(const LogStatistics& stat, log_id_t id) const {
+ uid_t uid = getUid();
+ std::string name = android::base::StringPrintf("%u", uid);
std::string size = android::base::StringPrintf("%zu", getSizes());
+ formatTmp(stat, nullptr, uid, name, size, 6);
+
std::string pruned = "";
if (worstUidEnabledForLogid(id)) {
size_t totalDropped = 0;
@@ -366,18 +386,10 @@ std::string PidEntry::format(const LogStatistics& stat,
uid_t uid = getUid();
pid_t pid = getPid();
std::string name = android::base::StringPrintf("%5u/%u", pid, uid);
- const char* nameTmp = getName();
- if (nameTmp) {
- name += android::base::StringPrintf(
- "%*s%s", (int)std::max(12 - name.length(), (size_t)1), "", nameTmp);
- } else if ((nameTmp = stat.uidToName(uid))) {
- name += android::base::StringPrintf(
- "%*s%s", (int)std::max(12 - name.length(), (size_t)1), "", nameTmp);
- free(const_cast<char*>(nameTmp));
- }
-
std::string size = android::base::StringPrintf("%zu", getSizes());
+ formatTmp(stat, getName(), uid, name, size, 12);
+
std::string pruned = "";
size_t dropped = getDropped();
if (dropped) {
@@ -398,21 +410,10 @@ std::string TidEntry::format(const LogStatistics& stat,
log_id_t /* id */) const {
uid_t uid = getUid();
std::string name = android::base::StringPrintf("%5u/%u", getTid(), uid);
- const char* nameTmp = getName();
- if (nameTmp) {
- name += android::base::StringPrintf(
- "%*s%s", (int)std::max(12 - name.length(), (size_t)1), "", nameTmp);
- } else if ((nameTmp = stat.uidToName(uid))) {
- // if we do not have a PID name, lets punt to try UID name?
- name += android::base::StringPrintf(
- "%*s%s", (int)std::max(12 - name.length(), (size_t)1), "", nameTmp);
- free(const_cast<char*>(nameTmp));
- // We tried, better to not have a name at all, we still
- // have TID/UID by number to report in any case.
- }
-
std::string size = android::base::StringPrintf("%zu", getSizes());
+ formatTmp(stat, getName(), uid, name, size, 12);
+
std::string pruned = "";
size_t dropped = getDropped();
if (dropped) {