Merge "Monitor the page scrolling jank for app list pages"

This commit is contained in:
TreeHugger Robot
2022-11-11 22:00:11 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 3 deletions

View File

@@ -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_DRAGGING;
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE; 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.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_ALL;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED; 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 androidx.recyclerview.widget.RecyclerView;
import com.android.internal.compat.IPlatformCompat; import com.android.internal.compat.IPlatformCompat;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings.AlarmsAndRemindersActivity; import com.android.settings.Settings.AlarmsAndRemindersActivity;
import com.android.settings.Settings.AppBatteryUsageActivity; import com.android.settings.Settings.AppBatteryUsageActivity;
@@ -1242,8 +1244,10 @@ public class ManageApplications extends InstrumentedFragment
@Override @Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView); super.onAttachedToRecyclerView(recyclerView);
final String className =
mManageApplications.getClass().getName() + "_" + mManageApplications.mListType;
mRecyclerView = recyclerView; mRecyclerView = recyclerView;
mOnScrollListener = new OnScrollListener(this); mOnScrollListener = new OnScrollListener(this, className);
mRecyclerView.addOnScrollListener(mOnScrollListener); mRecyclerView.addOnScrollListener(mOnScrollListener);
} }
@@ -1803,11 +1807,15 @@ public class ManageApplications extends InstrumentedFragment
private boolean mDelayNotifyDataChange; private boolean mDelayNotifyDataChange;
private ApplicationsAdapter mAdapter; private ApplicationsAdapter mAdapter;
private InputMethodManager mInputMethodManager; private InputMethodManager mInputMethodManager;
private InteractionJankMonitor mMonitor;
private String mClassName;
public OnScrollListener(ApplicationsAdapter adapter) { public OnScrollListener(ApplicationsAdapter adapter, String className) {
mAdapter = adapter; mAdapter = adapter;
mInputMethodManager = mAdapter.mContext.getSystemService( mInputMethodManager = mAdapter.mContext.getSystemService(
InputMethodManager.class); InputMethodManager.class);
mMonitor = InteractionJankMonitor.getInstance();
mClassName = className;
} }
@Override @Override
@@ -1822,6 +1830,15 @@ public class ManageApplications extends InstrumentedFragment
mInputMethodManager.hideSoftInputFromWindow(recyclerView.getWindowToken(), mInputMethodManager.hideSoftInputFromWindow(recyclerView.getWindowToken(),
0); 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);
} }
} }

View File

@@ -60,6 +60,7 @@ import com.android.settings.widget.LoadingViewController;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter; import com.android.settingslib.applications.ApplicationsState.AppFilter;
import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -75,7 +76,8 @@ import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class}) @Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class,
ShadowInteractionJankMonitor.class})
public class ManageApplicationsTest { public class ManageApplicationsTest {
@Mock @Mock