Skip to content

Commit

Permalink
Merge pull request #49570 from RandomShaper/fix_slow_scene_io
Browse files Browse the repository at this point in the history
  • Loading branch information
akien-mga authored Jun 15, 2021
2 parents db0816e + 2ca6b9c commit cbcdda6
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 12 deletions.
14 changes: 9 additions & 5 deletions modules/gdscript/gdscript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ PlaceHolderScriptInstance *GDScript::placeholder_instance_create(Object *p_this)
#ifdef TOOLS_ENABLED
PlaceHolderScriptInstance *si = memnew(PlaceHolderScriptInstance(GDScriptLanguage::get_singleton(), Ref<Script>(this), p_this));
placeholders.insert(si);
_update_exports();
_update_exports(nullptr, false, si);
return si;
#else
return nullptr;
Expand Down Expand Up @@ -584,7 +584,7 @@ void GDScript::_update_doc() {
}
#endif

bool GDScript::_update_exports(bool *r_err, bool p_recursive_call) {
bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderScriptInstance *p_instance_to_update) {
#ifdef TOOLS_ENABLED

static Vector<GDScript *> base_caches;
Expand Down Expand Up @@ -721,15 +721,19 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call) {
}
}

if (placeholders.size()) { //hm :(
if ((changed || p_instance_to_update) && placeholders.size()) { //hm :(

// update placeholders if any
Map<StringName, Variant> values;
List<PropertyInfo> propnames;
_update_exports_values(values, propnames);

for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
E->get()->update(propnames, values);
if (changed) {
for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
E->get()->update(propnames, values);
}
} else {
p_instance_to_update->update(propnames, values);
}
}

Expand Down
2 changes: 1 addition & 1 deletion modules/gdscript/gdscript.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ class GDScript : public Script {

#endif

bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false);
bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false, PlaceHolderScriptInstance *p_instance_to_update = nullptr);

void _save_orphaned_subclasses();
void _init_rpc_methods_properties();
Expand Down
14 changes: 9 additions & 5 deletions modules/mono/csharp_script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2370,7 +2370,7 @@ void CSharpScript::_update_member_info_no_exports() {
}
#endif

bool CSharpScript::_update_exports() {
bool CSharpScript::_update_exports(PlaceHolderScriptInstance *p_instance_to_update) {
#ifdef TOOLS_ENABLED
bool is_editor = Engine::get_singleton()->is_editor_hint();
if (is_editor) {
Expand Down Expand Up @@ -2542,14 +2542,18 @@ bool CSharpScript::_update_exports() {
if (is_editor) {
placeholder_fallback_enabled = false;

if (placeholders.size()) {
if ((changed || p_instance_to_update) && placeholders.size()) {
// Update placeholders if any
Map<StringName, Variant> values;
List<PropertyInfo> propnames;
_update_exports_values(values, propnames);

for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
E->get()->update(propnames, values);
if (changed) {
for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
E->get()->update(propnames, values);
}
} else {
p_instance_to_update->update(propnames, values);
}
}
}
Expand Down Expand Up @@ -3230,7 +3234,7 @@ PlaceHolderScriptInstance *CSharpScript::placeholder_instance_create(Object *p_t
#ifdef TOOLS_ENABLED
PlaceHolderScriptInstance *si = memnew(PlaceHolderScriptInstance(CSharpLanguage::get_singleton(), Ref<Script>(this), p_this));
placeholders.insert(si);
_update_exports();
_update_exports(si);
return si;
#else
return nullptr;
Expand Down
2 changes: 1 addition & 1 deletion modules/mono/csharp_script.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ class CSharpScript : public Script {
void load_script_signals(GDMonoClass *p_class, GDMonoClass *p_native_class);
bool _get_signal(GDMonoClass *p_class, GDMonoMethod *p_delegate_invoke, Vector<SignalParameter> &params);

bool _update_exports();
bool _update_exports(PlaceHolderScriptInstance *p_instance_to_update = nullptr);

bool _get_member_export(IMonoClassMember *p_member, bool p_inspect_export, PropertyInfo &r_prop_info, bool &r_exported);
#ifdef TOOLS_ENABLED
Expand Down

0 comments on commit cbcdda6

Please sign in to comment.