diff options
| author | 2022-04-05 20:34:27 +0000 | |
|---|---|---|
| committer | 2022-04-13 19:32:56 +0000 | |
| commit | 1702ffa6f21f7f83170576ac3c2803c243a24eef (patch) | |
| tree | 185bc567e7c7d0c4deb7137c921663cfe394ddf2 | |
| parent | 6c61f360ec1429da57a78f7918b8c257b203988d (diff) | |
Change Logcat to only log in background thread in debug mode
The prod and always log trackers shoud just log syncrhonously, since they
do not do any jank-causing work to determine whether a message should be
logged.
Bug: 221419865
Test: ran 'atest SystemUITests SystemUIGoogleTests'
Change-Id: I2e673a480abbd5afda2d6ce3117df47e0415ea8a
5 files changed, 28 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt b/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt index 9a1bd25556a5..e16da89d6ec8 100644 --- a/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt +++ b/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt @@ -84,16 +84,19 @@ class LogBuffer @JvmOverloads constructor( } private val buffer: ArrayDeque<LogMessageImpl> = ArrayDeque() - private val echoMessageQueue: BlockingQueue<LogMessageImpl> = ArrayBlockingQueue(poolSize) + private val echoMessageQueue: BlockingQueue<LogMessageImpl>? = + if (logcatEchoTracker.logInBackgroundThread) ArrayBlockingQueue(poolSize) else null init { - thread(start = true, priority = Thread.NORM_PRIORITY) { - try { - while (true) { - echoToDesiredEndpoints(echoMessageQueue.take()) + if (logcatEchoTracker.logInBackgroundThread && echoMessageQueue != null) { + thread(start = true, priority = Thread.NORM_PRIORITY) { + try { + while (true) { + echoToDesiredEndpoints(echoMessageQueue.take()) + } + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() } - } catch (e: InterruptedException) { - Thread.currentThread().interrupt() } } } @@ -192,9 +195,15 @@ class LogBuffer @JvmOverloads constructor( buffer.removeFirst() } buffer.add(message as LogMessageImpl) - // Log in the background thread only if it has capacity to avoid blocking this thread - if (echoMessageQueue.remainingCapacity() > 0) { - echoMessageQueue.put(message) + // Log in the background thread only if echoMessageQueue exists and has capacity (checking + // capacity avoids the possibility of blocking this thread) + if (echoMessageQueue != null && echoMessageQueue.remainingCapacity() > 0) { + try { + echoMessageQueue.put(message) + } catch (e: InterruptedException) { + // the background thread has been shut down, so just log on this one + echoToDesiredEndpoints(message) + } } else { echoToDesiredEndpoints(message) } diff --git a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTracker.kt b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTracker.kt index 3022f4b42a42..8cda4236bc87 100644 --- a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTracker.kt +++ b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTracker.kt @@ -29,4 +29,9 @@ interface LogcatEchoTracker { * Whether [tagName] should echo messages of [level] or higher to logcat. */ fun isTagLoggable(tagName: String, level: LogLevel): Boolean + + /** + * Whether to log messages in a background thread. + */ + val logInBackgroundThread: Boolean } diff --git a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerDebug.kt b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerDebug.kt index 23942e1d6e3c..91734cc361b0 100644 --- a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerDebug.kt +++ b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerDebug.kt @@ -41,6 +41,7 @@ class LogcatEchoTrackerDebug private constructor( ) : LogcatEchoTracker { private val cachedBufferLevels: MutableMap<String, LogLevel> = mutableMapOf() private val cachedTagLevels: MutableMap<String, LogLevel> = mutableMapOf() + override val logInBackgroundThread = true companion object Factory { @JvmStatic diff --git a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerProd.kt b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerProd.kt index 394f624a3e58..1a4ad1907ff1 100644 --- a/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerProd.kt +++ b/packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerProd.kt @@ -20,6 +20,8 @@ package com.android.systemui.log * Production version of [LogcatEchoTracker] that isn't configurable. */ class LogcatEchoTrackerProd : LogcatEchoTracker { + override val logInBackgroundThread = false + override fun isBufferLoggable(bufferName: String, level: LogLevel): Boolean { return level >= LogLevel.WARNING } diff --git a/packages/SystemUI/tests/src/com/android/systemui/dump/LogBufferHelper.kt b/packages/SystemUI/tests/src/com/android/systemui/dump/LogBufferHelper.kt index 2cb19393d2c6..0720bdb06556 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dump/LogBufferHelper.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/dump/LogBufferHelper.kt @@ -30,6 +30,7 @@ fun logcatLogBuffer(name: String = "EchoToLogcatLogBuffer") = * A [LogcatEchoTracker] that always allows echoing to the logcat. */ class LogcatEchoTrackerAlways : LogcatEchoTracker { + override val logInBackgroundThread = false override fun isBufferLoggable(bufferName: String, level: LogLevel): Boolean = true override fun isTagLoggable(tagName: String, level: LogLevel): Boolean = true } |