From 9f6c5bdadc2b4788b2c04059dc86c6eaeeea3d7e Mon Sep 17 00:00:00 2001 From: Yanting Yang Date: Tue, 18 Oct 2022 20:13:35 +0000 Subject: [PATCH] Monitor the page scrolling jank for app list pages Bug: 254237663 Test: take the trace and check the cuj section name Change-Id: Id9b7affcad354c43c1e8934d81abd1bb51fb2956 --- .../ManageApplications.java | 21 +++++++++++++++++-- .../ManageApplicationsTest.java | 4 +++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 927619a341a..3786313b485 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -19,6 +19,7 @@ package com.android.settings.applications.manageapplications; import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_DRAGGING; import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE; +import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_PAGE_SCROLL; import static com.android.settings.ChangeIds.CHANGE_RESTRICT_SAW_INTENT; import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL; import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED; @@ -86,6 +87,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.internal.compat.IPlatformCompat; +import com.android.internal.jank.InteractionJankMonitor; import com.android.settings.R; import com.android.settings.Settings; import com.android.settings.Settings.GamesStorageActivity; @@ -1196,8 +1198,10 @@ public class ManageApplications extends InstrumentedFragment @Override public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); + final String className = + mManageApplications.getClass().getName() + "_" + mManageApplications.mListType; mRecyclerView = recyclerView; - mOnScrollListener = new OnScrollListener(this); + mOnScrollListener = new OnScrollListener(this, className); mRecyclerView.addOnScrollListener(mOnScrollListener); } @@ -1757,11 +1761,15 @@ public class ManageApplications extends InstrumentedFragment private boolean mDelayNotifyDataChange; private ApplicationsAdapter mAdapter; private InputMethodManager mInputMethodManager; + private InteractionJankMonitor mMonitor; + private String mClassName; - public OnScrollListener(ApplicationsAdapter adapter) { + public OnScrollListener(ApplicationsAdapter adapter, String className) { mAdapter = adapter; mInputMethodManager = mAdapter.mContext.getSystemService( InputMethodManager.class); + mMonitor = InteractionJankMonitor.getInstance(); + mClassName = className; } @Override @@ -1776,6 +1784,15 @@ public class ManageApplications extends InstrumentedFragment mInputMethodManager.hideSoftInputFromWindow(recyclerView.getWindowToken(), 0); } + // Start jank monitoring during page scrolling. + final InteractionJankMonitor.Configuration.Builder builder = + InteractionJankMonitor.Configuration.Builder.withView( + CUJ_SETTINGS_PAGE_SCROLL, recyclerView) + .setTag(mClassName); + mMonitor.begin(builder); + } else if (mScrollState == SCROLL_STATE_IDLE) { + // Stop jank monitoring on page scrolling. + mMonitor.end(CUJ_SETTINGS_PAGE_SCROLL); } } diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java index da17f1143bb..910fbed18c1 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java @@ -60,6 +60,7 @@ import com.android.settings.widget.LoadingViewController; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppFilter; +import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor; import org.junit.Before; import org.junit.Test; @@ -75,7 +76,8 @@ import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class}) +@Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class, + ShadowInteractionJankMonitor.class}) public class ManageApplicationsTest { @Mock