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

Commit 942dab6a authored by Tony Huang's avatar Tony Huang
Browse files

Metirc FPS by compare drawn time with each frame

Bug: 301343249
Test: record_android_trace view -a*
Flag: ACONFIG android.view.flags.Flags.toolkitMetrics DEVELOPMENT
Change-Id: I036baafe15d899817eccecaf3aae0afd5b172840
parent a8c95e52
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ import static android.view.accessibility.Flags.reduceWindowContentChangedEventTh
import static android.view.inputmethod.InputMethodEditorTraceProto.InputMethodClientsTraceProto.ClientSideProto.IME_FOCUS_CONTROLLER;
import static android.view.inputmethod.InputMethodEditorTraceProto.InputMethodClientsTraceProto.ClientSideProto.INSETS_CONTROLLER;
import static android.view.flags.Flags.toolkitSetFrameRateReadOnly;
import static android.view.flags.Flags.toolkitMetricsForFrameRateDecision;

import android.Manifest;
import android.accessibilityservice.AccessibilityService;
@@ -372,6 +373,8 @@ public final class ViewRootImpl implements ViewParent,
     */
    private static final int KEEP_CLEAR_AREA_REPORT_RATE_MILLIS = 100;

    private static final long NANOS_PER_SEC = 1000000000;

    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    static final ThreadLocal<HandlerActionQueue> sRunQueues = new ThreadLocal<HandlerActionQueue>();

@@ -819,6 +822,8 @@ public final class ViewRootImpl implements ViewParent,

    private boolean mInsetsAnimationRunning;

    private long mPreviousFrameDrawnTime = -1;

    /**
     * The resolved pointer icon type requested by this window.
     * A null value indicates the resolved pointer icon has not yet been calculated.
@@ -1048,11 +1053,14 @@ public final class ViewRootImpl implements ViewParent,
    private boolean mChildBoundingInsetsChanged = false;

    private String mTag = TAG;
    private String mFpsTraceName;

    private static boolean sToolkitSetFrameRateReadOnlyFlagValue;
    private static boolean sToolkitMetricsForFrameRateDecisionFlagValue;

    static {
        sToolkitSetFrameRateReadOnlyFlagValue = toolkitSetFrameRateReadOnly();
        sToolkitMetricsForFrameRateDecisionFlagValue = toolkitMetricsForFrameRateDecision();
    }

    public ViewRootImpl(Context context, Display display) {
@@ -1293,6 +1301,7 @@ public final class ViewRootImpl implements ViewParent,

                attrs = mWindowAttributes;
                setTag();
                mFpsTraceName = "FPS of " + getTitle();

                if (DEBUG_KEEP_SCREEN_ON && (mClientWindowLayoutFlags
                        & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0
@@ -4660,6 +4669,31 @@ public final class ViewRootImpl implements ViewParent,
        }
    }

    /**
     * Called from draw() to collect metrics for frame rate decision.
     */
    private void collectFrameRateDecisionMetrics() {
        if (!Trace.isEnabled()) {
            if (mPreviousFrameDrawnTime > 0) mPreviousFrameDrawnTime = -1;
            return;
        }

        if (mPreviousFrameDrawnTime < 0) {
            mPreviousFrameDrawnTime = mChoreographer.getExpectedPresentationTimeNanos();
            return;
        }

        long expectedDrawnTime = mChoreographer.getExpectedPresentationTimeNanos();
        long timeDiff = expectedDrawnTime - mPreviousFrameDrawnTime;
        if (timeDiff <= 0) {
            return;
        }

        long fps = NANOS_PER_SEC / timeDiff;
        Trace.setCounter(mFpsTraceName, fps);
        mPreviousFrameDrawnTime = expectedDrawnTime;
    }

    private void reportDrawFinished(@Nullable Transaction t, int seqId) {
        if (DEBUG_BLAST) {
            Log.d(mTag, "reportDrawFinished");
@@ -4978,6 +5012,9 @@ public final class ViewRootImpl implements ViewParent,
        if (DEBUG_FPS) {
            trackFPS();
        }
        if (sToolkitMetricsForFrameRateDecisionFlagValue) {
            collectFrameRateDecisionMetrics();
        }

        if (!sFirstDrawComplete) {
            synchronized (sFirstDrawHandlers) {
+8 −0
Original line number Diff line number Diff line
@@ -43,3 +43,11 @@ flag {
  description: "Enable the `setFrameRate` callback"
  bug: "299946220"
}

flag {
    name: "toolkit_metrics_for_frame_rate_decision"
    namespace: "toolkit"
    description: "Feature flag for toolkit metrics collecting for frame rate decision"
    bug: "301343249"
    is_fixed_read_only: true
}
 No newline at end of file