Depsgraph: add "Dependency Relations" operator to print the dependency graph to
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 4 Nov 2011 13:17:35 +0000 (13:17 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 4 Nov 2011 13:17:35 +0000 (13:17 +0000)
the console, useful for debugging and understanding the relations.

source/blender/blenkernel/BKE_depsgraph.h
source/blender/blenkernel/intern/depsgraph.c
source/blender/windowmanager/intern/wm_operators.c

index 0b0637fb42a24f4227260cce18dc58ff4885d405..e0b8e40d73172c6b434038556c982c9aa6947085 100644 (file)
@@ -133,6 +133,9 @@ void        DAG_pose_sort(struct Object *ob);
                /* callback for editors module to do updates */
 void   DAG_editors_update_cb(void (*func)(struct Main *bmain, struct ID *id));
 
+               /* debugging */
+void   DAG_print_dependencies(struct Main *bmain, struct Scene *scene, struct Object *ob);
+
 #ifdef __cplusplus
 }
 #endif
index 286854f345cff9202181553fe6f31975ab2292f3..51edee9ea7128c30c4a0692d115e100fff66804f 100644 (file)
@@ -799,6 +799,7 @@ DagNode * dag_find_node (DagForest *forest,void * fob)
 }
 
 static int ugly_hack_sorry= 1; // prevent type check
+static int dag_print_dependencies= 0; // debugging
 
 /* no checking of existence, use dag_find_node first or dag_get_node */
 DagNode * dag_add_node (DagForest *forest, void * fob)
@@ -926,7 +927,6 @@ static const char *dag_node_name(DagNode *node)
                return ((bPoseChannel*)(node->ob))->name;
 }
 
-#if 0
 static void dag_node_print_dependencies(DagNode *node)
 {
        DagAdjList *itA;
@@ -937,7 +937,6 @@ static void dag_node_print_dependencies(DagNode *node)
                printf("  %s through %s\n", dag_node_name(itA->node), itA->name);
        printf("\n");
 }
-#endif
 
 static int dag_node_print_dependency_recurs(DagNode *node, DagNode *endnode)
 {
@@ -998,6 +997,11 @@ static void dag_check_cycle(DagForest *dag)
        DagNode *node;
        DagAdjList *itA;
 
+       /* debugging print */
+       if(dag_print_dependencies)
+               for(node = dag->DagNode.first; node; node= node->next)
+                       dag_node_print_dependencies(node);
+
        /* tag nodes unchecked */
        for(node = dag->DagNode.first; node; node= node->next)
                node->color= DAG_WHITE;
@@ -2834,5 +2838,22 @@ void DAG_pose_sort(Object *ob)
        ugly_hack_sorry= 1;
 }
 
+/* ************************ DAG DEBUGGING ********************* */
 
+void DAG_print_dependencies(Main *bmain, Scene *scene, Object *ob)
+{
+       /* utility for debugging dependencies */
+       dag_print_dependencies= 1;
+
+       if(ob && (ob->mode & OB_MODE_POSE)) {
+               printf("\nDEPENDENCY RELATIONS for %s\n\n", ob->id.name+2);
+               DAG_pose_sort(ob);
+       }
+       else {
+               printf("\nDEPENDENCY RELATIONS for %s\n\n", scene->id.name+2);
+               DAG_scene_sort(bmain, scene);
+       }
+       
+       dag_print_dependencies= 0;
+}
 
index acd5df799828b8d5995351a2effa021db4c85c6c..933066513e2e379e33a366503dcedcd12d6d6b0b 100644 (file)
@@ -3450,6 +3450,28 @@ static void WM_OT_memory_statistics(wmOperatorType *ot)
        ot->exec= memory_statistics_exec;
 }
 
+/* ************************** memory statistics for testing ***************** */
+
+static int dependency_relations_exec(bContext *C, wmOperator *UNUSED(op))
+{
+       Main *bmain= CTX_data_main(C);
+       Scene *scene= CTX_data_scene(C);
+       Object *ob= CTX_data_active_object(C);
+
+       DAG_print_dependencies(bmain, scene, ob);
+
+       return OPERATOR_FINISHED;
+}
+
+static void WM_OT_dependency_relations(wmOperatorType *ot)
+{
+       ot->name= "Dependency Relations";
+       ot->idname= "WM_OT_dependency_relations";
+       ot->description= "Print dependency graph relations to the console";
+       
+       ot->exec= dependency_relations_exec;
+}
+
 /* ******************************************************* */
 
 static int wm_ndof_sensitivity_exec(bContext *UNUSED(C), wmOperator *op)
@@ -3532,6 +3554,7 @@ void wm_operatortype_init(void)
        WM_operatortype_append(WM_OT_save_mainfile);
        WM_operatortype_append(WM_OT_redraw_timer);
        WM_operatortype_append(WM_OT_memory_statistics);
+       WM_operatortype_append(WM_OT_dependency_relations);
        WM_operatortype_append(WM_OT_debug_menu);
        WM_operatortype_append(WM_OT_splash);
        WM_operatortype_append(WM_OT_search_menu);