Merge "logd: liblog: logcat: enable prune features for user"
This commit is contained in:
commit
472e04f2b4
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 \
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue