summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Justin Weir <justinweir@google.com> 2022-04-05 20:34:27 +0000
committer Justin Weir <justinweir@google.com> 2022-04-13 19:32:56 +0000
commit1702ffa6f21f7f83170576ac3c2803c243a24eef (patch)
tree185bc567e7c7d0c4deb7137c921663cfe394ddf2
parent6c61f360ec1429da57a78f7918b8c257b203988d (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
-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
}