summaryrefslogtreecommitdiffstats
path: root/logd/LogStatistics.cpp
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2015-08-24 11:08:00 -0700
committerMark Salyzyn <salyzyn@google.com>2015-10-30 14:54:17 -0700
commitc723df805a1a3199577cac947cebf2ab53abdb34 (patch)
treeed11c18fc67a5e2516c78a81199cd2c2f8806f98 /logd/LogStatistics.cpp
parent932f7acc81b3769d1d73545469667565d41cc46d (diff)
downloadcore-c723df805a1a3199577cac947cebf2ab53abdb34.tar.gz
core-c723df805a1a3199577cac947cebf2ab53abdb34.tar.bz2
core-c723df805a1a3199577cac947cebf2ab53abdb34.zip
logd: statistics report chatty effective percentage
Report the ESTIMATED instantaneous percentage decrease or increase that an UID has to the logs as a result of the chatty filtration. Bug: 22855208 Change-Id: If1e77afb81a2739a72b39bc7c57071763c1d64d8
Diffstat (limited to 'logd/LogStatistics.cpp')
-rw-r--r--logd/LogStatistics.cpp60
1 files changed, 55 insertions, 5 deletions
diff --git a/logd/LogStatistics.cpp b/logd/LogStatistics.cpp
index fdb2576d6..416edd8a1 100644
--- a/logd/LogStatistics.cpp
+++ b/logd/LogStatistics.cpp
@@ -190,13 +190,13 @@ std::string UidEntry::formatHeader(const std::string &name, log_id_t id) const {
return formatLine(android::base::StringPrintf(
name.c_str(), android_log_id_to_name(id)),
std::string("Size"),
- std::string(isprune ? "Pruned" : ""))
+ std::string(isprune ? "+/- Pruned" : ""))
+ formatLine(std::string("UID PACKAGE"),
std::string("BYTES"),
std::string(isprune ? "NUM" : ""));
}
-std::string UidEntry::format(const LogStatistics &stat, log_id_t /* id */) const {
+std::string UidEntry::format(const LogStatistics &stat, log_id_t id) const {
uid_t uid = getKey();
std::string name = android::base::StringPrintf("%u", uid);
const char *nameTmp = stat.uidToName(uid);
@@ -210,9 +210,59 @@ std::string UidEntry::format(const LogStatistics &stat, log_id_t /* id */) const
std::string size = android::base::StringPrintf("%zu", getSizes());
std::string pruned = "";
- size_t dropped = getDropped();
- if (dropped) {
- pruned = android::base::StringPrintf("%zu", dropped);
+ if (worstUidEnabledForLogid(id)) {
+ size_t totalDropped = 0;
+ for (LogStatistics::uidTable_t::const_iterator it = stat.uidTable[id].begin();
+ it != stat.uidTable[id].end(); ++it) {
+ totalDropped += it->second.getDropped();
+ }
+ size_t sizes = stat.sizes(id);
+ size_t totalSize = stat.sizesTotal(id);
+ size_t totalElements = stat.elementsTotal(id);
+ float totalVirtualSize = (float)sizes + (float)totalDropped * totalSize
+ / totalElements;
+ size_t entrySize = getSizes();
+ float virtualEntrySize = entrySize;
+ int realPermille = virtualEntrySize * 1000.0 / sizes;
+ size_t dropped = getDropped();
+ if (dropped) {
+ pruned = android::base::StringPrintf("%zu", dropped);
+ virtualEntrySize += (float)dropped * totalSize / totalElements;
+ }
+ int virtualPermille = virtualEntrySize * 1000.0 / totalVirtualSize;
+ int permille = (realPermille - virtualPermille) * 1000L
+ / (virtualPermille ?: 1);
+ if ((permille < -1) || (1 < permille)) {
+ std::string change;
+ const char *units = "%";
+ const char *prefix = (permille > 0) ? "+" : "";
+
+ if (permille > 999) {
+ permille = (permille + 1000) / 100; // Now tenths fold
+ units = "X";
+ prefix = "";
+ }
+ if ((-99 < permille) && (permille < 99)) {
+ change = android::base::StringPrintf("%s%d.%u%s",
+ prefix,
+ permille / 10,
+ ((permille < 0) ? (-permille % 10) : (permille % 10)),
+ units);
+ } else {
+ change = android::base::StringPrintf("%s%d%s",
+ prefix,
+ (permille + 5) / 10, units);
+ }
+ ssize_t spaces = EntryBaseConstants::pruned_len
+ - 2 - pruned.length() - change.length();
+ if ((spaces <= 0) && pruned.length()) {
+ spaces = 1;
+ }
+ if (spaces > 0) {
+ change += android::base::StringPrintf("%*s", (int)spaces, "");
+ }
+ pruned = change + pruned;
+ }
}
return formatLine(name, size, pruned);