summaryrefslogtreecommitdiffstats
path: root/logd
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2014-01-13 16:37:51 -0800
committerMark Salyzyn <salyzyn@google.com>2014-02-26 09:53:55 -0800
commit740f9b4f97d6311b29fa885e86413d51d8c92d53 (patch)
tree5565cf83d86a2a0fbd644aff475df5b2b27ff1b4 /logd
parent0175b0747a1f55329109e84c9a1322dcb95e2848 (diff)
downloadsystem_core-740f9b4f97d6311b29fa885e86413d51d8c92d53.zip
system_core-740f9b4f97d6311b29fa885e86413d51d8c92d53.tar.gz
system_core-740f9b4f97d6311b29fa885e86413d51d8c92d53.tar.bz2
logd: prune more aggressively when over the top
(cherry picked from commit 63c15d50615a4c9e9ad25f601ef9dcb1161d8990) Change-Id: I929dddc7da048c032fb791c7af23f215f8856bf3
Diffstat (limited to 'logd')
-rw-r--r--logd/LogBuffer.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/logd/LogBuffer.cpp b/logd/LogBuffer.cpp
index 8b273e2..64d5cc2 100644
--- a/logd/LogBuffer.cpp
+++ b/logd/LogBuffer.cpp
@@ -99,12 +99,20 @@ void LogBuffer::log(log_id_t log_id, struct timespec realtime,
}
// If we're using more than 256K of memory for log entries, prune
-// 10% of the log entries.
+// at least 10% of the log entries.
//
// mLogElementsLock must be held when this function is called.
void LogBuffer::maybePrune(log_id_t id) {
- if (mSizes[id] > LOG_BUFFER_SIZE) {
- prune(id, mElements[id] / 10);
+ unsigned long sizes = mSizes[id];
+ if (sizes > LOG_BUFFER_SIZE) {
+ unsigned long sizeOver90Percent = sizes - ((LOG_BUFFER_SIZE * 9) / 10);
+ unsigned long elements = mElements[id];
+ unsigned long pruneRows = elements * sizeOver90Percent / sizes;
+ elements /= 10;
+ if (pruneRows <= elements) {
+ pruneRows = elements;
+ }
+ prune(id, pruneRows);
}
}