Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c987d9b8 authored by Shan Huang's avatar Shan Huang
Browse files

Track latency for showing the back arrow.

Bug: b/222407451
Test: m -j
Change-Id: Id96af97db97dc3f5648fbfd92aead12b5f62d949
parent 7c722ca4
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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");
        }
+12 −5
Original line number Diff line number Diff line
@@ -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);
        }
    }

+11 −1
Original line number Diff line number Diff line
@@ -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