am 78617a08: Merge changes Id25cdef0,I80685cdc,I929dddc7
* commit '78617a0875ccf5662dc69a6fbcc72a7a39ab42a3': logd: Add SCHED_BATCH to reduce priority logd: Adjust to match defacto coding style logd: prune more aggressively when over the top
This commit is contained in:
commit
8dd3ad1281
6 changed files with 30 additions and 16 deletions
|
|
@ -63,7 +63,7 @@ void FlushCommand::runSocketCommand(SocketClient *client) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (it == times.end()) {
|
if (it == times.end()) {
|
||||||
/* Create LogTimeEntry in notifyNewLog() ? */
|
// Create LogTimeEntry in notifyNewLog() ?
|
||||||
if (mTail == (unsigned long) -1) {
|
if (mTail == (unsigned long) -1) {
|
||||||
LogTimeEntry::unlock();
|
LogTimeEntry::unlock();
|
||||||
return;
|
return;
|
||||||
|
|
@ -74,7 +74,7 @@ void FlushCommand::runSocketCommand(SocketClient *client) {
|
||||||
|
|
||||||
client->incRef();
|
client->incRef();
|
||||||
|
|
||||||
/* release client and entry reference counts once done */
|
// release client and entry reference counts once done
|
||||||
entry->startReader_Locked();
|
entry->startReader_Locked();
|
||||||
LogTimeEntry::unlock();
|
LogTimeEntry::unlock();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,11 +52,12 @@ void LogBuffer::log(log_id_t log_id, struct timespec realtime,
|
||||||
LogBufferElementCollection::iterator it = mLogElements.end();
|
LogBufferElementCollection::iterator it = mLogElements.end();
|
||||||
LogBufferElementCollection::iterator last = it;
|
LogBufferElementCollection::iterator last = it;
|
||||||
while (--it != mLogElements.begin()) {
|
while (--it != mLogElements.begin()) {
|
||||||
if ((*it)->getRealTime() <= elem->getRealTime()) {
|
if ((*it)->getRealTime() <= realtime) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
last = it;
|
last = it;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last == mLogElements.end()) {
|
if (last == mLogElements.end()) {
|
||||||
mLogElements.push_back(elem);
|
mLogElements.push_back(elem);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -83,7 +84,7 @@ void LogBuffer::log(log_id_t log_id, struct timespec realtime,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end_always
|
if (end_always
|
||||||
|| (end_set && (end >= (*last)->getMonotonicTime()))) {
|
|| (end_set && (end >= (*last)->getMonotonicTime()))) {
|
||||||
mLogElements.push_back(elem);
|
mLogElements.push_back(elem);
|
||||||
} else {
|
} else {
|
||||||
mLogElements.insert(last,elem);
|
mLogElements.insert(last,elem);
|
||||||
|
|
@ -99,12 +100,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
|
// 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.
|
// mLogElementsLock must be held when this function is called.
|
||||||
void LogBuffer::maybePrune(log_id_t id) {
|
void LogBuffer::maybePrune(log_id_t id) {
|
||||||
if (mSizes[id] > LOG_BUFFER_SIZE) {
|
unsigned long sizes = mSizes[id];
|
||||||
prune(id, mElements[id] / 10);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,6 @@
|
||||||
|
|
||||||
#include "LogCommand.h"
|
#include "LogCommand.h"
|
||||||
|
|
||||||
LogCommand::LogCommand(const char *cmd) :
|
LogCommand::LogCommand(const char *cmd)
|
||||||
FrameworkCommand(cmd) {
|
: FrameworkCommand(cmd) {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -160,7 +160,7 @@ bool LogTimeEntry::FilterFirstPass(const LogBufferElement *element, void *obj) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!me->mPid || (me->mPid == element->getPid()))
|
if ((!me->mPid || (me->mPid == element->getPid()))
|
||||||
&& (me->mLogMask & (1 << element->getLogId()))) {
|
&& (me->mLogMask & (1 << element->getLogId()))) {
|
||||||
++me->mCount;
|
++me->mCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,16 +59,14 @@ public:
|
||||||
|
|
||||||
void startReader_Locked(void);
|
void startReader_Locked(void);
|
||||||
|
|
||||||
bool runningReader_Locked(void) const
|
bool runningReader_Locked(void) const {
|
||||||
{
|
|
||||||
return threadRunning || mRelease || mError || mNonBlock;
|
return threadRunning || mRelease || mError || mNonBlock;
|
||||||
}
|
}
|
||||||
void triggerReader_Locked(void) { threadTriggered = true; }
|
void triggerReader_Locked(void) { threadTriggered = true; }
|
||||||
void triggerSkip_Locked(unsigned int skip) { skipAhead = skip; }
|
void triggerSkip_Locked(unsigned int skip) { skipAhead = skip; }
|
||||||
|
|
||||||
// Called after LogTimeEntry removed from list, lock implicitly held
|
// Called after LogTimeEntry removed from list, lock implicitly held
|
||||||
void release_Locked(void)
|
void release_Locked(void) {
|
||||||
{
|
|
||||||
mRelease = true;
|
mRelease = true;
|
||||||
if (mRefCount || threadRunning) {
|
if (mRefCount || threadRunning) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -89,8 +87,7 @@ public:
|
||||||
|
|
||||||
bool owned_Locked(void) const { return mRefCount != 0; }
|
bool owned_Locked(void) const { return mRefCount != 0; }
|
||||||
|
|
||||||
void decRef_Locked(void)
|
void decRef_Locked(void) {
|
||||||
{
|
|
||||||
if ((mRefCount && --mRefCount) || !mRelease || threadRunning) {
|
if ((mRefCount && --mRefCount) || !mRelease || threadRunning) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <sched.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
@ -32,6 +33,13 @@
|
||||||
#include "LogListener.h"
|
#include "LogListener.h"
|
||||||
|
|
||||||
static int drop_privs() {
|
static int drop_privs() {
|
||||||
|
struct sched_param param;
|
||||||
|
memset(¶m, 0, sizeof(param));
|
||||||
|
|
||||||
|
if (sched_setscheduler((pid_t) 0, SCHED_BATCH, ¶m) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (prctl(PR_SET_KEEPCAPS, 1) < 0) {
|
if (prctl(PR_SET_KEEPCAPS, 1) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue