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()) {
|
||||
/* Create LogTimeEntry in notifyNewLog() ? */
|
||||
// Create LogTimeEntry in notifyNewLog() ?
|
||||
if (mTail == (unsigned long) -1) {
|
||||
LogTimeEntry::unlock();
|
||||
return;
|
||||
|
|
@ -74,7 +74,7 @@ void FlushCommand::runSocketCommand(SocketClient *client) {
|
|||
|
||||
client->incRef();
|
||||
|
||||
/* release client and entry reference counts once done */
|
||||
// release client and entry reference counts once done
|
||||
entry->startReader_Locked();
|
||||
LogTimeEntry::unlock();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,11 +52,12 @@ void LogBuffer::log(log_id_t log_id, struct timespec realtime,
|
|||
LogBufferElementCollection::iterator it = mLogElements.end();
|
||||
LogBufferElementCollection::iterator last = it;
|
||||
while (--it != mLogElements.begin()) {
|
||||
if ((*it)->getRealTime() <= elem->getRealTime()) {
|
||||
if ((*it)->getRealTime() <= realtime) {
|
||||
break;
|
||||
}
|
||||
last = it;
|
||||
}
|
||||
|
||||
if (last == mLogElements.end()) {
|
||||
mLogElements.push_back(elem);
|
||||
} else {
|
||||
|
|
@ -83,7 +84,7 @@ void LogBuffer::log(log_id_t log_id, struct timespec realtime,
|
|||
}
|
||||
|
||||
if (end_always
|
||||
|| (end_set && (end >= (*last)->getMonotonicTime()))) {
|
||||
|| (end_set && (end >= (*last)->getMonotonicTime()))) {
|
||||
mLogElements.push_back(elem);
|
||||
} else {
|
||||
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
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,6 @@
|
|||
|
||||
#include "LogCommand.h"
|
||||
|
||||
LogCommand::LogCommand(const char *cmd) :
|
||||
FrameworkCommand(cmd) {
|
||||
LogCommand::LogCommand(const char *cmd)
|
||||
: FrameworkCommand(cmd) {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ bool LogTimeEntry::FilterFirstPass(const LogBufferElement *element, void *obj) {
|
|||
}
|
||||
|
||||
if ((!me->mPid || (me->mPid == element->getPid()))
|
||||
&& (me->mLogMask & (1 << element->getLogId()))) {
|
||||
&& (me->mLogMask & (1 << element->getLogId()))) {
|
||||
++me->mCount;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,16 +59,14 @@ public:
|
|||
|
||||
void startReader_Locked(void);
|
||||
|
||||
bool runningReader_Locked(void) const
|
||||
{
|
||||
bool runningReader_Locked(void) const {
|
||||
return threadRunning || mRelease || mError || mNonBlock;
|
||||
}
|
||||
void triggerReader_Locked(void) { threadTriggered = true; }
|
||||
void triggerSkip_Locked(unsigned int skip) { skipAhead = skip; }
|
||||
|
||||
// Called after LogTimeEntry removed from list, lock implicitly held
|
||||
void release_Locked(void)
|
||||
{
|
||||
void release_Locked(void) {
|
||||
mRelease = true;
|
||||
if (mRefCount || threadRunning) {
|
||||
return;
|
||||
|
|
@ -89,8 +87,7 @@ public:
|
|||
|
||||
bool owned_Locked(void) const { return mRefCount != 0; }
|
||||
|
||||
void decRef_Locked(void)
|
||||
{
|
||||
void decRef_Locked(void) {
|
||||
if ((mRefCount && --mRefCount) || !mRelease || threadRunning) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sched.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
|
@ -32,6 +33,13 @@
|
|||
#include "LogListener.h"
|
||||
|
||||
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) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue