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

Commit be4c6cdd authored by Pascal Mütschard's avatar Pascal Mütschard
Browse files

Stop using HWUI callbacks for jank.

Removes skipping of frames tagged as "first frame" by HWUI for jank and
stops registering the HardwareRendererObserver if the HWUI callback is
not needed for anything.

Bug: b/354763298
Test: FrameworksCoreTests manual
Flag: com.android.internal.jank.ignore_hwui_is_first_frame
Change-Id: I83c6bbaba5e21cadff5b34f87fa51ede42b31800
parent 046855a0
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -230,7 +230,7 @@ public class FrameTracker implements HardwareRendererObserver.OnFrameMetricsAvai
        mRendererWrapper = mSurfaceOnly ? null : renderer;
        mMetricsWrapper = mSurfaceOnly ? null : metrics;
        mViewRoot = mSurfaceOnly ? null : viewRootWrapper;
        mObserver = mSurfaceOnly
        mObserver = mSurfaceOnly || (Flags.useSfFrameDuration() && Flags.ignoreHwuiIsFirstFrame())
                ? null
                : new HardwareRendererObserver(this, mMetricsWrapper.getTiming(),
                        mHandler, /* waitForPresentTime= */ false);
@@ -568,7 +568,7 @@ public class FrameTracker implements HardwareRendererObserver.OnFrameMetricsAvai
    }

    private boolean callbacksReceived(JankInfo info) {
        return mSurfaceOnly
        return mObserver == null
                ? info.surfaceControlCallbackFired
                : info.hwuiCallbackFired && info.surfaceControlCallbackFired;
    }
@@ -599,7 +599,7 @@ public class FrameTracker implements HardwareRendererObserver.OnFrameMetricsAvai
        for (int i = 0; i < mJankInfos.size(); i++) {
            JankInfo info = mJankInfos.valueAt(i);
            final boolean isFirstDrawn = !mSurfaceOnly && info.isFirstFrame;
            if (isFirstDrawn) {
            if (isFirstDrawn && !Flags.ignoreHwuiIsFirstFrame()) {
                continue;
            }
            if (info.frameVsyncId > mEndVsyncId) {
@@ -636,7 +636,7 @@ public class FrameTracker implements HardwareRendererObserver.OnFrameMetricsAvai
                }
                // TODO (b/174755489): Early latch currently gets fired way too often, so we have
                // to ignore it for now.
                if (!mSurfaceOnly && !info.hwuiCallbackFired) {
                if (mObserver != null && !info.hwuiCallbackFired) {
                    markEvent("FT#MissedHWUICallback", info.frameVsyncId);
                    Log.w(TAG, "Missing HWUI jank callback for vsyncId: " + info.frameVsyncId
                            + ", CUJ=" + name);
@@ -762,17 +762,21 @@ public class FrameTracker implements HardwareRendererObserver.OnFrameMetricsAvai
         * @param observer observer
         */
        public void addObserver(HardwareRendererObserver observer) {
            if (observer != null) {
                mRenderer.addObserver(observer);
            }
        }

        /**
         * Wrapper method.
         * @param observer observer
         */
        public void removeObserver(HardwareRendererObserver observer) {
            if (observer != null) {
                mRenderer.removeObserver(observer);
            }
        }
    }

    public static class ViewRootWrapper {
        private final ViewRootImpl mViewRoot;
+7 −0
Original line number Diff line number Diff line
@@ -8,3 +8,10 @@ flag {
  bug: "354763298"
  is_fixed_read_only: true
}
flag {
  name: "ignore_hwui_is_first_frame"
  namespace: "window_surfaces"
  description: "Whether to remove the usage of the HWUI 'is first frame' flag to ignore jank"
  bug: "354763298"
  is_fixed_read_only: true
}