Conversation
A settled assistant message was one list row, so scrolling it back into view mounted the whole text tree on the UI thread in a single frame. Android now recycles those containers and splits expensive messages into bounded slices. Live-follow still pins the end as the tail grows. Fixes pingdotgg#13925
Owner
Author
|
Opened upstream. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Changed
Android transcript scrolling now recycles LegendList row containers and splits expensive assistant messages into bounded slices. Short messages, and a single short code fence, stay on the highlighted markdown renderer. iOS still uses one row per message and does not recycle those containers.
A code fence longer than 16 lines is drawn as plain monospace windows (one non-selectable
Textper window). The header copy button still copies the whole fence. GFM tables stay intact.Why
On Android, each assistant message was one LegendList row and
recycleItemsdefaults to false. Scrolling a long settled thread (tool-call groups and code blocks) remounted the entire selectable text tree on the UI thread (ReactTextView/DynamicLayout) and dropped frames. Web and desktop stay smooth because they do not pay that native text-mount cost.Recycling the container and capping each row (about 720 characters of prose, or 16 lines of code) keeps a re-entry mount inside a frame. The first slice keeps the message id, and later slices append, so live-follow and scroll-to-end still pin the tail as it grows. User-message anchors are not sliced.
Fixes pingdotgg#13925
pingdotgg#13925
UI Changes
No before/after frames. This environment has no Android emulator, so device frame times were not captured. Unit tests cover the slice splitter, stable ids while a message grows, and the iOS identity path. Mobile
tscis clean.On Android only, a long code fence loses per-token syntax colors and is shown as joined monospace windows. Copy of the full fence is unchanged. Short fences stay highlighted.
Checklist