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

Commit 40502e1a authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Gerrit Code Review
Browse files

Merge "logd: ratelimit drop messages to 1/sec"

parents 876881b2 e06a6e0f
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public:
    uint64_t getKey() { return value; }
};

struct LogBufferElementEntry {
class LogBufferElementEntry {
    const uint64_t key;
    LogBufferElement *last;

@@ -259,8 +259,9 @@ public:
    LogBufferElement *getLast() { return last; }
};

struct LogBufferElementLast : public android::BasicHashtable<uint64_t, LogBufferElementEntry> {
class LogBufferElementLast : public android::BasicHashtable<uint64_t, LogBufferElementEntry> {

public:
    bool merge(LogBufferElement *e, unsigned short dropped) {
        LogBufferElementKey key(e->getUid(), e->getPid(), e->getTid());
        android::hash_t hash = android::hash_type(key.getKey());
@@ -286,6 +287,21 @@ struct LogBufferElementLast : public android::BasicHashtable<uint64_t, LogBuffer
            add(hash, LogBufferElementEntry(key.getKey(), e));
    }

    inline void clear() {
        android::BasicHashtable<uint64_t, LogBufferElementEntry>::clear();
    }

    void clear(LogBufferElement *e) {
        uint64_t current = e->getRealTime().nsec() - NS_PER_SEC;
        ssize_t index = -1;
        while((index = next(index)) >= 0) {
            if (current > editEntryAt(index).getLast()->getRealTime().nsec()) {
                removeAt(index);
                index = -1;
            }
        }
    }

};

// prune "pruneRows" of type "id" from the buffer.
@@ -395,7 +411,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
            leading = false;

            if (hasBlacklist && mPrune.naughty(e)) {
                last.clear();
                last.clear(e);
                it = erase(it);
                if (dropped) {
                    continue;
@@ -423,7 +439,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
            }

            if (e->getUid() != worst) {
                last.clear();
                last.clear(e);
                ++it;
                continue;
            }