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:
Mark Salyzyn 2014-02-26 22:30:59 +00:00 committed by Android Git Automerger
commit 8dd3ad1281
6 changed files with 30 additions and 16 deletions

View file

@ -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();
}

View file

@ -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);
}
}

View file

@ -16,6 +16,6 @@
#include "LogCommand.h"
LogCommand::LogCommand(const char *cmd) :
FrameworkCommand(cmd) {
LogCommand::LogCommand(const char *cmd)
: FrameworkCommand(cmd) {
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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(&param, 0, sizeof(param));
if (sched_setscheduler((pid_t) 0, SCHED_BATCH, &param) < 0) {
return -1;
}
if (prctl(PR_SET_KEEPCAPS, 1) < 0) {
return -1;
}