behaviour-tree-test/editor
HP van Braam 6f7525c396 Improve Scene Tree editor performance
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.
2024-12-12 22:47:05 +01:00
..
debugger [Scene] Add SceneStringName::FlatButton 2024-12-10 11:12:26 +03:00
export Use temp dirs instead of cache dirs for export 2024-12-08 12:07:17 +00:00
gui Improve Scene Tree editor performance 2024-12-12 22:47:05 +01:00
icons Merge pull request #98022 from vPumpking/editor_file_dialog_filter_master 2024-11-29 22:46:18 +01:00
import [Scene] Add SceneStringName::hover 2024-12-11 11:11:25 +03:00
plugins Merge pull request #100036 from Chaosus/hover_sname 2024-12-11 12:24:09 +03:00
project_manager Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
themes [Scene] Add SceneStringName::hover 2024-12-11 11:11:25 +03:00
translations i18n: Sync translations with Weblate 2024-09-17 20:47:16 +02:00
action_map_editor.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
action_map_editor.h Disable Clear All button when not filtering in Editor Settings 2024-05-19 19:29:48 +08:00
add_metadata_dialog.cpp Fix Add Metadata dialog not focusing name field by default 2024-10-23 08:18:13 +08:00
add_metadata_dialog.h Add per-bone meta to Skeleton3D 2024-09-16 16:26:15 +02:00
animation_bezier_editor.cpp Use (r)find_char instead of (r)find for single characters 2024-11-17 10:02:18 +01:00
animation_bezier_editor.h Merge pull request #93860 from CookieBadger/animation-bezier-undo-on-different-animation-fix 2024-07-07 21:58:36 +02:00
animation_track_editor.cpp [Scene] Add SceneStringName::hover 2024-12-11 11:11:25 +03:00
animation_track_editor.h Fix various typos and code style issues 2024-11-28 17:40:42 +01:00
animation_track_editor_plugins.cpp Remove empty bind_methods() 2024-08-15 08:24:32 +02:00
animation_track_editor_plugins.h Remove empty bind_methods() 2024-08-15 08:24:32 +02:00
audio_stream_preview.cpp Fix member names of AudioFrame to match extension 2024-02-13 15:37:09 +01:00
audio_stream_preview.h
code_editor.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
code_editor.h Code Editor: Add button to toggle between search and search+replace modes 2024-09-08 10:39:06 +02:00
connections_dialog.cpp Improve Scene Tree editor performance 2024-12-12 22:47:05 +01:00
connections_dialog.h Editor: Display deprecated/experimental messages in tooltips 2024-04-18 14:32:04 +03:00
create_dialog.cpp Add theme type variations for secondary Trees and ItemLists 2024-11-19 18:33:30 +04:00
create_dialog.h Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList. 2024-08-31 21:10:27 +02:00
dependency_editor.cpp Merge pull request #98539 from pafuent/show_filename_when_delete 2024-11-27 10:47:28 -06:00
dependency_editor.h Show file names in the remove files confirmation dialog 2024-11-18 01:04:30 -03:00
directory_create_dialog.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
directory_create_dialog.h Unify make dir and duplicate dialogs 2024-10-02 14:57:37 +02:00
doc_tools.cpp Core: Fix built-in enum constant bindings 2024-11-22 14:03:21 +03:00
doc_tools.h Generate docs from GDExtensions using --gdextension-docs with --doctool 2024-05-07 11:45:17 -05:00
editor_about.cpp Unify editor version buttons 2024-09-28 23:26:23 +08:00
editor_about.h Unify editor version buttons 2024-09-28 23:26:23 +08:00
editor_asset_installer.cpp Add theme type variations for secondary Trees and ItemLists 2024-11-19 18:33:30 +04:00
editor_asset_installer.h Remove empty bind_methods() 2024-08-15 08:24:32 +02:00
editor_atlas_packer.cpp Use Vector* component-wise min/max/clamp functions where applicable 2024-03-20 13:47:42 +01:00
editor_atlas_packer.h
editor_audio_buses.cpp [Scene] Add SceneStringName::hover 2024-12-11 11:11:25 +03:00
editor_audio_buses.h Organize existing code for editor plugins 2024-04-27 11:59:58 -07:00
editor_autoload_settings.cpp Merge pull request #99765 from dalexeev/core-fix-json-from-to-native 2024-12-10 14:15:53 -06:00
editor_autoload_settings.h Fix synchronization of global class name 2024-06-25 18:33:07 -04:00
editor_build_profile.cpp StringName Dictionary keys 2024-08-29 13:39:27 -07:00
editor_build_profile.h Fix typos 2024-07-17 18:53:03 +02:00
editor_builders.py Update pre-commit hooks configuration to use ruff instead of black 2024-05-21 18:02:29 -05:00
editor_command_palette.cpp Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList. 2024-08-31 21:10:27 +02:00
editor_command_palette.h Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList. 2024-08-31 21:10:27 +02:00
editor_data.cpp Enforce that custom nodes keep their original type 2024-10-22 18:18:16 +02:00
editor_data.h Add EditorContextMenuPluginManager and refactor menu plugins 2024-09-03 23:59:25 +02:00
editor_dock_manager.cpp Add tooltips to dock menu and remove disabled 2024-11-22 17:22:19 -05:00
editor_dock_manager.h Fix first time of Toggle Last Opened Bottom Panel opens Output panel 2024-07-07 12:11:37 -04:00
editor_feature_profile.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
editor_feature_profile.h Add "Game" editor for better runtime debugging 2024-10-30 11:42:17 -03:00
editor_file_system.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
editor_file_system.h Emit filesystem_changed only once per frame 2024-10-28 09:09:52 +02:00
editor_folding.cpp Use (r)find_char instead of (r)find for single characters 2024-11-17 10:02:18 +01:00
editor_folding.h
editor_help.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
editor_help.h Editor: Fix EditorHelpBitTooltip for Signals dock 2024-07-05 16:08:35 +03:00
editor_help_search.cpp [Scene] Add SceneStringName::FlatButton 2024-12-10 11:12:26 +03:00
editor_help_search.h Fix wrong displayed category name in EditorHelpSearch 2024-09-21 00:07:11 +08:00
editor_inspector.compat.inc Display custom data name instead of indices in TileData inspector 2024-05-25 17:21:31 +02:00
editor_inspector.cpp Merge pull request #85275 from TheSofox/anchors-undo-fix 2024-12-10 14:15:47 -06:00
editor_inspector.h Merge pull request #87375 from limbonaut/instantiate_property_editor 2024-12-09 14:33:28 -06:00
editor_interface.compat.inc Pass current value to EditorInterface node/property popups 2024-09-03 00:54:55 -04:00
editor_interface.cpp Check if EditorNode exists 2024-11-29 21:17:40 +01:00
editor_interface.h Generate editor thumbnails on imported scenes. 2024-11-24 10:23:56 -08:00
editor_layouts_dialog.cpp [Scene] Add SceneStringNames::text/value_changed 2024-06-19 09:44:38 +02:00
editor_layouts_dialog.h
editor_locale_dialog.cpp [Scene] Add SceneStringName::toggled 2024-08-28 15:14:26 +03:00
editor_locale_dialog.h Split TranslationServer into its own file 2024-08-15 15:00:47 +08:00
editor_log.cpp [Scene] Add SceneStringName::FlatButton 2024-12-10 11:12:26 +03:00
editor_log.h Merge pull request #99799 from akien-mga/fix-typos 2024-11-29 22:02:53 +01:00
editor_main_screen.cpp Rename internal Button icon to button_icon to match exposed methods 2024-10-29 16:23:03 -07:00
editor_main_screen.h Add "Game" editor for better runtime debugging 2024-10-30 11:42:17 -03:00
editor_native_shader_source_visualizer.cpp [Editor] Expose more editor settings to documentation 2024-09-12 15:34:49 +02:00
editor_native_shader_source_visualizer.h Improve the editor native shader source visualizer 2024-03-22 00:17:32 +01:00
editor_node.cpp Merge pull request #98675 from YeldhamDev/dont_be_shy_plugin 2024-12-10 14:16:09 -06:00
editor_node.h Save color palette as resources to reuse later 2024-12-06 20:16:06 +07:00
editor_paths.cpp Merge pull request #98397 from adamscott/add-tmp-support 2024-12-03 14:40:59 -06:00
editor_paths.h Add file and dir temporary utilities 2024-12-02 12:08:14 -05:00
editor_properties.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
editor_properties.h Merge pull request #97912 from reduz/property-path-store-uid 2024-11-11 14:18:41 -06:00
editor_properties_array_dict.cpp Use (r)find_char instead of (r)find for single characters 2024-11-17 10:02:18 +01:00
editor_properties_array_dict.h Implement typed dictionaries 2024-09-04 10:27:26 -05:00
editor_properties_vector.cpp Merge pull request #96196 from SaracenOne/bone_editor_revert 2024-08-29 10:36:34 +02:00
editor_properties_vector.h
editor_property_name_processor.cpp Add loongarch64 support 2024-12-06 00:18:26 +08:00
editor_property_name_processor.h Remove references to deleted capitalize_properties setting 2024-08-21 17:27:54 +02:00
editor_resource_picker.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
editor_resource_picker.h Enforce that custom nodes keep their original type 2024-10-22 18:18:16 +02:00
editor_resource_preview.cpp Get rid of easily removable uses of const_cast 2024-12-01 17:50:13 -08:00
editor_resource_preview.h Get rid of easily removable uses of const_cast 2024-12-01 17:50:13 -08:00
editor_run.cpp [Debugger] Move quit shortcut configuration to the SceneDebugger 2024-11-07 15:03:17 +01:00
editor_run.h
editor_run_native.cpp Rename internal Button icon to button_icon to match exposed methods 2024-10-29 16:23:03 -07:00
editor_run_native.h Display a warning if device CPU architecture is not active in the export preset. 2024-02-23 01:37:32 +01:00
editor_script.cpp GDExtension: Mark virtual function as is_required in extension_api.json 2024-09-11 16:48:14 -05:00
editor_script.h GDExtension: Mark virtual function as is_required in extension_api.json 2024-09-11 16:48:14 -05:00
editor_sectioned_inspector.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
editor_sectioned_inspector.h Keep advanced toggle on when searching for settings 2024-09-21 21:15:46 +08:00
editor_settings.cpp Add 3D translation sensitivity to Editor Settings 2024-12-05 22:50:52 +01:00
editor_settings.h Make possible to favorite properties in the inspector 2024-10-28 21:18:21 -03:00
editor_settings_dialog.cpp Merge pull request #97955 from RobProductions/fix-godot-nav-preset 2024-11-12 12:13:05 -06:00
editor_settings_dialog.h Add Advanced Settings switch to Editor Settings 2024-09-17 12:20:55 +02:00
editor_string_names.h Move singleton StringName definitions to header 2024-12-06 13:43:31 +01:00
editor_translation.cpp Make editor use translation domains 2024-09-17 13:09:44 +08:00
editor_translation.h Improve string extraction of ETR POT file 2024-05-07 22:12:40 -03:00
editor_translation_parser.cpp POT Generator: Add support for TRANSLATORS: and NO_TRANSLATE comments 2024-10-13 11:40:11 +03:00
editor_translation_parser.h POT Generator: Add support for TRANSLATORS: and NO_TRANSLATE comments 2024-10-13 11:40:11 +03:00
editor_undo_redo_manager.cpp Discard additional redo on commiting actions 2024-09-24 15:47:55 +02:00
editor_undo_redo_manager.h Expose EditorUndoRedoManager's clear_history() 2024-08-29 19:23:39 +02:00
editor_vcs_interface.cpp GDExtension: Mark virtual function as is_required in extension_api.json 2024-09-11 16:48:14 -05:00
editor_vcs_interface.h GDExtension: Mark virtual function as is_required in extension_api.json 2024-09-11 16:48:14 -05:00
engine_update_label.cpp Use (r)find_char instead of (r)find for single characters 2024-11-17 10:02:18 +01:00
engine_update_label.h Rework and simplify update checking logic 2024-05-31 18:49:32 +02:00
event_listener_line_edit.cpp Revert "Fix InputEvent device id clash" and add a compatibility function 2024-11-20 09:18:55 +01:00
event_listener_line_edit.h
fbx_importer_manager.cpp Rename internal Button icon to button_icon to match exposed methods 2024-10-29 16:23:03 -07:00
fbx_importer_manager.h
file_info.cpp Add filter & sort to editor file dialog 2024-09-26 11:08:13 -03:00
file_info.h Add filter & sort to editor file dialog 2024-09-26 11:08:13 -03:00
filesystem_dock.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
filesystem_dock.h Merge pull request #100010 from KoBeWi/directory_compass_for_navigating_sea_of_directories 2024-12-05 14:11:53 -06:00
find_in_files.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
find_in_files.h Hide Search Results by default. Show it on first search and push it at the end. Add a close button to hide it back. Also switch to Script Editor if a searched line is clicked. 2024-03-16 20:42:05 +01:00
group_settings_editor.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
group_settings_editor.h Add Ctrl + L / Cmd + Shift + G shortcut to focus path bar in FileDialog 2024-03-05 00:02:09 +01:00
groups_editor.cpp Rename internal Button icon to button_icon to match exposed methods 2024-10-29 16:23:03 -07:00
groups_editor.h
history_dock.cpp [Scene] Add SceneStringName::toggled 2024-08-28 15:14:26 +03:00
history_dock.h Save scene and global checkbox options of History window, fixes #88432 2024-02-29 22:51:18 +00:00
import_defaults_editor.cpp Keep advanced toggle on when searching for settings 2024-09-21 21:15:46 +08:00
import_defaults_editor.h
import_dock.cpp Don't swap Advanced Import Settings button position based on Swap OK Cancel 2024-10-18 23:28:11 +02:00
import_dock.h Add support for resource conversion plugins in filesystem dock. 2024-09-16 15:11:40 +01:00
input_event_configuration_dialog.cpp Revert "Fix InputEvent device id clash" and add a compatibility function 2024-11-20 09:18:55 +01:00
input_event_configuration_dialog.h (Un)Fold event categories by double click 2024-05-11 20:38:46 +02:00
inspector_dock.cpp Merge pull request #98039 from aaronfranke/button-icon 2024-10-29 19:25:59 -05:00
inspector_dock.h Set clang-format RemoveSemicolon rule to true 2024-10-25 13:49:43 -04:00
localization_editor.cpp Use (r)find_char instead of (r)find for single characters 2024-11-17 10:02:18 +01:00
localization_editor.h Add option to add built-in strings in the POT generation 2024-02-28 11:34:26 -03:00
multi_node_edit.cpp Fix implementation of property_can_revert() in various classes 2024-10-04 23:02:04 +02:00
multi_node_edit.h [Core] Add LocalVector::has for convenience 2024-05-06 18:03:37 +02:00
node_dock.cpp [Scene] Add SceneStringName::FlatButton 2024-12-10 11:12:26 +03:00
node_dock.h Remove empty bind_methods() 2024-08-15 08:24:32 +02:00
pot_generator.cpp POT Generator: Add support for TRANSLATORS: and NO_TRANSLATE comments 2024-10-13 11:40:11 +03:00
pot_generator.h POT Generator: Add support for TRANSLATORS: and NO_TRANSLATE comments 2024-10-13 11:40:11 +03:00
progress_dialog.cpp Fix slow importation when window is unfocused 2024-08-27 19:57:38 -04:00
progress_dialog.h Fix slow importation when window is unfocused 2024-08-27 19:57:38 -04:00
project_converter_3_to_4.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
project_converter_3_to_4.h Add const lvalue ref to editor/* container parameters 2024-02-26 15:28:15 -03:00
project_manager.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
project_manager.h Unify editor version buttons 2024-09-28 23:26:23 +08:00
project_settings_editor.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
project_settings_editor.h Fix synchronization of global class name 2024-06-25 18:33:07 -04:00
property_selector.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
property_selector.h Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList. 2024-08-31 21:10:27 +02:00
register_editor_types.cpp Expose toast notification methods 2024-11-11 19:39:33 -05:00
register_editor_types.h
register_exporters.h
rename_dialog.cpp [Scene] Add SceneStringName::toggled 2024-08-28 15:14:26 +03:00
rename_dialog.h Set clang-format RemoveSemicolon rule to true 2024-10-25 13:49:43 -04:00
renames_map_3_to_4.cpp Implement vertex shading 2024-09-29 00:36:09 +02:00
renames_map_3_to_4.h
reparent_dialog.cpp Improve Scene Tree editor performance 2024-12-12 22:47:05 +01:00
reparent_dialog.h
run_instances_dialog.cpp Fix run instances dialog scaling bug 2024-12-02 17:47:54 +01:00
run_instances_dialog.h Allow to set custom feature tags for testing 2024-02-13 17:38:45 +01:00
scene_create_dialog.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
scene_create_dialog.h
scene_tree_dock.cpp Improve Scene Tree editor performance 2024-12-12 22:47:05 +01:00
scene_tree_dock.h Improve Scene Tree editor performance 2024-12-12 22:47:05 +01:00
script_create_dialog.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
script_create_dialog.h Allow configuring the script filename casing rule 2024-03-05 09:43:29 +01:00
SCsub SCons: Add unobtrusive type hints in SCons files 2024-09-25 09:34:35 -05:00
shader_create_dialog.cpp Add contains_char() for single-character 'contains' calls. 2024-12-06 20:23:35 +01:00
shader_create_dialog.h
shader_globals_editor.cpp Use SceneStringName in more places 2024-12-02 14:39:16 +01:00
shader_globals_editor.h Organize existing code for editor plugins 2024-04-27 11:59:58 -07:00
surface_upgrade_tool.cpp Added missing argument to deferred call to restart_editor in surface_upgrade_tool 2024-12-02 11:06:10 -05:00
surface_upgrade_tool.h Set clang-format RemoveSemicolon rule to true 2024-10-25 13:49:43 -04:00
template_builders.py Fix not using encoding="utf-8" when writing to files or reading from them 2024-06-19 23:35:03 +08:00
window_wrapper.cpp Rename internal Button icon to button_icon to match exposed methods 2024-10-29 16:23:03 -07:00
window_wrapper.h Fix PopupPanel menu style 2024-10-20 13:26:45 +02:00