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

Commit 55910499 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Track latency for showing the back arrow." into tm-dev am: 9451a7a6

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

Change-Id: Ic7894650c8374f11fbb1ccbfd0fb01a580786a64
parents 6a6be0bd 9451a7a6
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