Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4.3] Cherry-picks for the 4.3 (4.3.1) branch - 1st performance batch #934

Merged
merged 6 commits into from
Jan 18, 2025

Conversation

clayjohn and others added 6 commits January 18, 2025 12:51
Co-authored-by: Sequoia Haynes <[email protected]>
(cherry picked from commit c874e28)
…pector at the end of the drag

(cherry picked from commit 5848d72)
Signed-off-by: Yevhen Babiichuk (DustDFG) <[email protected]>
Co-authored-by: A Thousand Ships <[email protected]>
(cherry picked from commit 4a5ae8c)
We now cache the Node*<>TreeItem* mapping in the SceneTreeEditor. This
allows us to make targeted updates to the Tree used to display the scene
tree in the editor.

Previously on almost all changes to the scene tree the editor would
rebuild the entire widget, causing a large number of deallocations an
allocations. We now carefully manipulate the Tree widget in-situ saving
a large number of these allocations.

In order to know what Nodes need to be updated we add a
editor_state_changed signal to Node, this is a TOOLS_ENABLED,
editor-only signal fired when changes to Node happen that are relevant
to editor state.

We also now make sure that when nodes are moved/renamed we don't check
expensive properties that cannot contain NodePaths. This saves a lot of
time when SceneTreeDock renames a node in a scene with a lot of
MeshInstances. This makes renaming nodes go from ~27 seconds to ~2
seconds on large scenes.

SceneTreeEditor instances will now also not do all of the potentially
expensive update work if they are invisible. This behavior is turned off
by default so it won't affect existing users. This change allows the
editor to only update SceneTreeEditors that actually in view. In
practice this means that for most changes instead of updating 6
SceneTreeEditors we only update 1 instantly, and the others only when
they become visible.

There is definitely more that could be done, but this is already a
massive improvement. In complex scenes we see an improvement of 10x,
things that used to take ~30 seconds now only take 2.

This fixes #83460

I want to thank KoBeWi, TokisanGames, a-johnston, aniel080400 for
their tireless testing. And AeioMuch for their testing and providing a
fix for the hover issue.

(cherry picked from commit 6f7525c)
@Spartan322 Spartan322 force-pushed the 4.3.1-cherry-pick/performance branch from 29098cf to 566c3db Compare January 18, 2025 17:51
@Spartan322 Spartan322 marked this pull request as ready for review January 18, 2025 17:51
@Spartan322 Spartan322 merged commit 6af95a2 into Redot-Engine:4.3 Jan 18, 2025
18 checks passed
@Spartan322 Spartan322 deleted the 4.3.1-cherry-pick/performance branch January 18, 2025 20:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

9 participants