Merge "Monitor the page scrolling jank for app list pages"
This commit is contained in:
committed by
Android (Google) Code Review
commit
e1be0e41ba
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user