1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-13 13:31:48 +00:00

-Heavily improved editor startup and exit performance

This commit is contained in:
Juan Linietsky
2016-06-07 22:08:12 -03:00
parent 193272aa8a
commit d61b91cbe0
10 changed files with 229 additions and 194 deletions

View File

@@ -64,7 +64,7 @@ void SceneTree::node_removed(Node *p_node) {
}
void SceneTree::add_to_group(const StringName& p_group, Node *p_node) {
SceneTree::Group *SceneTree::add_to_group(const StringName& p_group, Node *p_node) {
Map<StringName,Group>::Element *E=group_map.find(p_group);
if (!E) {
@@ -73,10 +73,12 @@ void SceneTree::add_to_group(const StringName& p_group, Node *p_node) {
if (E->get().nodes.find(p_node)!=-1) {
ERR_EXPLAIN("Already in group: "+p_group);
ERR_FAIL();
ERR_FAIL_V(&E->get());
}
E->get().nodes.push_back(p_node);
E->get().last_tree_version=0;
//E->get().last_tree_version=0;
E->get().changed=true;
return &E->get();
}
void SceneTree::remove_from_group(const StringName& p_group, Node *p_node) {
@@ -125,7 +127,7 @@ void SceneTree::_flush_ugc() {
void SceneTree::_update_group_order(Group& g) {
if (g.last_tree_version==tree_version)
if (!g.changed)
return;
if (g.nodes.empty())
return;
@@ -135,7 +137,8 @@ void SceneTree::_update_group_order(Group& g) {
SortArray<Node*,Node::Comparator> node_sort;
node_sort.sort(nodes,node_count);
g.last_tree_version=tree_version;
g.changed=false;
}
@@ -148,8 +151,6 @@ void SceneTree::call_group(uint32_t p_call_flags,const StringName& p_group,const
if (g.nodes.empty())
return;
_update_group_order(g);
if (p_call_flags&GROUP_CALL_UNIQUE && !(p_call_flags&GROUP_CALL_REALTIME)) {
@@ -175,6 +176,8 @@ void SceneTree::call_group(uint32_t p_call_flags,const StringName& p_group,const
return;
}
_update_group_order(g);
Vector<Node*> nodes_copy = g.nodes;
Node **nodes = &nodes_copy[0];
int node_count=nodes_copy.size();