Depsgraph: Remove node class stored in both type info and node
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 20 Dec 2017 16:54:52 +0000 (17:54 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 20 Dec 2017 16:54:52 +0000 (17:54 +0100)
This is something deliver form node type, there is no reason to try cache it
anywhere, especially since it's not used in any performance critical code.

Lighter weight dependency graph is what we want.

source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
source/blender/depsgraph/intern/depsgraph_intern.h
source/blender/depsgraph/intern/nodes/deg_node.cc
source/blender/depsgraph/intern/nodes/deg_node.h

index 159e9bcf9a7a3b0035933d3fa4463cffd076cc08..6d8fda97321b63f9cd7b1f550b6b5f77336575de 100644 (file)
@@ -115,7 +115,7 @@ static int deg_debug_node_color_index(const DepsNode *node)
                        break;
        }
        /* Do others based on class. */
-       switch (node->tclass) {
+       switch (node->get_class()) {
                case DEG_NODE_CLASS_OPERATION:
                        return 4;
                case DEG_NODE_CLASS_COMPONENT:
@@ -202,7 +202,7 @@ static void deg_debug_graphviz_node_color(const DebugContext &ctx,
        const char *color_update = "dodgerblue3";
        const char *color = color_default;
        if (ctx.show_tags) {
-               if (node->tclass == DEG_NODE_CLASS_OPERATION) {
+               if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
                        OperationDepsNode *op_node = (OperationDepsNode *)node;
                        if (op_node->flag & DEPSOP_FLAG_DIRECTLY_MODIFIED) {
                                color = color_modified;
@@ -223,7 +223,7 @@ static void deg_debug_graphviz_node_penwidth(const DebugContext &ctx,
        float penwidth_update = 4.0f;
        float penwidth = penwidth_default;
        if (ctx.show_tags) {
-               if (node->tclass == DEG_NODE_CLASS_OPERATION) {
+               if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
                        OperationDepsNode *op_node = (OperationDepsNode *)node;
                        if (op_node->flag & DEPSOP_FLAG_DIRECTLY_MODIFIED) {
                                penwidth = penwidth_modified;
@@ -261,14 +261,14 @@ static void deg_debug_graphviz_node_style(const DebugContext &ctx, const DepsNod
 {
        const char *base_style = "filled"; /* default style */
        if (ctx.show_tags) {
-               if (node->tclass == DEG_NODE_CLASS_OPERATION) {
+               if (node->get_class() == DEG_NODE_CLASS_OPERATION) {
                        OperationDepsNode *op_node = (OperationDepsNode *)node;
                        if (op_node->flag & (DEPSOP_FLAG_DIRECTLY_MODIFIED | DEPSOP_FLAG_NEEDS_UPDATE)) {
                                base_style = "striped";
                        }
                }
        }
-       switch (node->tclass) {
+       switch (node->get_class()) {
                case DEG_NODE_CLASS_GENERIC:
                        deg_debug_fprintf(ctx, "\"%s\"", base_style);
                        break;
@@ -293,7 +293,7 @@ static void deg_debug_graphviz_node_single(const DebugContext &ctx,
                BLI_snprintf(buf, sizeof(buf), " (Layers: %u)", id_node->layers);
                name += buf;
        }
-       if (ctx.show_eval_priority && node->tclass == DEG_NODE_CLASS_OPERATION) {
+       if (ctx.show_eval_priority && node->get_class() == DEG_NODE_CLASS_OPERATION) {
                priority = ((OperationDepsNode *)node)->eval_priority;
        }
        deg_debug_fprintf(ctx, "// %s\n", name.c_str());
@@ -440,7 +440,7 @@ static bool deg_debug_graphviz_is_cluster(const DepsNode *node)
 static bool deg_debug_graphviz_is_owner(const DepsNode *node,
                                         const DepsNode *other)
 {
-       switch (node->tclass) {
+       switch (node->get_class()) {
                case DEG_NODE_CLASS_COMPONENT:
                {
                        ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
index f562f5d64f8b5ed80e6ee3c8bc68d7060ff7fb87..40229ef8f37dd1d60e71969e9d655e3c944a9235 100644 (file)
@@ -59,7 +59,6 @@ namespace DEG {
 /* Typeinfo Struct (nti) */
 struct DepsNodeFactory {
        virtual eDepsNode_Type type() const = 0;
-       virtual eDepsNode_Class tclass() const = 0;
        virtual const char *tname() const = 0;
        virtual int id_recalc_tag() const = 0;
 
@@ -71,7 +70,6 @@ struct DepsNodeFactory {
 template <class NodeType>
 struct DepsNodeFactoryImpl : public DepsNodeFactory {
        eDepsNode_Type type() const { return NodeType::typeinfo.type; }
-       eDepsNode_Class tclass() const { return NodeType::typeinfo.tclass; }
        const char *tname() const { return NodeType::typeinfo.tname; }
        int id_recalc_tag() const { return NodeType::typeinfo.id_recalc_tag; }
 
@@ -81,7 +79,6 @@ struct DepsNodeFactoryImpl : public DepsNodeFactory {
 
                /* populate base node settings */
                node->type = type();
-               node->tclass = tclass();
 
                if (name[0] != '\0') {
                        /* set name if provided ... */
index e163e88e0ed0744da3c95f92c7e6d92bf51c446b..2c6c29fc14dd0d7214a66e0ddea95369f342b842 100644 (file)
@@ -56,12 +56,6 @@ DepsNode::TypeInfo::TypeInfo(eDepsNode_Type type,
           tname(tname),
           id_recalc_tag(id_recalc_tag)
 {
-       if (type == DEG_NODE_TYPE_OPERATION)
-               this->tclass = DEG_NODE_CLASS_OPERATION;
-       else if (type < DEG_NODE_TYPE_PARAMETERS)
-               this->tclass = DEG_NODE_CLASS_GENERIC;
-       else
-               this->tclass = DEG_NODE_CLASS_COMPONENT;
 }
 
 DepsNode::DepsNode()
index 54042ae4a1b7d121fba4ca75bb3e84ba17cd2114..05c787fba11d45c54d51fc15acf2c701dac80d53 100644 (file)
@@ -52,23 +52,10 @@ struct DepsNode {
        /* Helper class for static typeinfo in subclasses. */
        struct TypeInfo {
                TypeInfo(eDepsNode_Type type, const char *tname, int id_recalc_tag = 0);
-
                eDepsNode_Type type;
-               eDepsNode_Class tclass;
                const char *tname;
-
                int id_recalc_tag;
        };
-
-       /* Identifier - mainly for debugging purposes. */
-       const char *name;
-
-       /* Structural type of node. */
-       eDepsNode_Type type;
-
-       /* Type of data/behaviour represented by node... */
-       eDepsNode_Class tclass;
-
        /* Relationships between nodes
         * The reason why all depsgraph nodes are descended from this type (apart
         * from basic serialization benefits - from the typeinfo) is that we can have
@@ -76,9 +63,12 @@ struct DepsNode {
         */
        typedef vector<DepsRelation *> Relations;
 
+       /* Identifier - mainly for debugging purposes. */
+       const char *name;
+       /* Structural type of node. */
+       eDepsNode_Type type;
        /* Nodes which this one depends on. */
        Relations inlinks;
-
        /* Nodes which depend on this one. */
        Relations outlinks;
 
@@ -87,7 +77,6 @@ struct DepsNode {
        int tag;
 
        /* Methods. */
-
        DepsNode();
        virtual ~DepsNode();
 
@@ -101,6 +90,18 @@ struct DepsNode {
 
        virtual OperationDepsNode *get_entry_operation() { return NULL; }
        virtual OperationDepsNode *get_exit_operation() { return NULL; }
+
+       virtual eDepsNode_Class get_class() const {
+               if (type == DEG_NODE_TYPE_OPERATION) {
+                       return DEG_NODE_CLASS_OPERATION;
+               }
+               else if (type < DEG_NODE_TYPE_PARAMETERS) {
+                       return DEG_NODE_CLASS_GENERIC;
+               }
+               else {
+                       return DEG_NODE_CLASS_COMPONENT;
+               }
+       }
 };
 
 /* Macros for common static typeinfo. */