From b39ed0c9925356c74a6347630b04d875288d803b Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Wed, 19 Aug 2015 12:20:36 -0700 Subject: [PATCH 1/4] logd: prune 10% or 256 entries max Bug: 22351810 Bug: 23327476 Change-Id: I902ba6b431d8b7cee2d65ee2f76e9f7c4f30b152 --- logd/LogBuffer.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/logd/LogBuffer.cpp b/logd/LogBuffer.cpp index b9e8973ac..85f770a95 100644 --- a/logd/LogBuffer.cpp +++ b/logd/LogBuffer.cpp @@ -217,27 +217,23 @@ int LogBuffer::log(log_id_t log_id, log_time realtime, return len; } -// If we're using more than 256K of memory for log entries, prune -// at least 10% of the log entries. For sizes above 1M, prune at -// least 1% of the log entries. +// Prune at most 10% of the log entries or 256, whichever is less. // // mLogElementsLock must be held when this function is called. void LogBuffer::maybePrune(log_id_t id) { size_t sizes = stats.sizes(id); unsigned long maxSize = log_buffer_size(id); if (sizes > maxSize) { - size_t sizeOver, minElements, elements = stats.elements(id); - if (maxSize > (4 * LOG_BUFFER_SIZE)) { - sizeOver = sizes - ((maxSize * 99) / 100); - minElements = elements / 100; - } else { - sizeOver = sizes - ((maxSize * 9) / 10); - minElements = elements / 10; - } + size_t sizeOver = sizes - ((maxSize * 9) / 10); + size_t elements = stats.elements(id); + size_t minElements = elements / 10; unsigned long pruneRows = elements * sizeOver / sizes; if (pruneRows <= minElements) { pruneRows = minElements; } + if (pruneRows > 256) { + pruneRows = 256; + } prune(id, pruneRows); } } From 98dca2d0b15f9a579efae8592dbb45059aad082e Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Wed, 19 Aug 2015 13:10:14 -0700 Subject: [PATCH 2/4] logd: logtimes switch to std::list Bug: 23350706 Change-Id: Icc60dd06119ea20a22610644ff880d5135363aba --- logd/FlushCommand.cpp | 2 +- logd/LogTimes.h | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/logd/FlushCommand.cpp b/logd/FlushCommand.cpp index d58492586..823a842fb 100644 --- a/logd/FlushCommand.cpp +++ b/logd/FlushCommand.cpp @@ -72,7 +72,7 @@ void FlushCommand::runSocketCommand(SocketClient *client) { return; } entry = new LogTimeEntry(mReader, client, mNonBlock, mTail, mLogMask, mPid, mStart); - times.push_back(entry); + times.push_front(entry); } client->incRef(); diff --git a/logd/LogTimes.h b/logd/LogTimes.h index 783bce675..39bcdd4e6 100644 --- a/logd/LogTimes.h +++ b/logd/LogTimes.h @@ -20,8 +20,10 @@ #include #include #include + +#include + #include -#include #include class LogReader; @@ -107,6 +109,6 @@ public: static int FilterSecondPass(const LogBufferElement *element, void *me); }; -typedef android::List LastLogTimes; +typedef std::list LastLogTimes; -#endif +#endif // _LOGD_LOG_TIMES_H__ From e0ed16c6db5c443ecb5f9f7daca95a111fd1f582 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Wed, 19 Aug 2015 13:31:31 -0700 Subject: [PATCH 3/4] logd: white and black switch to std::list Bug: 23350706 Change-Id: I981d9fa63a0d87eb309485cca93cfc44fc0506cc --- logd/LogWhiteBlackList.cpp | 28 +++++++++++----------------- logd/LogWhiteBlackList.h | 4 ++-- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/logd/LogWhiteBlackList.cpp b/logd/LogWhiteBlackList.cpp index 277b3caf4..16dd6d2f0 100644 --- a/logd/LogWhiteBlackList.cpp +++ b/logd/LogWhiteBlackList.cpp @@ -50,18 +50,14 @@ void Prune::format(char **strp) { } PruneList::PruneList() : mWorstUidEnabled(true) { - mNaughty.clear(); - mNice.clear(); } PruneList::~PruneList() { PruneCollection::iterator it; for (it = mNice.begin(); it != mNice.end();) { - delete (*it); it = mNice.erase(it); } for (it = mNaughty.begin(); it != mNaughty.end();) { - delete (*it); it = mNaughty.erase(it); } } @@ -70,11 +66,9 @@ int PruneList::init(char *str) { mWorstUidEnabled = true; PruneCollection::iterator it; for (it = mNice.begin(); it != mNice.end();) { - delete (*it); it = mNice.erase(it); } for (it = mNaughty.begin(); it != mNaughty.end();) { - delete (*it); it = mNaughty.erase(it); } @@ -142,28 +136,28 @@ int PruneList::init(char *str) { // insert sequentially into list PruneCollection::iterator it = list->begin(); while (it != list->end()) { - Prune *p = *it; - int m = uid - p->mUid; + Prune &p = *it; + int m = uid - p.mUid; if (m == 0) { - if (p->mPid == p->pid_all) { + if (p.mPid == p.pid_all) { break; } - if ((pid == p->pid_all) && (p->mPid != p->pid_all)) { + if ((pid == p.pid_all) && (p.mPid != p.pid_all)) { it = list->erase(it); continue; } - m = pid - p->mPid; + m = pid - p.mPid; } if (m <= 0) { if (m < 0) { - list->insert(it, new Prune(uid,pid)); + list->insert(it, Prune(uid,pid)); } break; } ++it; } if (it == list->end()) { - list->push_back(new Prune(uid,pid)); + list->push_back(Prune(uid,pid)); } if (!*str) { break; @@ -193,7 +187,7 @@ void PruneList::format(char **strp) { for (it = mNice.begin(); it != mNice.end(); ++it) { char *a = NULL; - (*it)->format(&a); + (*it).format(&a); string.appendFormat(fmt, a); fmt = nice_format; @@ -205,7 +199,7 @@ void PruneList::format(char **strp) { fmt = naughty_format + (*fmt != ' '); for (it = mNaughty.begin(); it != mNaughty.end(); ++it) { char *a = NULL; - (*it)->format(&a); + (*it).format(&a); string.appendFormat(fmt, a); fmt = naughty_format; @@ -223,7 +217,7 @@ void PruneList::format(char **strp) { bool PruneList::naughty(LogBufferElement *element) { PruneCollection::iterator it; for (it = mNaughty.begin(); it != mNaughty.end(); ++it) { - if (!(*it)->cmp(element)) { + if (!(*it).cmp(element)) { return true; } } @@ -233,7 +227,7 @@ bool PruneList::naughty(LogBufferElement *element) { bool PruneList::nice(LogBufferElement *element) { PruneCollection::iterator it; for (it = mNice.begin(); it != mNice.end(); ++it) { - if (!(*it)->cmp(element)) { + if (!(*it).cmp(element)) { return true; } } diff --git a/logd/LogWhiteBlackList.h b/logd/LogWhiteBlackList.h index 5f60801aa..57cd03b98 100644 --- a/logd/LogWhiteBlackList.h +++ b/logd/LogWhiteBlackList.h @@ -19,7 +19,7 @@ #include -#include +#include #include @@ -47,7 +47,7 @@ public: void format(char **strp); }; -typedef android::List PruneCollection; +typedef std::list PruneCollection; class PruneList { PruneCollection mNaughty; From 94a89c42fe9521f5ac2d382a172c082ca421d6c3 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Wed, 19 Aug 2015 13:41:51 -0700 Subject: [PATCH 4/4] logd: log buffer switch to std::list Bug: 23350706 Bug: 23327476 Change-Id: Ib0530b9dd5842c6d05c84d7a66f2531c97461067 --- logd/LogBuffer.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/logd/LogBuffer.h b/logd/LogBuffer.h index a13fded8b..76571c67d 100644 --- a/logd/LogBuffer.h +++ b/logd/LogBuffer.h @@ -19,9 +19,10 @@ #include +#include + #include #include -#include #include @@ -30,7 +31,7 @@ #include "LogStatistics.h" #include "LogWhiteBlackList.h" -typedef android::List LogBufferElementCollection; +typedef std::list LogBufferElementCollection; class LogBuffer { LogBufferElementCollection mLogElements;