Loading logd/LogBuffer.cpp +8 −11 Original line number Diff line number Diff line Loading @@ -167,17 +167,14 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) { if ((id != LOG_ID_CRASH) && mPrune.worstUidEnabled()) { LidStatistics &l = stats.id(id); UidStatisticsCollection::iterator iu; for (iu = l.begin(); iu != l.end(); ++iu) { UidStatistics *u = (*iu); size_t sizes = u->sizes(); if (worst_sizes < sizes) { second_worst_sizes = worst_sizes; worst_sizes = sizes; l.sort(); UidStatisticsCollection::iterator iu = l.begin(); if (iu != l.end()) { UidStatistics *u = *iu; worst = u->getUid(); } if ((second_worst_sizes < sizes) && (sizes < worst_sizes)) { second_worst_sizes = sizes; worst_sizes = u->sizes(); if (++iu != l.end()) { second_worst_sizes = (*iu)->sizes(); } } } Loading logd/LogStatistics.cpp +87 −25 Original line number Diff line number Diff line Loading @@ -96,7 +96,9 @@ char *PidStatistics::pidToName(pid_t pid) { } UidStatistics::UidStatistics(uid_t uid) : uid(uid) { : uid(uid) , mSizes(0) , mElements(0) { Pids.clear(); } Loading @@ -109,6 +111,9 @@ UidStatistics::~UidStatistics() { } void UidStatistics::add(unsigned short size, pid_t pid) { mSizes += size; ++mElements; PidStatistics *p; PidStatisticsCollection::iterator last; PidStatisticsCollection::iterator it; Loading @@ -116,18 +121,11 @@ void UidStatistics::add(unsigned short size, pid_t pid) { p = *it; if (pid == p->getPid()) { p->add(size); // poor-man sort, bubble upwards if bigger than last if ((last != it) && ((*last)->sizesTotal() < p->sizesTotal())) { Pids.erase(it); Pids.insert(last, p); } return; } } // poor-man sort, insert if bigger than last or last is the gone entry. bool insert = (last != it) && ((p->getPid() == p->gone) || ((*last)->sizesTotal() < (size_t) size)); // insert if the gone entry. bool insert = (last != it) && (p->getPid() == p->gone); p = new PidStatistics(pid, pidToName(pid)); if (insert) { Pids.insert(last, p); Loading @@ -138,6 +136,9 @@ void UidStatistics::add(unsigned short size, pid_t pid) { } void UidStatistics::subtract(unsigned short size, pid_t pid) { mSizes -= size; --mElements; PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; Loading Loading @@ -166,28 +167,57 @@ void UidStatistics::subtract(unsigned short size, pid_t pid) { } } void UidStatistics::sort() { for (bool pass = true; pass;) { pass = false; PidStatisticsCollection::iterator it = begin(); if (it != end()) { PidStatisticsCollection::iterator lt = it; PidStatistics *l = (*lt); while (++it != end()) { PidStatistics *n = (*it); if ((n->getPid() != n->gone) && (n->sizes() > l->sizes())) { pass = true; Pids.erase(it); Pids.insert(lt, n); it = lt; n = l; } lt = it; l = n; } } } } size_t UidStatistics::sizes(pid_t pid) { size_t sizes = 0; if (pid == pid_all) { return sizes(); } PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; if ((pid == pid_all) || (pid == p->getPid())) { sizes += p->sizes(); if (pid == p->getPid()) { return p->sizes(); } } return sizes; return 0; } size_t UidStatistics::elements(pid_t pid) { size_t elements = 0; if (pid == pid_all) { return elements(); } PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; if ((pid == pid_all) || (pid == p->getPid())) { elements += p->elements(); if (pid == p->getPid()) { return p->elements(); } } return elements; return 0; } size_t UidStatistics::sizesTotal(pid_t pid) { Loading Loading @@ -266,6 +296,29 @@ void LidStatistics::subtract(unsigned short size, uid_t uid, pid_t pid) { } } void LidStatistics::sort() { for (bool pass = true; pass;) { pass = false; UidStatisticsCollection::iterator it = begin(); if (it != end()) { UidStatisticsCollection::iterator lt = it; UidStatistics *l = (*lt); while (++it != end()) { UidStatistics *n = (*it); if (n->sizes() > l->sizes()) { pass = true; Uids.erase(it); Uids.insert(lt, n); it = lt; n = l; } lt = it; l = n; } } } } size_t LidStatistics::sizes(uid_t uid, pid_t pid) { size_t sizes = 0; UidStatisticsCollection::iterator it; Loading Loading @@ -455,13 +508,22 @@ void LogStatistics::format(char **buf, short spaces = 2; log_id_for_each(i) { if (logMask & (1 << i)) { if (!logMask & (1 << i)) { continue; } oldLength = string.length(); if (spaces < 0) { spaces = 0; } string.appendFormat("%*s%s", spaces, "", android_log_id_to_name(i)); spaces += spaces_total + oldLength - string.length(); LidStatistics &l = id(i); l.sort(); UidStatisticsCollection::iterator iu; for (iu = l.begin(); iu != l.end(); ++iu) { (*iu)->sort(); } } Loading logd/LogStatistics.h +13 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class UidStatistics { PidStatisticsCollection Pids; size_t mSizes; size_t mElements; public: UidStatistics(uid_t uid); ~UidStatistics(); Loading @@ -81,11 +84,17 @@ public: void add(unsigned short size, pid_t pid); void subtract(unsigned short size, pid_t pid); void sort(); static const pid_t pid_all = (pid_t) -1; size_t sizes(pid_t pid = pid_all); size_t elements(pid_t pid = pid_all); // fast track current value size_t sizes() const { return mSizes; }; size_t elements() const { return mElements; }; // statistical track size_t sizes(pid_t pid); size_t elements(pid_t pid); size_t sizesTotal(pid_t pid = pid_all); size_t elementsTotal(pid_t pid = pid_all); Loading @@ -108,6 +117,7 @@ public: void add(unsigned short size, uid_t uid, pid_t pid); void subtract(unsigned short size, uid_t uid, pid_t pid); void sort(); static const pid_t pid_all = (pid_t) -1; static const uid_t uid_all = (uid_t) -1; Loading Loading @@ -145,6 +155,7 @@ public: void add(unsigned short size, log_id_t log_id, uid_t uid, pid_t pid); void subtract(unsigned short size, log_id_t log_id, uid_t uid, pid_t pid); void sort(); // fast track current value by id only size_t sizes(log_id_t id) const { return mSizes[id]; } Loading Loading
logd/LogBuffer.cpp +8 −11 Original line number Diff line number Diff line Loading @@ -167,17 +167,14 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) { if ((id != LOG_ID_CRASH) && mPrune.worstUidEnabled()) { LidStatistics &l = stats.id(id); UidStatisticsCollection::iterator iu; for (iu = l.begin(); iu != l.end(); ++iu) { UidStatistics *u = (*iu); size_t sizes = u->sizes(); if (worst_sizes < sizes) { second_worst_sizes = worst_sizes; worst_sizes = sizes; l.sort(); UidStatisticsCollection::iterator iu = l.begin(); if (iu != l.end()) { UidStatistics *u = *iu; worst = u->getUid(); } if ((second_worst_sizes < sizes) && (sizes < worst_sizes)) { second_worst_sizes = sizes; worst_sizes = u->sizes(); if (++iu != l.end()) { second_worst_sizes = (*iu)->sizes(); } } } Loading
logd/LogStatistics.cpp +87 −25 Original line number Diff line number Diff line Loading @@ -96,7 +96,9 @@ char *PidStatistics::pidToName(pid_t pid) { } UidStatistics::UidStatistics(uid_t uid) : uid(uid) { : uid(uid) , mSizes(0) , mElements(0) { Pids.clear(); } Loading @@ -109,6 +111,9 @@ UidStatistics::~UidStatistics() { } void UidStatistics::add(unsigned short size, pid_t pid) { mSizes += size; ++mElements; PidStatistics *p; PidStatisticsCollection::iterator last; PidStatisticsCollection::iterator it; Loading @@ -116,18 +121,11 @@ void UidStatistics::add(unsigned short size, pid_t pid) { p = *it; if (pid == p->getPid()) { p->add(size); // poor-man sort, bubble upwards if bigger than last if ((last != it) && ((*last)->sizesTotal() < p->sizesTotal())) { Pids.erase(it); Pids.insert(last, p); } return; } } // poor-man sort, insert if bigger than last or last is the gone entry. bool insert = (last != it) && ((p->getPid() == p->gone) || ((*last)->sizesTotal() < (size_t) size)); // insert if the gone entry. bool insert = (last != it) && (p->getPid() == p->gone); p = new PidStatistics(pid, pidToName(pid)); if (insert) { Pids.insert(last, p); Loading @@ -138,6 +136,9 @@ void UidStatistics::add(unsigned short size, pid_t pid) { } void UidStatistics::subtract(unsigned short size, pid_t pid) { mSizes -= size; --mElements; PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; Loading Loading @@ -166,28 +167,57 @@ void UidStatistics::subtract(unsigned short size, pid_t pid) { } } void UidStatistics::sort() { for (bool pass = true; pass;) { pass = false; PidStatisticsCollection::iterator it = begin(); if (it != end()) { PidStatisticsCollection::iterator lt = it; PidStatistics *l = (*lt); while (++it != end()) { PidStatistics *n = (*it); if ((n->getPid() != n->gone) && (n->sizes() > l->sizes())) { pass = true; Pids.erase(it); Pids.insert(lt, n); it = lt; n = l; } lt = it; l = n; } } } } size_t UidStatistics::sizes(pid_t pid) { size_t sizes = 0; if (pid == pid_all) { return sizes(); } PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; if ((pid == pid_all) || (pid == p->getPid())) { sizes += p->sizes(); if (pid == p->getPid()) { return p->sizes(); } } return sizes; return 0; } size_t UidStatistics::elements(pid_t pid) { size_t elements = 0; if (pid == pid_all) { return elements(); } PidStatisticsCollection::iterator it; for (it = begin(); it != end(); ++it) { PidStatistics *p = *it; if ((pid == pid_all) || (pid == p->getPid())) { elements += p->elements(); if (pid == p->getPid()) { return p->elements(); } } return elements; return 0; } size_t UidStatistics::sizesTotal(pid_t pid) { Loading Loading @@ -266,6 +296,29 @@ void LidStatistics::subtract(unsigned short size, uid_t uid, pid_t pid) { } } void LidStatistics::sort() { for (bool pass = true; pass;) { pass = false; UidStatisticsCollection::iterator it = begin(); if (it != end()) { UidStatisticsCollection::iterator lt = it; UidStatistics *l = (*lt); while (++it != end()) { UidStatistics *n = (*it); if (n->sizes() > l->sizes()) { pass = true; Uids.erase(it); Uids.insert(lt, n); it = lt; n = l; } lt = it; l = n; } } } } size_t LidStatistics::sizes(uid_t uid, pid_t pid) { size_t sizes = 0; UidStatisticsCollection::iterator it; Loading Loading @@ -455,13 +508,22 @@ void LogStatistics::format(char **buf, short spaces = 2; log_id_for_each(i) { if (logMask & (1 << i)) { if (!logMask & (1 << i)) { continue; } oldLength = string.length(); if (spaces < 0) { spaces = 0; } string.appendFormat("%*s%s", spaces, "", android_log_id_to_name(i)); spaces += spaces_total + oldLength - string.length(); LidStatistics &l = id(i); l.sort(); UidStatisticsCollection::iterator iu; for (iu = l.begin(); iu != l.end(); ++iu) { (*iu)->sort(); } } Loading
logd/LogStatistics.h +13 −2 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ class UidStatistics { PidStatisticsCollection Pids; size_t mSizes; size_t mElements; public: UidStatistics(uid_t uid); ~UidStatistics(); Loading @@ -81,11 +84,17 @@ public: void add(unsigned short size, pid_t pid); void subtract(unsigned short size, pid_t pid); void sort(); static const pid_t pid_all = (pid_t) -1; size_t sizes(pid_t pid = pid_all); size_t elements(pid_t pid = pid_all); // fast track current value size_t sizes() const { return mSizes; }; size_t elements() const { return mElements; }; // statistical track size_t sizes(pid_t pid); size_t elements(pid_t pid); size_t sizesTotal(pid_t pid = pid_all); size_t elementsTotal(pid_t pid = pid_all); Loading @@ -108,6 +117,7 @@ public: void add(unsigned short size, uid_t uid, pid_t pid); void subtract(unsigned short size, uid_t uid, pid_t pid); void sort(); static const pid_t pid_all = (pid_t) -1; static const uid_t uid_all = (uid_t) -1; Loading Loading @@ -145,6 +155,7 @@ public: void add(unsigned short size, log_id_t log_id, uid_t uid, pid_t pid); void subtract(unsigned short size, log_id_t log_id, uid_t uid, pid_t pid); void sort(); // fast track current value by id only size_t sizes(log_id_t id) const { return mSizes[id]; } Loading