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

View file

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

View file

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

View file

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

View file

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

View file

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