Skip to content

perf(mobile): Home rows no longer blank during fast scrolling - #13680

Closed
AKolenda wants to merge 2 commits into
pingdotgg:mainfrom
AKolenda:perf/mobile-home-render-ahead
Closed

AKolenda wants to merge 2 commits into
pingdotgg:mainfrom
AKolenda:perf/mobile-home-render-ahead

Conversation

@AKolenda

Copy link
Copy Markdown
Contributor

What Changed

Home's list renders rows up to 2,000 beyond the screen instead of 500 (drawDistance), as a named constant. Five lines.

Stacked on #13679. This branch contains that PR's commit too; the last commit is this change. I'll rebase it onto main once #13679 merges.

Why

With #13679, rows away from the viewport are cheap dormant frames, but the list still rebuilds recycled rows while a fling moves it, and on a busy JS thread that can fall behind: #13679 alone still showed a blank list in 1 of 5 runs. Rendering further ahead means a fling reaches rows that are already built.

Pixel 9, real account (57 rows on Home), release build installed in place, the same 10 fast flings per run, all runs in one session:

build runs with blank frames blank list time per run janky frames app memory (PSS)
main (2 runs) 2 of 2 2.1 s 2.9–3.3% 618–629 MiB
#13679 alone (5 runs) 1 of 5 0.31 s in that run, none in the others 1.9–2.4% 525–571 MiB
#13679 + this PR (3 runs) 0 of 3 none 2.0–2.4% 585–622 MiB

Keeping more rows mounted costs memory: mean 550 MiB with #13679 alone and 598 MiB with this PR, still below main's 624 MiB. A draw distance of 1,000 also had no blank frames in 2 runs (550–567 MiB), so a lower value is an option if memory matters more than margin.

UI Changes

No visual change to a row. Same flings, #13679 alone (its worst run) on the left, with this PR on the right (MP4):

Home scrolling, #13679 alone vs with this PR

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

…nery

Rows away from the viewport render a dormant frame with the same content, tap
and long-press menu, but no pan gesture, Reanimated styles or hidden action
buttons. Visible rows become swipeable once scrolling settles, and activation
waits until no finger is on the list.
…shows blank space

With dormant rows cheap, a larger draw distance keeps the rows a fling reaches
already built instead of rebuilding them while the list moves.
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 25, 2026
@AKolenda

Copy link
Copy Markdown
Contributor Author

Superseded by #13705 (stacked on #13702).

@AKolenda AKolenda closed this Sep 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant