summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt29
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/LogcatEchoTracker.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerDebug.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/log/LogcatEchoTrackerProd.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/dump/LogBufferHelper.kt1
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
}