Files
buzz/mobile/test
Tom Brow cad7f1d53d perf(mobile): build composer channel names once per channel list (#8943)
## Summary

`_useComposerChannelNames` ran on every `ComposeBar` build. Each time it
built a lowercase-name to id map over every channel and joined every
entry into a string key, only so a `useEffect` could skip calling
`setChannelNames`. The composer rebuilds on every keystroke and keyboard
animation frame.

This memoizes the map and key on the channel list instance. The effect
is still gated on the content key, so an equal new list still doesn't
call `setChannelNames` again.

## Measurements

iPhone 12 mini, Profile build, Builderlab, raising the composer keyboard
in #4things: `_useComposerChannelNames` was 26 of 31 `ComposeBar.build`
CPU samples (about 26 ms of UI work across the 600 ms raise).

Limitation: I haven't re-measured on the device after the change. The
removal is shown by the test below.

## Testing

- New test: rebuilding the composer 5 times (keyboard insets and typing)
with the same channel list doesn't iterate the list again. It fails with
the change reverted (8 iterations instead of 3).
- New test: changing the channel list still updates the composer's
channel chips.
- `just mobile-check mobile-test` passes (pre-push hook).

🤖 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>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 08:00:19 -08:00
..