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

Commit d34a8cad authored by Mathias Agopian's avatar Mathias Agopian Committed by Alex Ray
Browse files

improved CallStack a bit

- added a ctor that updates and dumps the stack immediately
- added a "logtag" parameter to dump()

Change-Id: Ie51c256071d282591752243bdb4f68cf9ff8829d
parent da8ec4b6
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ public:
    };

    CallStack();
    CallStack(const char* logtag, int32_t ignoreDepth=1,
            int32_t maxDepth=MAX_DEPTH);
    CallStack(const CallStack& rhs);
    ~CallStack();

@@ -53,8 +55,8 @@ public:

    void update(int32_t ignoreDepth=1, int32_t maxDepth=MAX_DEPTH);

    // Dump a stack trace to the log
    void dump(const char* prefix = 0) const;
    // Dump a stack trace to the log using the supplied logtag
    void dump(const char* logtag, const char* prefix = 0) const;

    // Return a string (possibly very long) containing the complete stack trace
    String8 toString(const char* prefix = 0) const;
+9 −2
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@ CallStack::CallStack() :
        mCount(0) {
}

CallStack::CallStack(const char* logtag, int32_t ignoreDepth, int32_t maxDepth) {
    this->update(ignoreDepth+1, maxDepth);
    this->dump(logtag);
}

CallStack::CallStack(const CallStack& rhs) :
        mCount(rhs.mCount) {
    if (mCount) {
@@ -96,7 +101,7 @@ void CallStack::update(int32_t ignoreDepth, int32_t maxDepth) {
    mCount = count > 0 ? count : 0;
}

void CallStack::dump(const char* prefix) const {
void CallStack::dump(const char* logtag, const char* prefix) const {
    backtrace_symbol_t symbols[mCount];

    get_backtrace_symbols(mStack, mCount, symbols);
@@ -104,7 +109,9 @@ void CallStack::dump(const char* prefix) const {
        char line[MAX_BACKTRACE_LINE_LENGTH];
        format_backtrace_line(i, &mStack[i], &symbols[i],
                line, MAX_BACKTRACE_LINE_LENGTH);
        ALOGD("%s%s", prefix, line);
        ALOG(LOG_DEBUG, logtag, "%s%s",
                prefix ? prefix : "",
                line);
    }
    free_backtrace_symbols(symbols, mCount);
}
+4 −8
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ public:
                char inc = refs->ref >= 0 ? '+' : '-';
                ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref);
#if DEBUG_REFS_CALLSTACK_ENABLED
                refs->stack.dump();
                refs->stack.dump(LOG_TAG);
#endif
                refs = refs->next;
            }
@@ -124,16 +124,14 @@ public:
                char inc = refs->ref >= 0 ? '+' : '-';
                ALOGD("\t%c ID %p (ref %d):", inc, refs->id, refs->ref);
#if DEBUG_REFS_CALLSTACK_ENABLED
                refs->stack.dump();
                refs->stack.dump(LOG_TAG);
#endif
                refs = refs->next;
            }
        }
        if (dumpStack) {
            ALOGE("above errors at:");
            CallStack stack;
            stack.update();
            stack.dump();
            CallStack stack(LOG_TAG);
        }
    }

@@ -269,9 +267,7 @@ private:
                ref = ref->next;
            }

            CallStack stack;
            stack.update();
            stack.dump();
            CallStack stack(LOG_TAG);
        }
    }