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

Commit 9f6c5bda authored by Yanting Yang's avatar Yanting Yang
Browse files

Monitor the page scrolling jank for app list pages

Bug: 254237663
Test: take the trace and check the cuj section name
Change-Id: Id9b7affcad354c43c1e8934d81abd1bb51fb2956
parent f6908a22
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -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);
                }
            }

+3 −1
Original line number Diff line number Diff line
@@ -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