adb: don't spew to logcat when tracing is enabled.

When persist.adb.trace_mask is used to enable verbose logging, avoid
exponential logging when a user runs `adb logcat`. As a side-effect,
set the minimum logging level to include everything when ADB_TRACE is
used on the client (which is something we want anyway).

Bug: http://b/72971016
Test: `adb shell 'setprop persist.adb.trace_mask; killall adbd'; adb logcat`
Change-Id: Id4bca1f3933a920345499dbeaeb103c8a2e220cd
This commit is contained in:
Josh Gao 2018-02-06 15:49:26 -08:00
parent 9d6b55928c
commit 95c4497bd4
2 changed files with 14 additions and 6 deletions

View file

@ -42,7 +42,11 @@ void AdbLogger(android::base::LogId id, android::base::LogSeverity severity,
const char* message) {
android::base::StderrLogger(id, severity, tag, file, line, message);
#if !ADB_HOST
gLogdLogger(id, severity, tag, file, line, message);
// Only print logs of INFO or higher to logcat, so that `adb logcat` with adbd tracing on
// doesn't result in exponential logging.
if (severity >= android::base::INFO) {
gLogdLogger(id, severity, tag, file, line, message);
}
#endif
}
@ -137,11 +141,15 @@ static void setup_trace_mask() {
// -1 is used for the special values "1" and "all" that enable all
// tracing.
adb_trace_mask = ~0;
return;
break;
} else {
adb_trace_mask |= 1 << flag->second;
}
}
if (adb_trace_mask != 0) {
android::base::SetMinimumLogSeverity(android::base::VERBOSE);
}
}
void adb_trace_init(char** argv) {

View file

@ -43,11 +43,11 @@ enum AdbTrace {
#define VLOG_IS_ON(TAG) \
((adb_trace_mask & (1 << (TAG))) != 0)
#define VLOG(TAG) \
#define VLOG(TAG) \
if (LIKELY(!VLOG_IS_ON(TAG))) \
; \
else \
LOG(INFO)
; \
else \
LOG(DEBUG)
// You must define TRACE_TAG before using this macro.
#define D(...) \