Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f31ae3d6 authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

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
parent 659b78ed
Loading
Loading
Loading
Loading
+31 −30
Original line number Original line Diff line number Diff line
@@ -248,18 +248,38 @@ std::string UidEntry::formatHeader(const std::string& name, log_id_t id) const {
                      std::string(isprune ? "NUM" : ""));
                      std::string(isprune ? "NUM" : ""));
}
}


std::string UidEntry::format(const LogStatistics& stat, log_id_t id) const {
// Helper to truncate name, if too long, and add name dressings
    uid_t uid = getUid();
static void formatTmp(const LogStatistics& stat, const char* nameTmp, uid_t uid,
    std::string name = android::base::StringPrintf("%u", uid);
                      std::string& name, std::string& size, size_t nameLen) {
    const char* nameTmp = stat.uidToName(uid);
    const char* allocNameTmp = nullptr;
    if (!nameTmp) nameTmp = allocNameTmp = stat.uidToName(uid);
    if (nameTmp) {
    if (nameTmp) {
        name += android::base::StringPrintf(
        size_t lenSpace = std::max(nameLen - name.length(), (size_t)1);
            "%*s%s", (int)std::max(6 - name.length(), (size_t)1), "", nameTmp);
        size_t len = EntryBaseConstants::total_len -
        free(const_cast<char*>(nameTmp));
                     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());
    std::string size = android::base::StringPrintf("%zu", getSizes());


    formatTmp(stat, nullptr, uid, name, size, 6);

    std::string pruned = "";
    std::string pruned = "";
    if (worstUidEnabledForLogid(id)) {
    if (worstUidEnabledForLogid(id)) {
        size_t totalDropped = 0;
        size_t totalDropped = 0;
@@ -366,18 +386,10 @@ std::string PidEntry::format(const LogStatistics& stat,
    uid_t uid = getUid();
    uid_t uid = getUid();
    pid_t pid = getPid();
    pid_t pid = getPid();
    std::string name = android::base::StringPrintf("%5u/%u", pid, uid);
    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());
    std::string size = android::base::StringPrintf("%zu", getSizes());


    formatTmp(stat, getName(), uid, name, size, 12);

    std::string pruned = "";
    std::string pruned = "";
    size_t dropped = getDropped();
    size_t dropped = getDropped();
    if (dropped) {
    if (dropped) {
@@ -398,21 +410,10 @@ std::string TidEntry::format(const LogStatistics& stat,
                             log_id_t /* id */) const {
                             log_id_t /* id */) const {
    uid_t uid = getUid();
    uid_t uid = getUid();
    std::string name = android::base::StringPrintf("%5u/%u", getTid(), uid);
    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());
    std::string size = android::base::StringPrintf("%zu", getSizes());


    formatTmp(stat, getName(), uid, name, size, 12);

    std::string pruned = "";
    std::string pruned = "";
    size_t dropped = getDropped();
    size_t dropped = getDropped();
    if (dropped) {
    if (dropped) {