Commit: 19c14f0c8ac6236eedff2a1c5f3581b4fca79bf1
Author: Sergey Sharybin
Date:   Wed Nov 8 14:48:25 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB19c14f0c8ac6236eedff2a1c5f3581b4fca79bf1

Subject: [PATCH 2/3] Depsgraph: Replace iteration over ghash with iteration 
over flat array

===================================================================

M       source/blender/depsgraph/intern/builder/deg_builder.cc
M       source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M       source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M       source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
M       source/blender/depsgraph/intern/depsgraph.cc
M       source/blender/depsgraph/intern/depsgraph_debug.cc
M       source/blender/depsgraph/intern/depsgraph_tag.cc

===================================================================

diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc 
b/source/blender/depsgraph/intern/builder/deg_builder.cc
index 4755e7d211d..d6a054f2ee9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -30,17 +30,15 @@
 
 #include "intern/builder/deg_builder.h"
 
-#include "DNA_anim_types.h"
 #include "DNA_object_types.h"
 #include "DNA_ID.h"
 
-#include "BLI_utildefines.h"
-#include "BLI_ghash.h"
-
 #include "intern/depsgraph.h"
 #include "intern/depsgraph_types.h"
 #include "intern/nodes/deg_node.h"
 
+#include "util/deg_util_foreach.h"
+
 #include "DEG_depsgraph.h"
 
 namespace DEG {
@@ -51,8 +49,7 @@ void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
        /* Re-tag IDs for update if it was tagged before the relations
         * update tag.
         */
-       GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, graph->id_hash)
-       {
+       foreach (IDDepsNode *id_node, graph->id_nodes) {
                ID *id = id_node->id_orig;
                id_node->finalize_build(graph);
                if ((id->tag & LIB_TAG_ID_RECALC_ALL)) {
@@ -71,7 +68,6 @@ void deg_graph_build_finalize(Main *bmain, Depsgraph *graph)
                        DEG_id_tag_update_ex(bmain, id_node->id_orig, 
DEG_TAG_COPY_ON_WRITE);
                }
        }
-       GHASH_FOREACH_END();
 }
 
 }  // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 464a1454749..0c1a3d21f84 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -367,8 +367,7 @@ void DepsgraphNodeBuilder::begin_build(Main *bmain) {
                 * them for new ID nodes.
                 */
                m_cow_id_hash = BLI_ghash_ptr_new("Depsgraph id hash");
-               GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, m_graph->id_hash)
-               {
+               foreach (IDDepsNode *id_node, m_graph->id_nodes) {
                        if (GS(id_node->id_orig->name) != ID_SCE) {
                                continue;
                        }
@@ -379,7 +378,6 @@ void DepsgraphNodeBuilder::begin_build(Main *bmain) {
                                id_node->id_cow = NULL;
                        }
                }
-               GHASH_FOREACH_END();
        }
 
        /* Make sure graph has no nodes left from previous state. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index f2e155a66e6..91902ed0ea6 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1990,11 +1990,9 @@ void DepsgraphRelationBuilder::build_lightprobe(Object 
*object)
 
 void DepsgraphRelationBuilder::build_copy_on_write_relations()
 {
-       GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, m_graph->id_hash)
-       {
+       foreach (IDDepsNode *id_node, m_graph->id_nodes) {
                build_copy_on_write_relations(id_node);
        }
-       GHASH_FOREACH_END();
 }
 
 void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode 
*id_node)
diff --git a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc 
b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
index ce3a4182a0f..618f4ced295 100644
--- a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
+++ b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
@@ -493,11 +493,9 @@ static void deg_debug_graphviz_node_relations(const 
DebugContext &ctx,
 static void deg_debug_graphviz_graph_nodes(const DebugContext &ctx,
                                            const Depsgraph *graph)
 {
-       GHASH_FOREACH_BEGIN (DepsNode *, node, graph->id_hash)
-       {
+       foreach (DepsNode *node, graph->id_nodes) {
                deg_debug_graphviz_node(ctx, node);
        }
-       GHASH_FOREACH_END();
        TimeSourceDepsNode *time_source = graph->find_time_source();
        if (time_source != NULL) {
                deg_debug_graphviz_node(ctx, time_source);
@@ -507,8 +505,7 @@ static void deg_debug_graphviz_graph_nodes(const 
DebugContext &ctx,
 static void deg_debug_graphviz_graph_relations(const DebugContext &ctx,
                                                const Depsgraph *graph)
 {
-       GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, graph->id_hash)
-       {
+       foreach (IDDepsNode *id_node, graph->id_nodes) {
                GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, 
id_node->components)
                {
                        foreach (OperationDepsNode *op_node, 
comp_node->operations) {
@@ -517,7 +514,6 @@ static void deg_debug_graphviz_graph_relations(const 
DebugContext &ctx,
                }
                GHASH_FOREACH_END();
        }
-       GHASH_FOREACH_END();
 
        TimeSourceDepsNode *time_source = graph->find_time_source();
        if (time_source != NULL) {
diff --git a/source/blender/depsgraph/intern/depsgraph.cc 
b/source/blender/depsgraph/intern/depsgraph.cc
index 05e66318d86..3caf7e5923f 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -314,8 +314,7 @@ void Depsgraph::clear_id_nodes()
        /* Free memory used by ID nodes. */
        if (use_copy_on_write) {
                /* Stupid workaround to ensure we free IDs in a proper order. */
-               GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, id_hash)
-               {
+               foreach (IDDepsNode *id_node, id_nodes) {
                        if (id_node->id_cow == NULL) {
                                /* This means builder "stole" ownership of the 
copy-on-written
                                 * datablock for her own dirty needs.
@@ -330,13 +329,10 @@ void Depsgraph::clear_id_nodes()
                                id_node->destroy();
                        }
                }
-               GHASH_FOREACH_END();
        }
-       GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, id_hash)
-       {
+       foreach (IDDepsNode *id_node, id_nodes) {
                OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
        }
-       GHASH_FOREACH_END();
        /* Clear containers. */
        BLI_ghash_clear(id_hash, NULL, NULL);
        id_nodes.clear();
diff --git a/source/blender/depsgraph/intern/depsgraph_debug.cc 
b/source/blender/depsgraph/intern/depsgraph_debug.cc
index 70e08dbb449..dac084e4bad 100644
--- a/source/blender/depsgraph/intern/depsgraph_debug.cc
+++ b/source/blender/depsgraph/intern/depsgraph_debug.cc
@@ -198,8 +198,7 @@ void DEG_stats_simple(const Depsgraph *graph, size_t 
*r_outer,
                size_t tot_outer = 0;
                size_t tot_rels = 0;
 
-               GHASH_FOREACH_BEGIN(DEG::IDDepsNode *, id_node, 
deg_graph->id_hash)
-               {
+               foreach (DEG::IDDepsNode *id_node, deg_graph->id_nodes) {
                        tot_outer++;
                        GHASH_FOREACH_BEGIN(DEG::ComponentDepsNode *, 
comp_node, id_node->components)
                        {
@@ -210,7 +209,6 @@ void DEG_stats_simple(const Depsgraph *graph, size_t 
*r_outer,
                        }
                        GHASH_FOREACH_END();
                }
-               GHASH_FOREACH_END();
 
                DEG::TimeSourceDepsNode *time_source = 
deg_graph->find_time_source();
                if (time_source != NULL) {
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc 
b/source/blender/depsgraph/intern/depsgraph_tag.cc
index 39505d256ec..607ec675a39 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -367,8 +367,7 @@ void deg_id_tag_update(Main *bmain, ID *id, int flag)
 void deg_graph_on_visible_update(Main *bmain, Depsgraph *graph)
 {
        /* Make sure objects are up to date. */
-       GHASH_FOREACH_BEGIN(DEG::IDDepsNode *, id_node, graph->id_hash)
-       {
+       foreach (DEG::IDDepsNode *id_node, graph->id_nodes) {
                const ID_Type id_type = GS(id_node->id_orig->name);
                /* TODO(sergey): Special exception for now. */
                if (id_type == ID_MSK) {
@@ -390,7 +389,6 @@ void deg_graph_on_visible_update(Main *bmain, Depsgraph 
*graph)
                }
                deg_graph_id_tag_update(bmain, graph, id_node->id_orig, flag);
        }
-       GHASH_FOREACH_END();
        /* Make sure collection properties are up to date. */
        for (Scene *scene_iter = graph->scene; scene_iter != NULL; scene_iter = 
scene_iter->set) {
                IDDepsNode *scene_id_node = 
graph->find_id_node(&scene_iter->id);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to