diff options
| author | 2023-10-31 13:36:22 +0000 | |
|---|---|---|
| committer | 2023-10-31 13:36:22 +0000 | |
| commit | 1f90210c73a5eebbf8436657ef682c12582593b5 (patch) | |
| tree | 7290e31f0d264973f105dcd99b65c9dad26907e6 | |
| parent | c3c6d706550a92e7aa5b613ffb1a1e276f64d9b2 (diff) | |
| parent | 6f2720a8576844a3da5b6bf092b823793362e9e9 (diff) | |
Merge "Allow engineers to prevent refactor flags from crashing systemui" into main
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/flags/RefactorFlagUtils.kt | 37 |
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" } |