diff options
author | Mark Salyzyn <salyzyn@google.com> | 2015-08-28 08:02:59 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2015-12-29 09:32:35 -0800 |
commit | bec3c3def945576d59d3344c16e149e6d9154e15 (patch) | |
tree | 1d44969f1a6166daa35dcdaad1312db81e46e342 /logd/LogStatistics.cpp | |
parent | 420b64160c498900247314be78349654583a4455 (diff) | |
download | system_core-bec3c3def945576d59d3344c16e149e6d9154e15.tar.gz system_core-bec3c3def945576d59d3344c16e149e6d9154e15.tar.bz2 system_core-bec3c3def945576d59d3344c16e149e6d9154e15.zip |
logd: Add worst pid of system filter
- Add a new statistic that reports per pid and log_id for AID_SYSTEM
- Add a new pruning filter ~1000/! boolean
- Use this new statistic to prune on worst pid within AID_SYSTEM
Bug: 26029733
Bug: 21615139
Bug: 22855208
Change-Id: Iab5dd28f807dcf03d276372853883f3b6afa8294
Diffstat (limited to 'logd/LogStatistics.cpp')
-rw-r--r-- | logd/LogStatistics.cpp | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/logd/LogStatistics.cpp b/logd/LogStatistics.cpp index afaefc25f..2b02bc1d7 100644 --- a/logd/LogStatistics.cpp +++ b/logd/LogStatistics.cpp @@ -75,6 +75,9 @@ void LogStatistics::add(LogBufferElement *element) { } uidTable[log_id].add(element->getUid(), element); + if (element->getUid() == AID_SYSTEM) { + pidSystemTable[log_id].add(element->getPid(), element); + } if (!enable) { return; @@ -107,6 +110,9 @@ void LogStatistics::subtract(LogBufferElement *element) { } uidTable[log_id].subtract(element->getUid(), element); + if (element->getUid() == AID_SYSTEM) { + pidSystemTable[log_id].subtract(element->getPid(), element); + } if (!enable) { return; @@ -134,6 +140,9 @@ void LogStatistics::drop(LogBufferElement *element) { ++mDroppedElements[log_id]; uidTable[log_id].drop(element->getUid(), element); + if (element->getUid() == AID_SYSTEM) { + pidSystemTable[log_id].drop(element->getPid(), element); + } if (!enable) { return; @@ -273,7 +282,43 @@ std::string UidEntry::format(const LogStatistics &stat, log_id_t id) const { } } - return formatLine(name, size, pruned); + std::string output = formatLine(name, size, pruned); + + if (uid != AID_SYSTEM) { + return output; + } + + static const size_t maximum_sorted_entries = 32; + std::unique_ptr<const PidEntry *[]> sorted + = stat.pidSystemTable[id].sort(uid, (pid_t)0, maximum_sorted_entries); + + if (!sorted.get()) { + return output; + } + std::string byPid; + size_t index; + bool hasDropped = false; + for (index = 0; index < maximum_sorted_entries; ++index) { + const PidEntry *entry = sorted[index]; + if (!entry) { + break; + } + if (entry->getSizes() <= (getSizes() / 100)) { + break; + } + if (entry->getDropped()) { + hasDropped = true; + } + byPid += entry->format(stat, id); + } + if (index > 1) { // print this only if interesting + std::string ditto("\" "); + output += formatLine(std::string(" PID/UID COMMAND LINE"), + ditto, hasDropped ? ditto : std::string("")); + output += byPid; + } + + return output; } std::string PidEntry::formatHeader(const std::string &name, log_id_t /* id */) const { |