Depsgraph: make the dependency cycle report more readable.
authorAlexander Gavrilov <angavrilov@gmail.com>
Tue, 23 Apr 2019 15:29:36 +0000 (18:29 +0300)
committerAlexander Gavrilov <angavrilov@gmail.com>
Tue, 23 Apr 2019 15:29:41 +0000 (18:29 +0300)
Since it is a continuous cycle, there's no need to repeat the
name of the previous bone. Also, dot is a common symbol in object
and bone names, so use '/' instead for node nesting.

source/blender/depsgraph/intern/builder/deg_builder_cycle.cc
source/blender/depsgraph/intern/node/deg_node_operation.cc

index af5c4e7..d11a60b 100644 (file)
@@ -182,20 +182,16 @@ void solve_cycles(CyclesSolverState *state)
         OperationNode *to = (OperationNode *)rel->to;
         eCyclicCheckVisitedState to_state = get_node_visited_state(to);
         if (to_state == NODE_IN_STACK) {
-          printf("Dependency cycle detected:\n");
-          printf("  '%s' depends on '%s' through '%s'\n",
-                 to->full_identifier().c_str(),
-                 node->full_identifier().c_str(),
-                 rel->name);
+          string cycle_str = "  " + to->full_identifier() + " depends on\n  " +
+                             node->full_identifier() + " via '" + rel->name + "'\n";
           StackEntry *current = entry;
           while (current->node != to) {
             BLI_assert(current != NULL);
-            printf("  '%s' depends on '%s' through '%s'\n",
-                   current->node->full_identifier().c_str(),
-                   current->from->node->full_identifier().c_str(),
-                   current->via_relation->name);
+            cycle_str += "  " + current->from->node->full_identifier() + " via '" +
+                         current->via_relation->name + "'\n";
             current = current->from;
           }
+          printf("Dependency cycle detected:\n%s", cycle_str.c_str());
           Relation *sacrificial_relation = select_relation_to_murder(rel, entry);
           sacrificial_relation->flag |= RELATION_FLAG_CYCLIC;
           ++state->num_cycles;
index 54a5ece..1545633 100644 (file)
@@ -208,14 +208,11 @@ string OperationNode::identifier() const
  * used for logging and debug prints. */
 string OperationNode::full_identifier() const
 {
-  string owner_str = "";
-  if (owner->type == NodeType::BONE) {
-    owner_str = string(owner->owner->name) + "." + owner->name;
+  string owner_str = owner->owner->name;
+  if (owner->type == NodeType::BONE || !owner->name.empty()) {
+    owner_str += "/" + owner->name;
   }
-  else {
-    owner_str = owner->owner->name;
-  }
-  return owner_str + "." + identifier();
+  return owner_str + "/" + identifier();
 }
 
 void OperationNode::tag_update(Depsgraph *graph, eUpdateSource source)