Merge "logd: correct for number of elements in prune"

This commit is contained in:
Mark Salyzyn 2015-10-13 22:20:29 +00:00 committed by Gerrit Code Review
commit cee44732e6
4 changed files with 20 additions and 3 deletions

View file

@ -225,8 +225,11 @@ void LogBuffer::maybePrune(log_id_t id) {
unsigned long maxSize = log_buffer_size(id); unsigned long maxSize = log_buffer_size(id);
if (sizes > maxSize) { if (sizes > maxSize) {
size_t sizeOver = sizes - ((maxSize * 9) / 10); size_t sizeOver = sizes - ((maxSize * 9) / 10);
size_t elements = stats.elements(id); size_t elements = stats.realElements(id);
size_t minElements = elements / 10; size_t minElements = elements / 100;
if (minElements < minPrune) {
minElements = minPrune;
}
unsigned long pruneRows = elements * sizeOver / sizes; unsigned long pruneRows = elements * sizeOver / sizes;
if (pruneRows < minElements) { if (pruneRows < minElements) {
pruneRows = minElements; pruneRows = minElements;

View file

@ -86,6 +86,7 @@ public:
private: private:
static constexpr size_t minPrune = 4;
static constexpr size_t maxPrune = 256; static constexpr size_t maxPrune = 256;
void maybePrune(log_id_t id); void maybePrune(log_id_t id);

View file

@ -27,6 +27,7 @@ LogStatistics::LogStatistics() : enable(false) {
log_id_for_each(id) { log_id_for_each(id) {
mSizes[id] = 0; mSizes[id] = 0;
mElements[id] = 0; mElements[id] = 0;
mDroppedElements[id] = 0;
mSizesTotal[id] = 0; mSizesTotal[id] = 0;
mElementsTotal[id] = 0; mElementsTotal[id] = 0;
} }
@ -93,6 +94,9 @@ void LogStatistics::subtract(LogBufferElement *element) {
unsigned short size = element->getMsgLen(); unsigned short size = element->getMsgLen();
mSizes[log_id] -= size; mSizes[log_id] -= size;
--mElements[log_id]; --mElements[log_id];
if (element->getDropped()) {
--mDroppedElements[log_id];
}
if (log_id == LOG_ID_KERNEL) { if (log_id == LOG_ID_KERNEL) {
return; return;
@ -119,6 +123,7 @@ void LogStatistics::drop(LogBufferElement *element) {
log_id_t log_id = element->getLogId(); log_id_t log_id = element->getLogId();
unsigned short size = element->getMsgLen(); unsigned short size = element->getMsgLen();
mSizes[log_id] -= size; mSizes[log_id] -= size;
++mDroppedElements[log_id];
uidTable[log_id].drop(element->getUid(), element); uidTable[log_id].drop(element->getUid(), element);

View file

@ -374,6 +374,7 @@ struct TagEntry : public EntryBase {
class LogStatistics { class LogStatistics {
size_t mSizes[LOG_ID_MAX]; size_t mSizes[LOG_ID_MAX];
size_t mElements[LOG_ID_MAX]; size_t mElements[LOG_ID_MAX];
size_t mDroppedElements[LOG_ID_MAX];
size_t mSizesTotal[LOG_ID_MAX]; size_t mSizesTotal[LOG_ID_MAX];
size_t mElementsTotal[LOG_ID_MAX]; size_t mElementsTotal[LOG_ID_MAX];
bool enable; bool enable;
@ -404,7 +405,11 @@ public:
// entry->setDropped(1) must follow this call // entry->setDropped(1) must follow this call
void drop(LogBufferElement *entry); void drop(LogBufferElement *entry);
// Correct for coalescing two entries referencing dropped content // Correct for coalescing two entries referencing dropped content
void erase(LogBufferElement *e) { --mElements[e->getLogId()]; } void erase(LogBufferElement *element) {
log_id_t log_id = element->getLogId();
--mElements[log_id];
--mDroppedElements[log_id];
}
std::unique_ptr<const UidEntry *[]> sort(size_t len, log_id id) { std::unique_ptr<const UidEntry *[]> sort(size_t len, log_id id) {
return uidTable[id].sort(len); return uidTable[id].sort(len);
@ -413,6 +418,9 @@ public:
// fast track current value by id only // fast track current value by id only
size_t sizes(log_id_t id) const { return mSizes[id]; } size_t sizes(log_id_t id) const { return mSizes[id]; }
size_t elements(log_id_t id) const { return mElements[id]; } size_t elements(log_id_t id) const { return mElements[id]; }
size_t realElements(log_id_t id) const {
return mElements[id] - mDroppedElements[id];
}
size_t sizesTotal(log_id_t id) const { return mSizesTotal[id]; } size_t sizesTotal(log_id_t id) const { return mSizesTotal[id]; }
size_t elementsTotal(log_id_t id) const { return mElementsTotal[id]; } size_t elementsTotal(log_id_t id) const { return mElementsTotal[id]; }