Merge "logd: liblog: logcat: enable prune features for user"

This commit is contained in:
Mark Salyzyn 2014-04-09 23:33:27 +00:00 committed by Gerrit Code Review
commit 472e04f2b4
14 changed files with 11 additions and 149 deletions

View File

@ -142,9 +142,7 @@ log_id_t android_logger_get_id(struct logger *logger);
int android_logger_clear(struct logger *logger);
long android_logger_get_log_size(struct logger *logger);
#ifdef USERDEBUG_BUILD
int android_logger_set_log_size(struct logger *logger, unsigned long size);
#endif
long android_logger_get_log_readable_size(struct logger *logger);
int android_logger_get_log_version(struct logger *logger);
@ -152,12 +150,10 @@ struct logger_list;
ssize_t android_logger_get_statistics(struct logger_list *logger_list,
char *buf, size_t len);
#ifdef USERDEBUG_BUILD
ssize_t android_logger_get_prune_list(struct logger_list *logger_list,
char *buf, size_t len);
int android_logger_set_prune_list(struct logger_list *logger_list,
char *buf, size_t len);
#endif
struct logger_list *android_logger_list_alloc(int mode,
unsigned int tail,

View File

@ -22,10 +22,6 @@ else
liblog_sources := logd_write_kern.c
endif
ifneq ($(filter userdebug eng,$(TARGET_BUILD_VARIANT)),)
liblog_cflags := -DUSERDEBUG_BUILD=1
endif
# some files must not be compiled when building against Mingw
# they correspond to features not used by our host development tools
# which are also hard or even impossible to port to native Win32

View File

@ -340,8 +340,6 @@ long android_logger_get_log_size(struct logger *logger)
return atol(buf);
}
#ifdef USERDEBUG_BUILD
int android_logger_set_log_size(struct logger *logger, unsigned long size)
{
char buf[512];
@ -352,8 +350,6 @@ int android_logger_set_log_size(struct logger *logger, unsigned long size)
return check_log_success(buf, send_log_msg(NULL, NULL, buf, sizeof(buf)));
}
#endif /* USERDEBUG_BUILD */
/*
* returns the readable size of the log's ring buffer (that is, amount of the
* log consumed)
@ -408,8 +404,6 @@ ssize_t android_logger_get_statistics(struct logger_list *logger_list,
return send_log_msg(NULL, NULL, buf, len);
}
#ifdef USERDEBUG_BUILD
ssize_t android_logger_get_prune_list(struct logger_list *logger_list UNUSED,
char *buf, size_t len)
{
@ -432,8 +426,6 @@ int android_logger_set_prune_list(struct logger_list *logger_list UNUSED,
return check_log_success(buf, send_log_msg(NULL, NULL, buf, len));
}
#endif /* USERDEBUG_BUILD */
struct logger_list *android_logger_list_alloc(int mode,
unsigned int tail,
pid_t pid)

View File

@ -232,16 +232,12 @@ long android_logger_get_log_size(struct logger *logger)
return logger_ioctl(logger, LOGGER_GET_LOG_BUF_SIZE, O_RDWR);
}
#ifdef USERDEBUG_BUILD
int android_logger_set_log_size(struct logger *logger UNUSED,
unsigned long size UNUSED)
{
return -ENOTSUP;
}
#endif /* USERDEBUG_BUILD */
/*
* returns the readable size of the log's ring buffer (that is, amount of the
* log consumed)
@ -272,8 +268,6 @@ ssize_t android_logger_get_statistics(struct logger_list *logger_list UNUSED,
return -ENOTSUP;
}
#ifdef USERDEBUG_BUILD
ssize_t android_logger_get_prune_list(struct logger_list *logger_list UNUSED,
char *buf, size_t len)
{
@ -289,8 +283,6 @@ int android_logger_set_prune_list(struct logger_list *logger_list UNUSED,
return -ENOTSUP;
}
#endif /* USERDEBUG_BUILD */
struct logger_list *android_logger_list_alloc(int mode,
unsigned int tail,
pid_t pid)

View File

@ -3,10 +3,6 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
ifneq ($(filter userdebug eng,$(TARGET_BUILD_VARIANT)),)
LOCAL_CFLAGS += -DUSERDEBUG_BUILD=1
endif
LOCAL_SRC_FILES:= logcat.cpp event.logtags
LOCAL_SHARED_LIBRARIES := liblog

View File

@ -232,17 +232,10 @@ static void show_help(const char *cmd)
" -B output the log in binary.\n"
" -S output statistics.\n");
#ifdef USERDEBUG_BUILD
fprintf(stderr, "--------------------- eng & userdebug builds only ---------------------------\n"
" -G <count> set size of log's ring buffer and exit\n"
fprintf(stderr, " -G <count> set size of log's ring buffer and exit\n"
" -p output prune white and ~black list\n"
" -P '<list> ...' set prune white and ~black list; UID, /PID or !(worst UID)\n"
" default is ~!, prune worst UID.\n"
"-----------------------------------------------------------------------------\n"
);
#endif
" default is ~!, prune worst UID.\n");
fprintf(stderr,"\nfilterspecs are a series of \n"
" <tag>[:priority]\n\n"
@ -291,11 +284,9 @@ int main(int argc, char **argv)
int hasSetLogFormat = 0;
int clearLog = 0;
int getLogSize = 0;
#ifdef USERDEBUG_BUILD
unsigned long setLogSize = 0;
int getPruneList = 0;
char *setPruneList = NULL;
#endif
int printStatistics = 0;
int mode = O_RDONLY;
const char *forceFilters = NULL;
@ -323,13 +314,7 @@ int main(int argc, char **argv)
for (;;) {
int ret;
ret = getopt(argc, argv,
#ifdef USERDEBUG_BUILD
"cdt:T:gG:sQf:r::n:v:b:BSpP:"
#else
"cdt:T:gsQf:r::n:v:b:BS"
#endif
);
ret = getopt(argc, argv, "cdt:T:gG:sQf:r::n:v:b:BSpP:");
if (ret < 0) {
break;
@ -386,8 +371,6 @@ int main(int argc, char **argv)
getLogSize = 1;
break;
#ifdef USERDEBUG_BUILD
case 'G': {
// would use atol if not for the multiplier
char *cp = optarg;
@ -433,8 +416,6 @@ int main(int argc, char **argv)
setPruneList = optarg;
break;
#endif
case 'b': {
if (strcmp(optarg, "all") == 0) {
while (devices) {
@ -704,15 +685,11 @@ int main(int argc, char **argv)
}
}
#ifdef USERDEBUG_BUILD
if (setLogSize && android_logger_set_log_size(dev->logger, setLogSize)) {
perror("failed to set the log size");
exit(EXIT_FAILURE);
}
#endif
if (getLogSize) {
long size, readable;
@ -737,8 +714,6 @@ int main(int argc, char **argv)
dev = dev->next;
}
#ifdef USERDEBUG_BUILD
if (setPruneList) {
size_t len = strlen(setPruneList) + 32; // margin to allow rc
char *buf = (char *) malloc(len);
@ -753,30 +728,18 @@ int main(int argc, char **argv)
}
}
#endif
if (
#ifdef USERDEBUG_BUILD
printStatistics || getPruneList
#else
printStatistics
#endif
) {
if (printStatistics || getPruneList) {
size_t len = 8192;
char *buf;
for(int retry = 32;
(retry >= 0) && ((buf = new char [len]));
delete [] buf, --retry) {
#ifdef USERDEBUG_BUILD
if (getPruneList) {
android_logger_get_prune_list(logger_list, buf, len);
} else {
android_logger_get_statistics(logger_list, buf, len);
}
#else
android_logger_get_statistics(logger_list, buf, len);
#endif
buf[len-1] = '\0';
size_t ret = atol(buf) + 1;
if (ret < 4) {
@ -824,11 +787,9 @@ int main(int argc, char **argv)
if (getLogSize) {
exit(0);
}
#ifdef USERDEBUG_BUILD
if (setLogSize || setPruneList) {
exit(0);
}
#endif
if (clearLog) {
exit(0);
}

View File

@ -30,10 +30,6 @@ test_c_flags := \
-Werror \
-fno-builtin
ifneq ($(filter userdebug eng,$(TARGET_BUILD_VARIANT)),)
test_c_flags += -DUSERDEBUG_BUILD=1
endif
test_src_files := \
logcat_test.cpp \

View File

@ -609,7 +609,6 @@ TEST(logcat, blocking_clear) {
EXPECT_EQ(1, signals);
}
#ifdef USERDEBUG_BUILD
static bool get_white_black(char **list) {
FILE *fp;
@ -705,4 +704,3 @@ TEST(logcat, white_black_adjust) {
free(list);
list = NULL;
}
#endif // USERDEBUG_BUILD

View File

@ -4,10 +4,6 @@ include $(CLEAR_VARS)
LOCAL_MODULE:= logd
ifneq ($(filter userdebug eng,$(TARGET_BUILD_VARIANT)),)
LOCAL_CFLAGS += -DUSERDEBUG_BUILD=1
endif
LOCAL_SRC_FILES := \
main.cpp \
LogCommand.cpp \

View File

@ -37,15 +37,11 @@ CommandListener::CommandListener(LogBuffer *buf, LogReader * /*reader*/,
// registerCmd(new ShutdownCmd(buf, writer, swl));
registerCmd(new ClearCmd(buf));
registerCmd(new GetBufSizeCmd(buf));
#ifdef USERDEBUG_BUILD
registerCmd(new SetBufSizeCmd(buf));
#endif
registerCmd(new GetBufSizeUsedCmd(buf));
registerCmd(new GetStatisticsCmd(buf));
#ifdef USERDEBUG_BUILD
registerCmd(new SetPruneListCmd(buf));
registerCmd(new GetPruneListCmd(buf));
#endif
}
CommandListener::ShutdownCmd::ShutdownCmd(LogBuffer *buf, LogReader *reader,
@ -117,8 +113,6 @@ int CommandListener::GetBufSizeCmd::runCommand(SocketClient *cli,
return 0;
}
#ifdef USERDEBUG_BUILD
CommandListener::SetBufSizeCmd::SetBufSizeCmd(LogBuffer *buf)
: LogCommand("setLogSize")
, mBuf(*buf)
@ -152,8 +146,6 @@ int CommandListener::SetBufSizeCmd::runCommand(SocketClient *cli,
return 0;
}
#endif // USERDEBUG_BUILD
CommandListener::GetBufSizeUsedCmd::GetBufSizeUsedCmd(LogBuffer *buf)
: LogCommand("getLogSizeUsed")
, mBuf(*buf)
@ -236,8 +228,6 @@ int CommandListener::GetStatisticsCmd::runCommand(SocketClient *cli,
return 0;
}
#ifdef USERDEBUG_BUILD
CommandListener::GetPruneListCmd::GetPruneListCmd(LogBuffer *buf)
: LogCommand("getPruneList")
, mBuf(*buf)
@ -293,5 +283,3 @@ int CommandListener::SetPruneListCmd::runCommand(SocketClient *cli,
return 0;
}
#endif // USERDEBUG_BUILD

View File

@ -53,15 +53,11 @@ private:
LogBufferCmd(Clear)
LogBufferCmd(GetBufSize)
#ifdef USERDEBUG_BUILD
LogBufferCmd(SetBufSize)
#endif
LogBufferCmd(GetBufSizeUsed)
LogBufferCmd(GetStatistics)
#ifdef USERDEBUG_BUILD
LogBufferCmd(GetPruneList)
LogBufferCmd(SetPruneList)
#endif
};
#endif

View File

@ -28,22 +28,16 @@
// Default
#define LOG_BUFFER_SIZE (256 * 1024) // Tuned on a per-platform basis here?
#ifdef USERDEBUG_BUILD
#define log_buffer_size(id) mMaxSize[id]
#else
#define log_buffer_size(id) LOG_BUFFER_SIZE
#endif
LogBuffer::LogBuffer(LastLogTimes *times)
: mTimes(*times) {
pthread_mutex_init(&mLogElementsLock, NULL);
dgram_qlen_statistics = false;
#ifdef USERDEBUG_BUILD
log_id_for_each(i) {
mMaxSize[i] = LOG_BUFFER_SIZE;
}
#endif
}
void LogBuffer::log(log_id_t log_id, log_time realtime,
@ -171,10 +165,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
size_t worst_sizes = 0;
size_t second_worst_sizes = 0;
#ifdef USERDEBUG_BUILD
if (mPrune.worstUidEnabled())
#endif
{
if (mPrune.worstUidEnabled()) {
LidStatistics &l = stats.id(id);
UidStatisticsCollection::iterator iu;
for (iu = l.begin(); iu != l.end(); ++iu) {
@ -217,9 +208,7 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
break;
}
worst_sizes -= len;
}
#ifdef USERDEBUG_BUILD
else if (mPrune.naughty(e)) { // BlackListed
} else if (mPrune.naughty(e)) { // BlackListed
it = mLogElements.erase(it);
stats.subtract(e->getMsgLen(), id, uid, e->getPid());
delete e;
@ -227,34 +216,23 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
if (pruneRows == 0) {
break;
}
}
#endif
else {
} else {
++it;
}
}
if (!kick
#ifdef USERDEBUG_BUILD
|| !mPrune.worstUidEnabled()
#endif
) {
if (!kick || !mPrune.worstUidEnabled()) {
break; // the following loop will ask bad clients to skip/drop
}
}
#ifdef USERDEBUG_BUILD
bool whitelist = false;
#endif
it = mLogElements.begin();
while((pruneRows > 0) && (it != mLogElements.end())) {
LogBufferElement *e = *it;
if (e->getLogId() == id) {
if (oldest && (oldest->mStart <= e->getMonotonicTime())) {
#ifdef USERDEBUG_BUILD
if (!whitelist)
#endif
{
if (!whitelist) {
if (stats.sizes(id) > (2 * log_buffer_size(id))) {
// kick a misbehaving log reader client off the island
oldest->release_Locked();
@ -264,13 +242,13 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
}
break;
}
#ifdef USERDEBUG_BUILD
if (mPrune.nice(e)) { // WhiteListed
whitelist = true;
it++;
continue;
}
#endif
it = mLogElements.erase(it);
stats.subtract(e->getMsgLen(), id, e->getUid(), e->getPid());
delete e;
@ -280,7 +258,6 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
}
}
#ifdef USERDEBUG_BUILD
if (whitelist && (pruneRows > 0)) {
it = mLogElements.begin();
while((it != mLogElements.end()) && (pruneRows > 0)) {
@ -304,7 +281,6 @@ void LogBuffer::prune(log_id_t id, unsigned long pruneRows) {
}
}
}
#endif
LogTimeEntry::unlock();
}
@ -324,8 +300,6 @@ unsigned long LogBuffer::getSizeUsed(log_id_t id) {
return retval;
}
#ifdef USERDEBUG_BUILD
// set the total space allocated to "id"
int LogBuffer::setSize(log_id_t id, unsigned long size) {
// Reasonable limits ...
@ -346,15 +320,6 @@ unsigned long LogBuffer::getSize(log_id_t id) {
return retval;
}
#else // ! USERDEBUG_BUILD
// get the total space allocated to "id"
unsigned long LogBuffer::getSize(log_id_t /*id*/) {
return log_buffer_size(id);
}
#endif
log_time LogBuffer::flushTo(
SocketClient *reader, const log_time start, bool privileged,
bool (*filter)(const LogBufferElement *element, void *arg), void *arg) {

View File

@ -38,11 +38,9 @@ class LogBuffer {
bool dgram_qlen_statistics;
#ifdef USERDEBUG_BUILD
PruneList mPrune;
unsigned long mMaxSize[LOG_ID_MAX];
#endif
public:
LastLogTimes &mTimes;
@ -59,9 +57,7 @@ public:
void clear(log_id_t id);
unsigned long getSize(log_id_t id);
#ifdef USERDEBUG_BUILD
int setSize(log_id_t id, unsigned long size);
#endif
unsigned long getSizeUsed(log_id_t id);
// *strp uses malloc, use free to release.
void formatStatistics(char **strp, uid_t uid, unsigned int logMask);
@ -71,11 +67,9 @@ public:
dgram_qlen_statistics = true;
}
#ifdef USERDEBUG_BUILD
int initPrune(char *cp) { return mPrune.init(cp); }
// *strp uses malloc, use free to release.
void formatPrune(char **strp) { mPrune.format(strp); }
#endif
// helper
char *pidToName(pid_t pid) { return stats.pidToName(pid); }

View File

@ -14,8 +14,6 @@
* limitations under the License.
*/
#ifdef USERDEBUG_BUILD
#include <ctype.h>
#include <utils/String8.h>
@ -239,5 +237,3 @@ bool PruneList::nice(LogBufferElement *element) {
}
return false;
}
#endif // USERDEBUG_BUILD