diff options
author | Mark Salyzyn <salyzyn@google.com> | 2016-07-14 15:34:30 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2016-07-15 14:58:17 -0700 |
commit | 6a06694a610d103afdf424b0bb69dc8f7f2b8e5a (patch) | |
tree | 9b6a836c45e52d9326476f295017185b1a5e0a9e /logd/LogStatistics.h | |
parent | 47684ca59147a3f5de71bf4f2fe6a647bdc6c60e (diff) | |
download | system_core-6a06694a610d103afdf424b0bb69dc8f7f2b8e5a.tar.gz system_core-6a06694a610d103afdf424b0bb69dc8f7f2b8e5a.tar.bz2 system_core-6a06694a610d103afdf424b0bb69dc8f7f2b8e5a.zip |
logd: Worst Tag filter enabled for events buffer
- Add drop logistics to TagTable
- replace uid references to a key reference since it
is an UID for most buffers, but a TAG for the
events and security buffer
- template the find worst entry mechanics into LogFindWorst class
Bug: 30118730
Change-Id: Ibea4be2c50d6ff4b39039e371365fed2453f17a2
Diffstat (limited to 'logd/LogStatistics.h')
-rw-r--r-- | logd/LogStatistics.h | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/logd/LogStatistics.h b/logd/LogStatistics.h index 52f1d5b7b..71ad73aef 100644 --- a/logd/LogStatistics.h +++ b/logd/LogStatistics.h @@ -203,7 +203,7 @@ struct EntryBaseDropped : public EntryBase { EntryBaseDropped():dropped(0) { } EntryBaseDropped(LogBufferElement *element): EntryBase(element), - dropped(element->getDropped()){ + dropped(element->getDropped()) { } size_t getDropped() const { return dropped; } @@ -370,13 +370,13 @@ struct TidEntry : public EntryBaseDropped { std::string format(const LogStatistics &stat, log_id_t id) const; }; -struct TagEntry : public EntryBase { +struct TagEntry : public EntryBaseDropped { const uint32_t tag; pid_t pid; uid_t uid; TagEntry(LogBufferElement *element): - EntryBase(element), + EntryBaseDropped(element), tag(element->getTag()), pid(element->getPid()), uid(element->getUid()) { @@ -401,6 +401,43 @@ struct TagEntry : public EntryBase { std::string format(const LogStatistics &stat, log_id_t id) const; }; +template <typename TEntry> +class LogFindWorst { + std::unique_ptr<const TEntry *[]> sorted; + +public: + + LogFindWorst(std::unique_ptr<const TEntry *[]> &&sorted) : sorted(std::move(sorted)) { } + + void findWorst(int &worst, + size_t &worst_sizes, size_t &second_worst_sizes, + size_t threshold) { + if (sorted.get() && sorted[0] && sorted[1]) { + worst_sizes = sorted[0]->getSizes(); + if ((worst_sizes > threshold) + // Allow time horizon to extend roughly tenfold, assume + // average entry length is 100 characters. + && (worst_sizes > (10 * sorted[0]->getDropped()))) { + worst = sorted[0]->getKey(); + second_worst_sizes = sorted[1]->getSizes(); + if (second_worst_sizes < threshold) { + second_worst_sizes = threshold; + } + } + } + } + + void findWorst(int &worst, + size_t worst_sizes, size_t &second_worst_sizes) { + if (sorted.get() && sorted[0] && sorted[1]) { + worst = sorted[0]->getKey(); + second_worst_sizes = worst_sizes + - sorted[0]->getSizes() + + sorted[1]->getSizes(); + } + } +}; + // Log Statistics class LogStatistics { friend UidEntry; @@ -451,13 +488,14 @@ public: --mDroppedElements[log_id]; } - std::unique_ptr<const UidEntry *[]> sort(uid_t uid, pid_t pid, - size_t len, log_id id) { - return uidTable[id].sort(uid, pid, len); + LogFindWorst<UidEntry> sort(uid_t uid, pid_t pid, size_t len, log_id id) { + return LogFindWorst<UidEntry>(uidTable[id].sort(uid, pid, len)); + } + LogFindWorst<PidEntry> sortPids(uid_t uid, pid_t pid, size_t len, log_id id) { + return LogFindWorst<PidEntry>(pidSystemTable[id].sort(uid, pid, len)); } - std::unique_ptr<const PidEntry *[]> sortPids(uid_t uid, pid_t pid, - size_t len, log_id id) { - return pidSystemTable[id].sort(uid, pid, len); + LogFindWorst<TagEntry> sortTags(uid_t uid, pid_t pid, size_t len, log_id) { + return LogFindWorst<TagEntry>(tagTable.sort(uid, pid, len)); } // fast track current value by id only |