Merge "Track latency for showing the back arrow." into tm-dev

This commit is contained in:
TreeHugger Robot
2022-03-19 02:44:22 +00:00
committed by Android (Google) Code Review
3 changed files with 36 additions and 9 deletions

View File

@@ -132,6 +132,11 @@ public class LatencyTracker {
*/
public static final int ACTION_UDFPS_ILLUMINATE = 14;
/**
* Time it takes for the gesture back affordance arrow to show up.
*/
public static final int ACTION_SHOW_BACK_ARROW = 15;
private static final int[] ACTIONS_ALL = {
ACTION_EXPAND_PANEL,
ACTION_TOGGLE_RECENTS,
@@ -147,7 +152,8 @@ public class LatencyTracker {
ACTION_LOCKSCREEN_UNLOCK,
ACTION_USER_SWITCH,
ACTION_SWITCH_DISPLAY_UNFOLD,
ACTION_UDFPS_ILLUMINATE
ACTION_UDFPS_ILLUMINATE,
ACTION_SHOW_BACK_ARROW,
};
/** @hide */
@@ -166,7 +172,8 @@ public class LatencyTracker {
ACTION_LOCKSCREEN_UNLOCK,
ACTION_USER_SWITCH,
ACTION_SWITCH_DISPLAY_UNFOLD,
ACTION_UDFPS_ILLUMINATE
ACTION_UDFPS_ILLUMINATE,
ACTION_SHOW_BACK_ARROW
})
@Retention(RetentionPolicy.SOURCE)
public @interface Action {
@@ -187,7 +194,8 @@ public class LatencyTracker {
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_LOCKSCREEN_UNLOCK,
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_USER_SWITCH,
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_SWITCH_DISPLAY_UNFOLD,
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_UDFPS_ILLUMINATE
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_UDFPS_ILLUMINATE,
FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_SHOW_BACK_ARROW,
};
private static LatencyTracker sLatencyTracker;
@@ -277,6 +285,8 @@ public class LatencyTracker {
return "ACTION_SWITCH_DISPLAY_UNFOLD";
case 15:
return "ACTION_UDFPS_ILLUMINATE";
case 16:
return "ACTION_SHOW_BACK_ARROW";
default:
throw new IllegalArgumentException("Invalid action");
}

View File

@@ -57,6 +57,7 @@ import android.view.WindowMetrics;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.policy.GestureNavigationSettingsObserver;
import com.android.internal.util.LatencyTracker;
import com.android.systemui.R;
import com.android.systemui.SystemUIFactory;
import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -198,6 +199,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final Rect mNavBarOverlayExcludedBounds = new Rect();
private final Region mExcludeRegion = new Region();
private final Region mUnrestrictedExcludeRegion = new Region();
private final LatencyTracker mLatencyTracker;
// The left side edge width where touch down is allowed
private int mEdgeWidthLeft;
@@ -302,7 +304,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
BroadcastDispatcher broadcastDispatcher, ProtoTracer protoTracer,
NavigationModeController navigationModeController, ViewConfiguration viewConfiguration,
WindowManager windowManager, IWindowManager windowManagerService,
FalsingManager falsingManager) {
FalsingManager falsingManager, LatencyTracker latencyTracker) {
super(broadcastDispatcher);
mContext = context;
mDisplayId = context.getDisplayId();
@@ -316,6 +318,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mWindowManager = windowManager;
mWindowManagerService = windowManagerService;
mFalsingManager = falsingManager;
mLatencyTracker = latencyTracker;
ComponentName recentsComponentName = ComponentName.unflattenFromString(
context.getString(com.android.internal.R.string.config_recentsComponentName));
if (recentsComponentName != null) {
@@ -505,7 +508,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
Choreographer.getInstance(), this::onInputEvent);
// Add a nav bar panel window
setEdgeBackPlugin(new NavigationBarEdgePanel(mContext, mBackAnimation));
setEdgeBackPlugin(
new NavigationBarEdgePanel(mContext, mBackAnimation, mLatencyTracker));
mPluginManager.addPluginListener(
this, NavigationEdgeBackPlugin.class, /*allowMultiple=*/ false);
}
@@ -520,7 +524,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
@Override
public void onPluginDisconnected(NavigationEdgeBackPlugin plugin) {
setEdgeBackPlugin(new NavigationBarEdgePanel(mContext, mBackAnimation));
setEdgeBackPlugin(new NavigationBarEdgePanel(mContext, mBackAnimation, mLatencyTracker));
}
private void setEdgeBackPlugin(NavigationEdgeBackPlugin edgeBackPlugin) {
@@ -968,6 +972,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final WindowManager mWindowManager;
private final IWindowManager mWindowManagerService;
private final FalsingManager mFalsingManager;
private final LatencyTracker mLatencyTracker;
@Inject
public Factory(OverviewProxyService overviewProxyService,
@@ -975,7 +980,8 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
BroadcastDispatcher broadcastDispatcher, ProtoTracer protoTracer,
NavigationModeController navigationModeController,
ViewConfiguration viewConfiguration, WindowManager windowManager,
IWindowManager windowManagerService, FalsingManager falsingManager) {
IWindowManager windowManagerService, FalsingManager falsingManager,
LatencyTracker latencyTracker) {
mOverviewProxyService = overviewProxyService;
mSysUiState = sysUiState;
mPluginManager = pluginManager;
@@ -987,6 +993,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mWindowManager = windowManager;
mWindowManagerService = windowManagerService;
mFalsingManager = falsingManager;
mLatencyTracker = latencyTracker;
}
/** Construct a {@link EdgeBackGestureHandler}. */
@@ -994,7 +1001,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
return new EdgeBackGestureHandler(context, mOverviewProxyService, mSysUiState,
mPluginManager, mExecutor, mBroadcastDispatcher, mProtoTracer,
mNavigationModeController, mViewConfiguration, mWindowManager,
mWindowManagerService, mFalsingManager);
mWindowManagerService, mFalsingManager, mLatencyTracker);
}
}

View File

@@ -51,6 +51,7 @@ import androidx.dynamicanimation.animation.FloatPropertyCompat;
import androidx.dynamicanimation.animation.SpringAnimation;
import androidx.dynamicanimation.animation.SpringForce;
import com.android.internal.util.LatencyTracker;
import com.android.settingslib.Utils;
import com.android.systemui.Dependency;
import com.android.systemui.R;
@@ -176,6 +177,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
private final ValueAnimator mArrowDisappearAnimation;
private final SpringForce mRegularTranslationSpring;
private final SpringForce mTriggerBackSpring;
private final LatencyTracker mLatencyTracker;
private VelocityTracker mVelocityTracker;
private boolean mIsDark = false;
@@ -225,6 +227,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
private float mDisappearAmount;
private long mVibrationTime;
private int mScreenSize;
private boolean mTrackingBackArrowLatency = false;
private final Handler mHandler = new Handler();
private final Runnable mFailsafeRunnable = this::onFailsafe;
@@ -283,7 +286,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
private BackAnimation mBackAnimation;
public NavigationBarEdgePanel(Context context,
BackAnimation backAnimation) {
BackAnimation backAnimation, LatencyTracker latencyTracker) {
super(context);
mWindowManager = context.getSystemService(WindowManager.class);
@@ -383,6 +386,7 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
}, backgroundExecutor);
mRegionSamplingHelper.setWindowVisible(true);
mShowProtection = !isPrimaryDisplay;
mLatencyTracker = latencyTracker;
}
public void setBackAnimation(BackAnimation backAnimation) {
@@ -492,6 +496,8 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
updatePosition(event.getY());
mRegionSamplingHelper.start(mSamplingRect);
mWindowManager.updateViewLayout(this, mLayoutParams);
mLatencyTracker.onActionStart(LatencyTracker.ACTION_SHOW_BACK_ARROW);
mTrackingBackArrowLatency = true;
break;
case MotionEvent.ACTION_MOVE:
handleMoveEvent(event);
@@ -547,6 +553,10 @@ public class NavigationBarEdgePanel extends View implements NavigationEdgeBackPl
canvas.drawPath(arrowPath, mPaint);
canvas.restore();
if (mTrackingBackArrowLatency) {
mLatencyTracker.onActionEnd(LatencyTracker.ACTION_SHOW_BACK_ARROW);
mTrackingBackArrowLatency = false;
}
}
@Override