diff options
author | Andrii Doroshenko (Xrayez) <xrayez@gmail.com> | 2020-06-24 13:08:27 +0300 |
---|---|---|
committer | Andrii Doroshenko (Xrayez) <xrayez@gmail.com> | 2020-06-24 13:08:27 +0300 |
commit | 4a86e2bb76a9efd4b0495f3c62c76a5feedb8d44 (patch) | |
tree | 2b52a8c7efaff4ab7b3a24da68e4daed1068e4f3 | |
parent | ddba410ce5fdfaf736c4c91650ec84ebb609bb8f (diff) |
Optimize class icon loading
`get_global_class_name` for `GDScriptLanguage` is slow because
it forces to parse an entire script each time. This patch ensures
that the icon is actually fetched from the EditorData where they
are loaded beforehand.
This change also makes the behavior consistent with the existing
`get_object_icon` method in EditorNode.
-rw-r--r-- | editor/editor_node.cpp | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index bb34a45938..d8bc555d6d 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -3642,17 +3642,12 @@ Ref<Texture2D> EditorNode::get_class_icon(const String &p_class, const String &p } if (ScriptServer::is_global_class(p_class)) { - String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(p_class); - Ref<ImageTexture> icon = _load_custom_class_icon(icon_path); - if (icon.is_valid()) { - return icon; - } - - Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script"); + Ref<ImageTexture> icon; + Ref<Script> script = EditorNode::get_editor_data().script_class_load_script(p_class); while (script.is_valid()) { - String current_icon_path; - script->get_language()->get_global_class_name(script->get_path(), nullptr, ¤t_icon_path); + StringName name = EditorNode::get_editor_data().script_class_get_name(script->get_path()); + String current_icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name); icon = _load_custom_class_icon(current_icon_path); if (icon.is_valid()) { return icon; |