Files
buzz/mobile/test/shared/theme
Tom Brow 1ce831645c mobile: stop re-parsing messages on every resume (#9140)
Resuming the app with a busy channel open stalled for several frames
(149, 136, 109 and 102 ms on an iPhone 12 mini), because every visible
message re-parsed its markdown, repeatedly.

The app widget rebuilds on every lifecycle change, and each rebuild
created new light and dark `ThemeData`. A new `ThemeData` never equals
the previous one, so `MaterialApp` animated between two identical themes
for its full theme transition. Each frame of that animation produced a
new markdown theme, and every mounted message re-parsed its markdown in
response (`_MdWidgetState.didChangeDependencies` and `didUpdateWidget`).
In a 15 s resume on a large channel that re-parse took 373 ms of
main-isolate time.

The themes are now built only when the community accent changes, so a
lifecycle rebuild keeps the same theme objects and starts no transition.

### Validation

- Added test: `an app rebuild keeps its themes and markdown theme`
rebuilds the app and checks that the theme and the markdown theme stay
identical. It fails without the change.
- Full mobile suite: only the known failures that also fail on main
(notification toggle, push bootstrap, push bridge, push lease revocation
outbox).
- Automated simulator run (iPhone 17 Pro, debug build): opened a channel
with markdown messages, backgrounded and resumed the app several times,
and switched between light and dark appearance while the app was open.
Messages render, resume works, and the app follows appearance changes
live. A channel's long-press action sheet keeps its light background
after a switch to dark mode on both this build and main, so that is
unrelated to this change.
- Profile evidence (iPhone 12 mini, Profile build, before the change):
the stalls and re-parse samples above came from a resume with a large
channel open.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: Tom Brow <tomb@squareup.com>
Co-authored-by: Tom Brow <tomb@squareup.com>
Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
2026-11-05 13:48:23 -08:00
..