From 892d65fd1eaccae914bd8282ff30fa1f307d0801 Mon Sep 17 00:00:00 2001 From: Soroosh Mariooryad Date: Fri, 30 Jun 2017 16:43:41 -0700 Subject: [PATCH] Adding warmup call API for Settings search ranking. - This allows the ranking implementations to prepare for predictions and avoids latency on the first prediction call. Bug: 38197948 Bug: 37312700 Test: RunSettingsRoboTests Change-Id: I1878b14765ad7cede5648fa1c7f29c419c2e5535 --- .../search/SearchFeatureProvider.java | 6 ++++ .../settings/search/SearchFragment.java | 4 +++ .../settings/search/SearchFragmentTest.java | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java index 2fbebba0ff2..8601e6b4cb2 100644 --- a/src/com/android/settings/search/SearchFeatureProvider.java +++ b/src/com/android/settings/search/SearchFeatureProvider.java @@ -130,4 +130,10 @@ public interface SearchFeatureProvider { return false; } + /** + * Prepare for search ranking predictions to avoid latency on the first prediction call. + */ + default void searchRankingWarmup(Context context) { + } + } diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java index 618f1b7c039..2a485fe7a94 100644 --- a/src/com/android/settings/search/SearchFragment.java +++ b/src/com/android/settings/search/SearchFragment.java @@ -209,6 +209,10 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O @Override public void onResume() { super.onResume(); + Context appContext = getContext().getApplicationContext(); + if (mSearchFeatureProvider.isSmartSearchRankingEnabled(appContext)) { + mSearchFeatureProvider.searchRankingWarmup(appContext); + } requery(); } diff --git a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java index e02c5173da2..bc05c165109 100644 --- a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java @@ -451,6 +451,36 @@ public class SearchFragmentTest { nullable(String.class), eq(searchResult)); } + @Test + public void onResume_shouldCallSearchRankingWarmupIfSmartSearchRankingEnabled(){ + when(mFeatureFactory.searchFeatureProvider.isSmartSearchRankingEnabled(any(Context.class))) + .thenReturn(true); + + ActivityController activityController = + Robolectric.buildActivity(SearchActivity.class); + activityController.setup(); + SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager() + .findFragmentById(R.id.main_content); + + verify(mFeatureFactory.searchFeatureProvider) + .searchRankingWarmup(any(Context.class)); + } + + @Test + public void onResume_shouldNotCallSearchRankingWarmupIfSmartSearchRankingDisabled(){ + when(mFeatureFactory.searchFeatureProvider.isSmartSearchRankingEnabled(any(Context.class))) + .thenReturn(false); + + ActivityController activityController = + Robolectric.buildActivity(SearchActivity.class); + activityController.setup(); + SearchFragment fragment = (SearchFragment) activityController.get().getFragmentManager() + .findFragmentById(R.id.main_content); + + verify(mFeatureFactory.searchFeatureProvider, never()) + .searchRankingWarmup(any(Context.class)); + } + private ArgumentMatcher> pairMatches(int tag) { return pair -> pair.first == tag; }