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
This commit is contained in:
Soroosh Mariooryad
2017-06-30 16:43:41 -07:00
parent 39e041b0f2
commit 892d65fd1e
3 changed files with 40 additions and 0 deletions

View File

@@ -130,4 +130,10 @@ public interface SearchFeatureProvider {
return false; return false;
} }
/**
* Prepare for search ranking predictions to avoid latency on the first prediction call.
*/
default void searchRankingWarmup(Context context) {
}
} }

View File

@@ -209,6 +209,10 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
Context appContext = getContext().getApplicationContext();
if (mSearchFeatureProvider.isSmartSearchRankingEnabled(appContext)) {
mSearchFeatureProvider.searchRankingWarmup(appContext);
}
requery(); requery();
} }

View File

@@ -451,6 +451,36 @@ public class SearchFragmentTest {
nullable(String.class), eq(searchResult)); nullable(String.class), eq(searchResult));
} }
@Test
public void onResume_shouldCallSearchRankingWarmupIfSmartSearchRankingEnabled(){
when(mFeatureFactory.searchFeatureProvider.isSmartSearchRankingEnabled(any(Context.class)))
.thenReturn(true);
ActivityController<SearchActivity> 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<SearchActivity> 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<Pair<Integer, Object>> pairMatches(int tag) { private ArgumentMatcher<Pair<Integer, Object>> pairMatches(int tag) {
return pair -> pair.first == tag; return pair -> pair.first == tag;
} }