diff --git a/core/java/com/android/internal/jank/FrameTracker.java b/core/java/com/android/internal/jank/FrameTracker.java index d14054d4f9f73..e1a67d861bcb9 100644 --- a/core/java/com/android/internal/jank/FrameTracker.java +++ b/core/java/com/android/internal/jank/FrameTracker.java @@ -24,8 +24,6 @@ import static android.view.SurfaceControl.JankData.JANK_SURFACEFLINGER_GPU_DEADL import static android.view.SurfaceControl.JankData.PREDICTION_ERROR; import static android.view.SurfaceControl.JankData.SURFACE_FLINGER_SCHEDULING; -import static com.android.internal.jank.InteractionJankMonitor.ACTION_METRICS_LOGGED; -import static com.android.internal.jank.InteractionJankMonitor.ACTION_SESSION_BEGIN; import static com.android.internal.jank.InteractionJankMonitor.ACTION_SESSION_CANCEL; import static com.android.internal.jank.InteractionJankMonitor.ACTION_SESSION_END; @@ -241,7 +239,6 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener if (!mSurfaceOnly) { mRendererWrapper.addObserver(mObserver); } - notifyCujEvent(ACTION_SESSION_BEGIN); } } @@ -523,7 +520,6 @@ public class FrameTracker extends SurfaceControl.OnJankDataListener maxFrameTimeNanos, /* will be 0 if mSurfaceOnly == true */ missedSfFramesCount, missedAppFramesCount); - notifyCujEvent(ACTION_METRICS_LOGGED); } if (DEBUG) { Log.i(TAG, "finish: CUJ=" + mSession.getName() diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java index a33b2f18819e3..cd5d0a1417447 100644 --- a/core/java/com/android/internal/jank/InteractionJankMonitor.java +++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java @@ -16,10 +16,7 @@ package com.android.internal.jank; -import static android.content.Intent.FLAG_RECEIVER_REGISTERED_ONLY; - import static com.android.internal.jank.FrameTracker.REASON_CANCEL_NORMAL; -import static com.android.internal.jank.FrameTracker.REASON_CANCEL_NOT_BEGUN; import static com.android.internal.jank.FrameTracker.REASON_CANCEL_TIMEOUT; import static com.android.internal.jank.FrameTracker.REASON_END_NORMAL; import static com.android.internal.jank.FrameTracker.REASON_END_UNKNOWN; @@ -71,11 +68,9 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import android.annotation.IntDef; import android.annotation.NonNull; import android.content.Context; -import android.content.Intent; import android.os.Build; import android.os.HandlerExecutor; import android.os.HandlerThread; -import android.os.SystemProperties; import android.provider.DeviceConfig; import android.text.TextUtils; import android.util.Log; @@ -131,14 +126,8 @@ public class InteractionJankMonitor { private static final int DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES = 3; private static final int DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS = 64; - public static final String ACTION_SESSION_BEGIN = ACTION_PREFIX + ".ACTION_SESSION_BEGIN"; public static final String ACTION_SESSION_END = ACTION_PREFIX + ".ACTION_SESSION_END"; public static final String ACTION_SESSION_CANCEL = ACTION_PREFIX + ".ACTION_SESSION_CANCEL"; - public static final String ACTION_METRICS_LOGGED = ACTION_PREFIX + ".ACTION_METRICS_LOGGED"; - public static final String BUNDLE_KEY_CUJ_NAME = ACTION_PREFIX + ".CUJ_NAME"; - public static final String BUNDLE_KEY_TIMESTAMP = ACTION_PREFIX + ".TIMESTAMP"; - @VisibleForTesting - public static final String PROP_NOTIFY_CUJ_EVENT = "debug.jank.notify_cuj_events"; // Every value must have a corresponding entry in CUJ_STATSD_INTERACTION_TYPE. public static final int CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE = 0; @@ -374,8 +363,7 @@ public class InteractionJankMonitor { new ChoreographerWrapper(Choreographer.getInstance()); synchronized (mLock) { - FrameTrackerListener eventsListener = - (s, act) -> handleCujEvents(config.getContext(), act, s); + FrameTrackerListener eventsListener = (s, act) -> handleCujEvents(act, s); return new FrameTracker(session, mWorker.getThreadHandler(), threadedRenderer, viewRoot, surfaceControl, choreographer, mMetrics, mTraceThresholdMissedFrames, mTraceThresholdFrameTimeMillis, @@ -383,24 +371,13 @@ public class InteractionJankMonitor { } } - private void handleCujEvents(Context context, String action, Session session) { + private void handleCujEvents(String action, Session session) { // Clear the running and timeout tasks if the end / cancel was fired within the tracker. // Or we might have memory leaks. if (needRemoveTasks(action, session)) { removeTimeout(session.getCuj()); removeTracker(session.getCuj()); } - - // Notify the receivers if necessary. - if (session.shouldNotify()) { - if (context != null) { - notifyEvents(context, action, session); - } else { - throw new IllegalArgumentException( - "Can't notify cuj events due to lack of context: cuj=" - + session.getName() + ", action=" + action); - } - } } private boolean needRemoveTasks(String action, Session session) { @@ -412,22 +389,6 @@ public class InteractionJankMonitor { return badEnd || badCancel; } - /** - * Notifies who may interest in some CUJ events. - */ - @VisibleForTesting - public void notifyEvents(Context context, String action, Session session) { - if (action.equals(ACTION_SESSION_CANCEL) - && session.getReason() == REASON_CANCEL_NOT_BEGUN) { - return; - } - Intent intent = new Intent(action); - intent.putExtra(BUNDLE_KEY_CUJ_NAME, getNameOfCuj(session.getCuj())); - intent.putExtra(BUNDLE_KEY_TIMESTAMP, session.getTimeStamp()); - intent.addFlags(FLAG_RECEIVER_REGISTERED_ONLY); - context.sendBroadcast(intent); - } - private void removeTimeout(@CujType int cujType) { synchronized (mLock) { Runnable timeout = mTimeoutActions.get(cujType); @@ -625,7 +586,17 @@ public class InteractionJankMonitor { */ public static String getNameOfInteraction(int interactionType) { // There is an offset amount of 1 between cujType and interactionType. - return getNameOfCuj(interactionType - 1); + return getNameOfCuj(getCujTypeFromInteraction(interactionType)); + } + + /** + * A helper method to translate interaction type to CUJ type. + * + * @param interactionType the interaction type defined in AtomsProto.java + * @return the integer in {@link CujType} + */ + private static int getCujTypeFromInteraction(int interactionType) { + return interactionType - 1; } /** @@ -935,13 +906,11 @@ public class InteractionJankMonitor { private final long mTimeStamp; @Reasons private int mReason = REASON_END_UNKNOWN; - private final boolean mShouldNotify; private final String mName; public Session(@CujType int cujType, @NonNull String postfix) { mCujType = cujType; mTimeStamp = System.nanoTime(); - mShouldNotify = SystemProperties.getBoolean(PROP_NOTIFY_CUJ_EVENT, false); mName = TextUtils.isEmpty(postfix) ? String.format("J<%s>", getNameOfCuj(mCujType)) : String.format("J<%s::%s>", getNameOfCuj(mCujType), postfix); @@ -981,10 +950,5 @@ public class InteractionJankMonitor { public @Reasons int getReason() { return mReason; } - - /** Determines if should notify the receivers of cuj events */ - public boolean shouldNotify() { - return mShouldNotify; - } } } diff --git a/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java b/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java index 0d2d047b7f0bc..a4091294aa707 100644 --- a/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java +++ b/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java @@ -176,7 +176,6 @@ public class InteractionJankMonitorTest { private InteractionJankMonitor createMockedInteractionJankMonitor() { InteractionJankMonitor monitor = spy(new InteractionJankMonitor(mWorker)); doReturn(true).when(monitor).shouldMonitor(anyInt()); - doNothing().when(monitor).notifyEvents(any(), any(), any()); return monitor; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt index 0ba713464b806..ea0dd72d673f5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt @@ -99,6 +99,7 @@ class UnlockedScreenOffAnimationController @Inject constructor( override fun onAnimationEnd(animation: Animator?) { lightRevealAnimationPlaying = false + interactionJankMonitor.end(CUJ_SCREEN_OFF) } override fun onAnimationStart(animation: Animator?) {