Jank-Instrument all dialogs opened from the shade Bug: 232908404 Test: Took traces of interactions Change-Id: I087d3b2b2718ceaf994e3b0615e2aaa384f6796a
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java index acb080a..550f393 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
@@ -99,6 +99,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.ColorExtractor.GradientColors; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEvent; import com.android.internal.logging.UiEventLogger; @@ -110,6 +111,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.MultiListLayout; import com.android.systemui.MultiListLayout.MultiListAdapter; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.animation.Interpolators; import com.android.systemui.broadcast.BroadcastDispatcher; @@ -154,6 +156,8 @@ private static final String TAG = "GlobalActionsDialogLite"; + private static final String INTERACTION_JANK_TAG = "global_actions"; + private static final boolean SHOW_SILENT_TOGGLE = true; /* Valid settings for global actions keys. @@ -499,7 +503,9 @@ mDialog.getWindow().addFlags(FLAG_ALT_FOCUSABLE_IM); if (view != null) { - mDialogLaunchAnimator.showFromView(mDialog, view); + mDialogLaunchAnimator.showFromView(mDialog, view, + new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG)); } else { mDialog.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt index 36a46f0..8701d4a 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
@@ -20,8 +20,10 @@ import android.media.AudioManager import android.media.session.MediaSessionManager import android.view.View +import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.UiEventLogger import com.android.settingslib.bluetooth.LocalBluetoothManager +import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.broadcast.BroadcastSender import com.android.systemui.media.nearby.NearbyMediaDevicesManager @@ -46,6 +48,7 @@ private val audioManager: AudioManager ) { companion object { + private const val INTERACTION_JANK_TAG = "media_output" var mediaOutputDialog: MediaOutputDialog? = null } @@ -54,16 +57,24 @@ // Dismiss the previous dialog, if any. mediaOutputDialog?.dismiss() - val controller = MediaOutputController(context, packageName, - mediaSessionManager, lbm, starter, notifCollection, - dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager) + val controller = MediaOutputController( + context, packageName, + mediaSessionManager, lbm, starter, notifCollection, + dialogLaunchAnimator, nearbyMediaDevicesManagerOptional, audioManager + ) val dialog = MediaOutputDialog(context, aboveStatusBar, broadcastSender, controller, uiEventLogger) mediaOutputDialog = dialog // Show the dialog. if (view != null) { - dialogLaunchAnimator.showFromView(dialog, view) + dialogLaunchAnimator.showFromView( + dialog, view, + cuj = DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG + ) + ) } else { dialog.show() }
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index 05e8c02..90fc1d7 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -55,6 +55,7 @@ import androidx.annotation.VisibleForTesting; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.UiEventLogger; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.settingslib.Utils; @@ -62,6 +63,7 @@ import com.android.settingslib.utils.PowerUtil; import com.android.systemui.R; import com.android.systemui.SystemUIApplication; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; @@ -93,6 +95,8 @@ private static final String TAG_TEMPERATURE = "high_temp"; private static final String TAG_AUTO_SAVER = "auto_saver"; + private static final String INTERACTION_JANK_TAG = "start_power_saver"; + private static final int SHOWING_NOTHING = 0; private static final int SHOWING_WARNING = 1; private static final int SHOWING_INVALID_CHARGER = 3; @@ -707,7 +711,9 @@ }); WeakReference<View> ref = mBatteryControllerLazy.get().getLastPowerSaverStartView(); if (ref != null && ref.get() != null && ref.get().isAggregatedVisible()) { - mDialogLaunchAnimator.showFromView(d, ref.get()); + mDialogLaunchAnimator.showFromView(d, ref.get(), + new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG)); } else { d.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt index 4c6fb55..892c283 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
@@ -45,8 +45,10 @@ import androidx.recyclerview.widget.RecyclerView import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_ENABLED import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_SHOW_FOOTER_DOT +import com.android.internal.jank.InteractionJankMonitor import com.android.systemui.Dumpable import com.android.systemui.R +import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.dagger.SysUISingleton @@ -81,6 +83,7 @@ ) : IForegroundServiceObserver.Stub(), Dumpable { companion object { + private const val INTERACTION_JANK_TAG = "active_background_apps" private val LOG_TAG = FgsManagerController::class.java.simpleName private const val DEFAULT_TASK_MANAGER_ENABLED = true private const val DEFAULT_TASK_MANAGER_SHOW_FOOTER_DOT = false @@ -311,7 +314,15 @@ mainExecutor.execute { viewLaunchedFrom - ?.let { dialogLaunchAnimator.showFromView(dialog, it) } ?: dialog.show() + ?.let { + dialogLaunchAnimator.showFromView( + dialog, it, + cuj = DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG + ) + ) + } ?: dialog.show() } backgroundExecutor.execute {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java index 584de6e..87fcce4 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
@@ -80,9 +80,11 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.util.FrameworkStatsLog; import com.android.systemui.FontSizeUtils; import com.android.systemui.R; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Background; @@ -108,6 +110,8 @@ protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG_FORCE_VISIBLE = false; + private static final String INTERACTION_JANK_TAG = "managed_device_info"; + private final TextView mFooterText; private final ImageView mPrimaryFooterIcon; private Context mContext; @@ -557,7 +561,8 @@ mDialog.setView(view); if (mView.isAggregatedVisible()) { - mDialogLaunchAnimator.showFromView(mDialog, mView); + mDialogLaunchAnimator.showFromView(mDialog, mView, new DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, INTERACTION_JANK_TAG)); } else { mDialog.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 4afd39e3..dce137f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -33,10 +33,12 @@ import androidx.annotation.Nullable; import com.android.internal.app.MediaRouteDialogPresenter; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.R; import com.android.systemui.animation.ActivityLaunchAnimator; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; @@ -63,6 +65,9 @@ /** Quick settings tile: Cast **/ public class CastTile extends QSTileImpl<BooleanState> { + + private static final String INTERACTION_JANK_TAG = "cast"; + private static final Intent CAST_SETTINGS = new Intent(Settings.ACTION_CAST_SETTINGS); @@ -211,7 +216,9 @@ mUiHandler.post(() -> { if (view != null) { - mDialogLaunchAnimator.showFromView(dialog, view); + mDialogLaunchAnimator.showFromView(dialog, view, + new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG)); } else { dialog.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java index 1bbe411..9fdf594 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -24,10 +24,12 @@ import androidx.annotation.Nullable; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.Prefs; import com.android.systemui.R; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; @@ -46,6 +48,8 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements DataSaverController.Listener{ + private static final String INTERACTION_JANK_TAG = "start_data_saver"; + private final DataSaverController mDataSaverController; private final DialogLaunchAnimator mDialogLaunchAnimator; @@ -102,7 +106,9 @@ dialog.setShowForAllUsers(true); if (view != null) { - mDialogLaunchAnimator.showFromView(dialog, view); + mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG)); } else { dialog.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index c006d69..3dcfbc0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -39,11 +39,13 @@ import androidx.annotation.Nullable; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.notification.EnableZenModeDialog; import com.android.systemui.Prefs; import com.android.systemui.R; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; @@ -71,6 +73,8 @@ private static final Intent ZEN_PRIORITY_SETTINGS = new Intent(Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS); + private static final String INTERACTION_JANK_TAG = "start_zen_mode"; + private final ZenModeController mController; private final SharedPreferences mSharedPreferences; private final SettingObserver mSettingZenDuration; @@ -175,8 +179,9 @@ mUiHandler.post(() -> { Dialog dialog = makeZenModeDialog(); if (view != null) { - mDialogLaunchAnimator.showFromView(dialog, view, - /* cuj= */ null, + mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG), /* animateBackgroundBoundsChange= */ false); } else { dialog.show();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java index 45e43ee..02d30c52 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -27,8 +27,10 @@ import androidx.annotation.Nullable; +import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; +import com.android.systemui.animation.DialogCuj; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; @@ -52,6 +54,8 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState> implements RecordingController.RecordingStateChangeCallback { private static final String TAG = "ScreenRecordTile"; + private static final String INTERACTION_JANK_TAG = "screen_record"; + private final RecordingController mController; private final KeyguardDismissUtil mKeyguardDismissUtil; private final KeyguardStateController mKeyguardStateController; @@ -165,7 +169,8 @@ ActivityStarter.OnDismissAction dismissAction = () -> { if (shouldAnimateFromView) { - mDialogLaunchAnimator.showFromView(dialog, view); + mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, INTERACTION_JANK_TAG)); } else { dialog.show(); }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt index 88aa734..260a371 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
@@ -25,8 +25,10 @@ import android.view.LayoutInflater import android.view.View import androidx.annotation.VisibleForTesting +import com.android.internal.jank.InteractionJankMonitor import com.android.internal.logging.UiEventLogger import com.android.systemui.R +import com.android.systemui.animation.DialogCuj import com.android.systemui.animation.DialogLaunchAnimator import com.android.systemui.dagger.SysUISingleton import com.android.systemui.plugins.ActivityStarter @@ -67,6 +69,7 @@ ) companion object { + private const val INTERACTION_JANK_TAG = "switch_user" private val USER_SETTINGS_INTENT = Intent(Settings.ACTION_USER_SETTINGS) } @@ -89,14 +92,16 @@ if (!falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) { uiEventLogger.log(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS) val controller = dialogLaunchAnimator.createActivityLaunchController( - getButton(BUTTON_NEUTRAL)) + getButton(BUTTON_NEUTRAL) + ) if (controller == null) { dismiss() } activityStarter.postStartActivityDismissingKeyguard( - USER_SETTINGS_INTENT, 0, controller) + USER_SETTINGS_INTENT, 0, controller + ) } }, false /* dismissOnClick */) val gridFrame = LayoutInflater.from(this.context) @@ -107,7 +112,13 @@ adapter.linkToViewGroup(gridFrame.findViewById(R.id.grid)) - dialogLaunchAnimator.showFromView(this, view) + dialogLaunchAnimator.showFromView( + this, view, + cuj = DialogCuj( + InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, + INTERACTION_JANK_TAG + ) + ) uiEventLogger.log(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN) adapter.injectDialogShower(DialogShowerImpl(this, dialogLaunchAnimator)) } @@ -128,4 +139,4 @@ interface DialogShower : DialogInterface { fun showDialog(dialog: Dialog) } -} \ No newline at end of file +}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java index 26e4d9d..a56990f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -222,7 +222,7 @@ mReceiver.onReceive(mContext, intent); - verify(mDialogLaunchAnimator).showFromView(any(), eq(mView)); + verify(mDialogLaunchAnimator).showFromView(any(), eq(mView), any()); mPowerNotificationWarnings.getSaverConfirmationDialog().dismiss(); }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java index a3c353b..c1c0f78 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
@@ -731,7 +731,7 @@ mTestableLooper.processAllMessages(); - verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView)); + verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView), any()); } @Test @@ -768,7 +768,7 @@ ArgumentCaptor<AlertDialog> dialogCaptor = ArgumentCaptor.forClass(AlertDialog.class); mTestableLooper.processAllMessages(); - verify(mDialogLaunchAnimator).showFromView(dialogCaptor.capture(), any()); + verify(mDialogLaunchAnimator).showFromView(dialogCaptor.capture(), any(), any()); AlertDialog dialog = dialogCaptor.getValue(); dialog.create();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt index 80273e9..9d908fd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
@@ -42,6 +42,7 @@ import org.mockito.ArgumentMatcher import org.mockito.Captor import org.mockito.Mock +import org.mockito.Mockito.anyBoolean import org.mockito.Mockito.anyInt import org.mockito.Mockito.argThat import org.mockito.Mockito.never @@ -94,7 +95,7 @@ @Test fun showDialog_callsDialogShow() { controller.showDialog(launchView) - verify(dialogLaunchAnimator).showFromView(dialog, launchView) + verify(dialogLaunchAnimator).showFromView(eq(dialog), eq(launchView), any(), anyBoolean()) verify(uiEventLogger).log(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN) }