summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff DeCew <jeffdq@google.com> 2023-10-31 13:36:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-10-31 13:36:22 +0000
commit1f90210c73a5eebbf8436657ef682c12582593b5 (patch)
tree7290e31f0d264973f105dcd99b65c9dad26907e6
parentc3c6d706550a92e7aa5b613ffb1a1e276f64d9b2 (diff)
parent6f2720a8576844a3da5b6bf092b823793362e9e9 (diff)
Merge "Allow engineers to prevent refactor flags from crashing systemui" into main
-rw-r--r--packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt37
1 files changed, 35 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt b/packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt
index 2aa397f3e744..db31e36a9625 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt
@@ -16,6 +16,7 @@
package com.android.systemui.flags
+import android.os.Build
import android.util.Log
/**
@@ -32,6 +33,11 @@ import android.util.Log
* RefactorFlagUtils.assertInLegacyMode(isEnabled, FLAG_NAME)
* }
* ```
+ *
+ * Legacy mode crashes can be disabled with the command:
+ * ```
+ * adb shell setprop log.tag.RefactorFlagAssert silent
+ * ```
*/
@Suppress("NOTHING_TO_INLINE")
object RefactorFlagUtils {
@@ -51,8 +57,7 @@ object RefactorFlagUtils {
inline fun isUnexpectedlyInLegacyMode(isEnabled: Boolean, flagName: Any): Boolean {
val inLegacyMode = !isEnabled
if (inLegacyMode) {
- val message = "New code path expects $flagName to be enabled."
- Log.wtf("RefactorFlag", message, IllegalStateException(message))
+ assertOnEngBuild("New code path expects $flagName to be enabled.")
}
return inLegacyMode
}
@@ -71,4 +76,32 @@ object RefactorFlagUtils {
*/
inline fun assertInLegacyMode(isEnabled: Boolean, flagName: Any) =
check(!isEnabled) { "Legacy code path not supported when $flagName is enabled." }
+
+ /**
+ * This will [Log.wtf] with the given message, assuming [ASSERT_TAG] is loggable at that level.
+ * This means an engineer can prevent this from crashing by running the command:
+ * ```
+ * adb shell setprop log.tag.RefactorFlagAssert silent
+ * ```
+ */
+ fun assertOnEngBuild(message: String) {
+ if (Log.isLoggable(ASSERT_TAG, Log.ASSERT)) {
+ val exception = if (Build.isDebuggable()) IllegalStateException(message) else null
+ Log.wtf(ASSERT_TAG, message, exception)
+ } else if (Log.isLoggable(STANDARD_TAG, Log.WARN)) {
+ Log.w(STANDARD_TAG, message)
+ }
+ }
+
+ /**
+ * Tag used to determine if an incorrect flag guard should crash System UI running an eng build.
+ * This is enabled by default. To disable, run:
+ * ```
+ * adb shell setprop log.tag.RefactorFlagAssert silent
+ * ```
+ */
+ private const val ASSERT_TAG = "RefactorFlagAssert"
+
+ /** Tag used for non-crashing logs or when the [ASSERT_TAG] has been silenced. */
+ private const val STANDARD_TAG = "RefactorFlag"
}