summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
author Govinda Wasserman <gwasserman@google.com> 2024-05-22 09:41:34 -0400
committer Govinda Wasserman <gwasserman@google.com> 2024-05-23 13:54:42 -0400
commit1dc90519a76292138c346a5622ac5571713fc030 (patch)
treeb659a4aa3d76f7786ba008d57fdbc519f1367f69 /java/src
parentf1fd7bf9ce6db12ff68430f4c563bf04ebcf1a41 (diff)
Preload full set of preview image metadata pages
This is the first step in mitigating the bottleneck of slow metadata loading by proactively loading pages to the max window size. Test: atest CursorPreviewsInteractorTest FetchPreviewsInteractorTest Test: manual test using ShareTest with high metadata latency BUG: 341923886 Flag: android.service.chooser.chooser_payload_toggling Change-Id: I1192e7bdf7db77573990745dd5b05d7ef86d7f20
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt36
1 files changed, 34 insertions, 2 deletions
diff --git a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
index 97b087e1..f02834e0 100644
--- a/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
+++ b/java/src/com/android/intentresolver/contentpreview/payloadtoggle/domain/interactor/CursorPreviewsInteractor.kt
@@ -76,10 +76,42 @@ constructor(
.toMap(ConcurrentHashMap())
val pagedCursor: PagedCursor<CursorRow?> = uriCursor.paged(pageSize)
val startPosition = uriCursor.extras?.getInt(POSITION, 0) ?: 0
- val state = readInitialState(pagedCursor, startPosition, unclaimedRecords)
+ val state =
+ loadToMaxPages(
+ initialState = readInitialState(pagedCursor, startPosition, unclaimedRecords),
+ pagedCursor = pagedCursor,
+ unclaimedRecords = unclaimedRecords,
+ )
processLoadRequests(state, pagedCursor, unclaimedRecords)
}
+ private suspend fun loadToMaxPages(
+ initialState: CursorWindow,
+ pagedCursor: PagedCursor<CursorRow?>,
+ unclaimedRecords: MutableUnclaimedMap,
+ ): CursorWindow {
+ var state = initialState
+ val startPageNum = state.firstLoadedPageNum
+ while ((state.hasMoreLeft || state.hasMoreRight) && state.numLoadedPages < maxLoadedPages) {
+ interactor.setPreviews(
+ previewsByKey = state.merged.values.toSet(),
+ startIndex = startPageNum,
+ hasMoreLeft = state.hasMoreLeft,
+ hasMoreRight = state.hasMoreRight,
+ )
+ val loadedLeft = startPageNum - state.firstLoadedPageNum
+ val loadedRight = state.lastLoadedPageNum - startPageNum
+ state =
+ when {
+ state.hasMoreLeft && loadedLeft < loadedRight ->
+ state.loadMoreLeft(pagedCursor, unclaimedRecords)
+ state.hasMoreRight -> state.loadMoreRight(pagedCursor, unclaimedRecords)
+ else -> state.loadMoreLeft(pagedCursor, unclaimedRecords)
+ }
+ }
+ return state
+ }
+
/** Loop forever, processing any loading requests from the UI and updating local cache. */
private suspend fun processLoadRequests(
initialState: CursorWindow,
@@ -301,5 +333,5 @@ annotation class MaxLoadedPages
object ShareouselConstants {
@Provides @PageSize fun pageSize(): Int = 16
- @Provides @MaxLoadedPages fun maxLoadedPages(): Int = 3
+ @Provides @MaxLoadedPages fun maxLoadedPages(): Int = 8
}