Merge "Jank-Instrument all dialogs opened from the shade" into tm-qpr-dev am: d151838b55

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18716126

Change-Id: I26268f3eba694c8738d9b48ae2268ba2dfd592e7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mike Schneider
2022-06-13 16:45:15 +00:00
committed by Automerger Merge Worker
13 changed files with 95 additions and 21 deletions

View File

@@ -99,6 +99,7 @@ import com.android.internal.R;
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.internal.widget.LockPatternUtils;
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 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
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 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
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();
}

View File

@@ -20,8 +20,10 @@ import android.content.Context
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 @@ class MediaOutputDialogFactory @Inject constructor(
private val audioManager: AudioManager
) {
companion object {
private const val INTERACTION_JANK_TAG = "media_output"
var mediaOutputDialog: MediaOutputDialog? = null
}
@@ -54,16 +57,24 @@ class MediaOutputDialogFactory @Inject constructor(
// 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()
}

View File

@@ -55,6 +55,7 @@ import android.view.WindowManager;
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.fuelgauge.BatterySaverUtils;
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 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
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 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
});
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();
}

View File

@@ -45,8 +45,10 @@ import androidx.recyclerview.widget.LinearLayoutManager
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 @@ class FgsManagerController @Inject constructor(
) : 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 @@ class FgsManagerController @Inject constructor(
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 {

View File

@@ -80,9 +80,11 @@ import android.widget.TextView;
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 @@ class QSSecurityFooter extends ViewController<View>
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 @@ class QSSecurityFooter extends ViewController<View>
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();
}

View File

@@ -33,10 +33,12 @@ import android.widget.Button;
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 @@ import javax.inject.Inject;
/** 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 @@ public class CastTile extends QSTileImpl<BooleanState> {
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();
}

View File

@@ -24,10 +24,12 @@ import android.widget.Switch;
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 @@ import javax.inject.Inject;
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 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
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();
}

View File

@@ -39,11 +39,13 @@ import android.widget.Switch;
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 @@ public class DndTile extends QSTileImpl<BooleanState> {
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 @@ public class DndTile extends QSTileImpl<BooleanState> {
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();

View File

@@ -27,8 +27,10 @@ import android.widget.Switch;
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 @@ import javax.inject.Inject;
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 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
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();
}

View File

@@ -25,8 +25,10 @@ import android.provider.Settings
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 @@ class UserSwitchDialogController @VisibleForTesting constructor(
)
companion object {
private const val INTERACTION_JANK_TAG = "switch_user"
private val USER_SETTINGS_INTENT = Intent(Settings.ACTION_USER_SETTINGS)
}
@@ -89,14 +92,16 @@ class UserSwitchDialogController @VisibleForTesting constructor(
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 @@ class UserSwitchDialogController @VisibleForTesting constructor(
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 @@ class UserSwitchDialogController @VisibleForTesting constructor(
interface DialogShower : DialogInterface {
fun showDialog(dialog: Dialog)
}
}
}

View File

@@ -222,7 +222,7 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
mReceiver.onReceive(mContext, intent);
verify(mDialogLaunchAnimator).showFromView(any(), eq(mView));
verify(mDialogLaunchAnimator).showFromView(any(), eq(mView), any());
mPowerNotificationWarnings.getSaverConfirmationDialog().dismiss();
}

View File

@@ -731,7 +731,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
mTestableLooper.processAllMessages();
verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView));
verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView), any());
}
@Test
@@ -768,7 +768,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
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();

View File

@@ -42,6 +42,7 @@ import org.mockito.ArgumentCaptor
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 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
@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)
}