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

Commit 758058ff authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

logd: object layer format statistics

Simplify table generation by placing the line and header formatting
into each type's (UID, PID, TID) object. Switch to const return
values for the ownership passing functions (*ToName() functions
and methods). Use longer variable names to reduce confusion.

Switch from LINES To NUM for pruned column as that more accurately
reflects what is dropped since one entry can contain several lines.

Bug: 22855208
Change-Id: Ib110dce98a68cf5f844eb30f8a192a1f691eeba2
parent bd4f52b2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -183,7 +183,7 @@ int LogAudit::logPrint(const char *fmt, ...) {
    static const char comm_str[] = " comm=\"";
    const char *comm = strstr(str, comm_str);
    const char *estr = str + strlen(str);
    char *commfree = NULL;
    const char *commfree = NULL;
    if (comm) {
        estr = comm;
        comm += sizeof(comm_str) - 1;
@@ -231,7 +231,7 @@ int LogAudit::logPrint(const char *fmt, ...) {
        // end scope for main buffer
    }

    free(commfree);
    free(const_cast<char *>(commfree));
    free(str);

    if (notify) {
+2 −2
Original line number Diff line number Diff line
@@ -78,9 +78,9 @@ public:
    std::string formatPrune() { return mPrune.format(); }

    // helper must be protected directly or implicitly by lock()/unlock()
    char *pidToName(pid_t pid) { return stats.pidToName(pid); }
    const char *pidToName(pid_t pid) { return stats.pidToName(pid); }
    uid_t pidToUid(pid_t pid) { return stats.pidToUid(pid); }
    char *uidToName(uid_t uid) { return stats.uidToName(uid); }
    const char *uidToName(uid_t uid) { return stats.uidToName(uid); }
    void lock() { pthread_mutex_lock(&mLogElementsLock); }
    void unlock() { pthread_mutex_unlock(&mLogElementsLock); }

+23 −22
Original line number Diff line number Diff line
@@ -113,9 +113,9 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,

    static const char format_uid[] = "uid=%u%s%s expire %u line%s";
    parent->lock();
    char *name = parent->uidToName(mUid);
    const char *name = parent->uidToName(mUid);
    parent->unlock();
    char *commName = android::tidToName(mTid);
    const char *commName = android::tidToName(mTid);
    if (!commName && (mTid != mPid)) {
        commName = android::tidToName(mPid);
    }
@@ -128,28 +128,28 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,
        size_t len = strlen(name + 1);
        if (!strncmp(name + 1, commName + 1, len)) {
            if (commName[len + 1] == '\0') {
                free(commName);
                free(const_cast<char *>(commName));
                commName = NULL;
            } else {
                free(name);
                free(const_cast<char *>(name));
                name = NULL;
            }
        }
    }
    if (name) {
        char *p = NULL;
        asprintf(&p, "(%s)", name);
        if (p) {
            free(name);
            name = p;
        char *buf = NULL;
        asprintf(&buf, "(%s)", name);
        if (buf) {
            free(const_cast<char *>(name));
            name = buf;
        }
    }
    if (commName) {
        char *p = NULL;
        asprintf(&p, " %s", commName);
        if (p) {
            free(commName);
            commName = p;
        char *buf = NULL;
        asprintf(&buf, " %s", commName);
        if (buf) {
            free(const_cast<char *>(commName));
            commName = buf;
        }
    }
    // identical to below to calculate the buffer size required
@@ -166,18 +166,19 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,

    buffer = static_cast<char *>(calloc(1, hdrLen + len + 1));
    if (!buffer) {
        free(name);
        free(commName);
        free(const_cast<char *>(name));
        free(const_cast<char *>(commName));
        return 0;
    }

    size_t retval = hdrLen + len;
    if (mLogId == LOG_ID_EVENTS) {
        android_log_event_string_t *e = reinterpret_cast<android_log_event_string_t *>(buffer);
        android_log_event_string_t *event =
            reinterpret_cast<android_log_event_string_t *>(buffer);

        e->header.tag = htole32(LOGD_LOG_TAG);
        e->type = EVENT_TYPE_STRING;
        e->length = htole32(len);
        event->header.tag = htole32(LOGD_LOG_TAG);
        event->type = EVENT_TYPE_STRING;
        event->length = htole32(len);
    } else {
        ++retval;
        buffer[0] = ANDROID_LOG_INFO;
@@ -187,8 +188,8 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,
    snprintf(buffer + hdrLen, len + 1, format_uid, mUid, name ? name : "",
             commName ? commName : "",
             mDropped, (mDropped > 1) ? "s" : "");
    free(name);
    free(commName);
    free(const_cast<char *>(name));
    free(const_cast<char *>(commName));

    return retval;
}
+190 −282

File changed.

Preview size limit exceeded, changes collapsed.

+194 −110

File changed.

Preview size limit exceeded, changes collapsed.