Merge "logd: ratelimit drop messages to 1/sec"
This commit is contained in:
commit
40502e1a70
1 changed files with 20 additions and 4 deletions
|
|
@ -247,7 +247,7 @@ public:
|
||||||
uint64_t getKey() { return value; }
|
uint64_t getKey() { return value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LogBufferElementEntry {
|
class LogBufferElementEntry {
|
||||||
const uint64_t key;
|
const uint64_t key;
|
||||||
LogBufferElement *last;
|
LogBufferElement *last;
|
||||||
|
|
||||||
|
|
@ -259,8 +259,9 @@ public:
|
||||||
LogBufferElement *getLast() { return last; }
|
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) {
|
bool merge(LogBufferElement *e, unsigned short dropped) {
|
||||||
LogBufferElementKey key(e->getUid(), e->getPid(), e->getTid());
|
LogBufferElementKey key(e->getUid(), e->getPid(), e->getTid());
|
||||||
android::hash_t hash = android::hash_type(key.getKey());
|
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));
|
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.
|
// 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;
|
leading = false;
|
||||||
|
|
||||||
if (hasBlacklist && mPrune.naughty(e)) {
|
if (hasBlacklist && mPrune.naughty(e)) {
|
||||||
last.clear();
|
last.clear(e);
|
||||||
it = erase(it);
|
it = erase(it);
|
||||||
if (dropped) {
|
if (dropped) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -423,7 +439,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows, uid_t caller_uid) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e->getUid() != worst) {
|
if (e->getUid() != worst) {
|
||||||
last.clear();
|
last.clear(e);
|
||||||
++it;
|
++it;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue