mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 00:16:59 +00:00
The notifications feed is dominated by MultiSetCards, each rendering a gallery of up to 30 author avatars. Profiling a loaded account showed the per-author work on the main thread, not the GPU, as the scroll-jitter driver. Three feature-preserving cuts: - Hoist account-global reads out of the per-author avatar. The auto-play-gif setting and the logged-in follow set were collected once *per author* (~60 redundant Flow collectors / coroutine launches per card). They are now collected once per gallery and passed down via LocalAuthorGalleryRenderContext. - Dedupe the per-author metadata subscription. Each avatar fired UserFinderFilterAssemblerSubscription twice (via observeUserPicture + observeUserContactCardsScore); both observers gained a `subscribe` flag so the gallery subscribes once per author. - Replace the per-event DateTimeFormatter day-bucketing in convertToCard with a LocalDate.toEpochDay() Long key (identical grouping, no Instant/ZonedDateTime/ String allocation per reaction/zap/repost), and hoist the ZoneId lookup. Measured before/after on a Samsung SM-T220 (loaded account, identical scripted scroll, dumpsys gfxinfo): Slow-UI-thread events ~13 -> ~5 (~60% fewer), 95th-pct frame ~52ms -> ~38ms, janky frames ~13% -> ~10%. GPU timings unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>