Use lighter field set for home screen API requests

Reduces API response payload for home screen rows by excluding heavy
fields (MediaSources, MediaStreams, Chapters, Trickplay) that aren't
needed for display. Full item data is fetched when user selects an item.

Benchmark: Cold start to home screen fully loaded (Nvidia Shield)
- Baseline: ~5200ms
- With this change: ~3800ms
- Improvement: 27% faster

Measurement methodology: Time from MainActivity START to last
'Creating items' log entry, averaged over 3 runs per configuration.
This commit is contained in:
John Corser authored and Niels van Velzen committed 2026-04-26 23:33:13 +02:00
1 parent 6fec6c0bf0
commit 3584647f83
3 files changed
+15 -3

No files matched your search

@@ -22,4 +22,16 @@ object ItemRepository {
ItemFields.TAGLINES,
ItemFields.TRICKPLAY,
)
// Lighter field set for home screen rows - excludes heavy fields like
// MediaSources, MediaStreams, Chapters, Trickplay that aren't needed for display.
// Full item data is fetched when user selects an item.
val browseFields = setOf(
ItemFields.CAN_DELETE,
ItemFields.CHILD_COUNT,
ItemFields.DATE_CREATED,
ItemFields.GENRES,
ItemFields.OVERVIEW,
ItemFields.PRIMARY_IMAGE_ASPECT_RATIO,
)
}
@@ -25,7 +25,7 @@ class HomeFragmentHelper(
fun loadResume(title: String, includeMediaTypes: Collection<MediaType>): HomeFragmentRow {
val query = GetResumeItemsRequest(
limit = ITEM_LIMIT_RESUME,
fields = ItemRepository.itemFields,
fields = ItemRepository.browseFields,
imageTypeLimit = 1,
enableTotalRecordCount = false,
mediaTypes = includeMediaTypes,
@@ -58,7 +58,7 @@ class HomeFragmentHelper(
imageTypeLimit = 1,
limit = ITEM_LIMIT_NEXT_UP,
enableResumable = false,
fields = ItemRepository.itemFields
fields = ItemRepository.browseFields
)
return HomeFragmentBrowseRowDefRow(BrowseRowDef(context.getString(R.string.lbl_next_up), query, arrayOf(ChangeTriggerType.TvPlayback)))
@@ -28,7 +28,7 @@ class HomeFragmentLatestRow(
.map { item ->
// Create query and add it to a new row
val request = GetLatestMediaRequest(
fields = ItemRepository.itemFields,
fields = ItemRepository.browseFields,
imageTypeLimit = 1,
parentId = item.id,
groupItems = true,