Skip to content

Avoid cloning Rows during Galley::concat#7649

Merged
emilk merged 1 commit intoemilk:mainfrom
afishhh:dont-clone-rows
Oct 31, 2025
Merged

Avoid cloning Rows during Galley::concat#7649
emilk merged 1 commit intoemilk:mainfrom
afishhh:dont-clone-rows

Conversation

@afishhh
Copy link
Copy Markdown
Contributor

@afishhh afishhh commented Oct 17, 2025

Moves ends_with_newline into PlacedRow to avoid clones during layout.
I don't think there was a rationale stronger than "don't change too much" for not doing this in #5411, so I should've just done this from the start.
This was a significant part of the profile for text layout (as it cloned almost every Row, even though it only needed to change a single boolean).

Before:
image

After:
image

(note that these profiles focus solely on the top-level Galley::layout_inline subtree, also don't compare sample count as the duration of these tests was completely arbitrary)

egui_demo_lib *text_layout* benches:
image

  • I have followed the instructions in the PR template

(As usual, the tests fail for me even on master but the failures on master and with these changes seem the same :))

@github-actions
Copy link
Copy Markdown

github-actions bot commented Oct 17, 2025

Preview available at https://egui-pr-preview.github.io/pr/7649-dont-clone-rows
Note that it might take a couple seconds for the update to show up after the preview_build workflow has completed.

View snapshot changes at kitdiff

Copy link
Copy Markdown
Collaborator

@lucasmerlin lucasmerlin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! Looks goot to me

@emilk emilk added the performance Lower CPU/GPU usage (optimize) label Oct 31, 2025
@emilk emilk merged commit e861c8e into emilk:main Oct 31, 2025
28 of 29 checks passed
Masterchef365 pushed a commit to Masterchef365/egui that referenced this pull request Apr 3, 2026
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/CONTRIBUTING.md)
before opening a Pull Request!

* Keep your PR:s small and focused.
* The PR title is what ends up in the changelog, so make it descriptive!
* If applicable, add a screenshot or gif.
* If it is a non-trivial addition, consider adding a demo for it to
`egui_demo_lib`, or a new example.
* Do NOT open PR:s from your `master` branch, as that makes it hard for
maintainers to test and add commits to your PR.
* Remember to run `cargo fmt` and `cargo clippy`.
* Open the PR as a draft until you have self-reviewed it and run
`./scripts/check.sh`.
* When you have addressed a PR comment, mark it as resolved.

Please be patient! I will review your PR, but my time is limited!
-->

Moves `ends_with_newline` into `PlacedRow` to avoid clones during
layout.
I don't think there was a rationale stronger than "don't change too
much" for not doing this in emilk#5411, so
I should've just done this from the start.
This was a significant part of the profile for text layout (as it cloned
almost every `Row`, even though it only needed to change a single
boolean).

Before:
<img width="757" height="250" alt="image"
src="https://github.com/user-attachments/assets/d1c2afd1-f1ec-4cf5-9d05-f5a5a78052df"
/>

After:
<img width="615" height="249" alt="image"
src="https://github.com/user-attachments/assets/c70966da-c892-4e84-adba-494d0f37f263"
/>

(note that these profiles focus solely on the top-level
`Galley::layout_inline` subtree, also don't compare sample count as the
duration of these tests was completely arbitrary)

egui_demo_lib `*text_layout*` benches:
<img width="791" height="461" alt="image"
src="https://github.com/user-attachments/assets/4f97ce84-2768-4876-9488-d42f8f358ed1"
/>

* [X] I have followed the instructions in the PR template

(As usual, the tests fail for me even on master but the failures on
master and with these changes seem the same :))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

epaint performance Lower CPU/GPU usage (optimize)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants