[Bf-blender-cvs] [65f547c3fc1] master: Geometry Nodes: add utility to show debug messages in node editor

Jacques Lucke noreply at git.blender.org
Wed Nov 24 13:39:29 CET 2021


Commit: 65f547c3fc116860b9c7eaf6e3d8abd2651f5168
Author: Jacques Lucke
Date:   Wed Nov 24 13:39:09 2021 +0100
Branches: master
https://developer.blender.org/rB65f547c3fc116860b9c7eaf6e3d8abd2651f5168

Geometry Nodes: add utility to show debug messages in node editor

This is only meant to be used for development purposes for now,
not to show warnings to the user.

Differential Revision: https://developer.blender.org/D13348

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

M	source/blender/editors/space_node/node_draw.cc
M	source/blender/modifiers/intern/MOD_nodes_evaluator.cc
M	source/blender/nodes/NOD_geometry_nodes_eval_log.hh
M	source/blender/nodes/intern/geometry_nodes_eval_log.cc

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

diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 1d62321cae3..38328a92179 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -1708,6 +1708,16 @@ static Vector<NodeExtraInfoRow> node_get_extra_info(const SpaceNode *snode, cons
       rows.append(std::move(row));
     }
   }
+  const geo_log::NodeLog *node_log = geo_log::ModifierLog::find_node_by_node_editor_context(*snode,
+                                                                                            *node);
+  if (node_log != nullptr) {
+    for (const std::string &message : node_log->debug_messages()) {
+      NodeExtraInfoRow row;
+      row.text = message;
+      row.icon = ICON_INFO;
+      rows.append(std::move(row));
+    }
+  }
   return rows;
 }
 
diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index 798942f71f5..6d7abb084e4 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -1637,6 +1637,14 @@ class GeometryNodesEvaluator {
     params_.geo_logger->local().log_value_for_sockets(sockets, value);
   }
 
+  void log_debug_message(DNode node, std::string message)
+  {
+    if (params_.geo_logger == nullptr) {
+      return;
+    }
+    params_.geo_logger->local().log_debug_message(node, std::move(message));
+  }
+
   /* In most cases when `NodeState` is accessed, the node has to be locked first to avoid race
    * conditions. */
   template<typename Function>
diff --git a/source/blender/nodes/NOD_geometry_nodes_eval_log.hh b/source/blender/nodes/NOD_geometry_nodes_eval_log.hh
index 0fbc1803db6..53ead9af241 100644
--- a/source/blender/nodes/NOD_geometry_nodes_eval_log.hh
+++ b/source/blender/nodes/NOD_geometry_nodes_eval_log.hh
@@ -176,6 +176,11 @@ struct NodeWithExecutionTime {
   std::chrono::microseconds exec_time;
 };
 
+struct NodeWithDebugMessage {
+  DNode node;
+  std::string message;
+};
+
 /** The same value can be referenced by multiple sockets when they are linked. */
 struct ValueOfSockets {
   Span<DSocket> sockets;
@@ -197,6 +202,7 @@ class LocalGeoLogger {
   Vector<ValueOfSockets> values_;
   Vector<NodeWithWarning> node_warnings_;
   Vector<NodeWithExecutionTime> node_exec_times_;
+  Vector<NodeWithDebugMessage> node_debug_messages_;
 
   friend ModifierLog;
 
@@ -210,6 +216,7 @@ class LocalGeoLogger {
   void log_multi_value_socket(DSocket socket, Span<GPointer> values);
   void log_node_warning(DNode node, NodeWarningType type, std::string message);
   void log_execution_time(DNode node, std::chrono::microseconds exec_time);
+  void log_debug_message(DNode node, std::string message);
 };
 
 /** The root logger class. */
@@ -283,6 +290,7 @@ class NodeLog {
   Vector<SocketLog> input_logs_;
   Vector<SocketLog> output_logs_;
   Vector<NodeWarning, 0> warnings_;
+  Vector<std::string, 0> debug_messages_;
   std::chrono::microseconds exec_time_;
 
   friend ModifierLog;
@@ -307,6 +315,11 @@ class NodeLog {
     return warnings_;
   }
 
+  Span<std::string> debug_messages() const
+  {
+    return debug_messages_;
+  }
+
   std::chrono::microseconds execution_time() const
   {
     return exec_time_;
diff --git a/source/blender/nodes/intern/geometry_nodes_eval_log.cc b/source/blender/nodes/intern/geometry_nodes_eval_log.cc
index 4cba9669647..f504dbfd4b4 100644
--- a/source/blender/nodes/intern/geometry_nodes_eval_log.cc
+++ b/source/blender/nodes/intern/geometry_nodes_eval_log.cc
@@ -72,6 +72,11 @@ ModifierLog::ModifierLog(GeoLogger &logger)
                                                        node_with_exec_time.node);
       node_log.exec_time_ = node_with_exec_time.exec_time;
     }
+
+    for (NodeWithDebugMessage &debug_message : local_logger.node_debug_messages_) {
+      NodeLog &node_log = this->lookup_or_add_node_log(log_by_tree_context, debug_message.node);
+      node_log.debug_messages_.append(debug_message.message);
+    }
   }
 }
 
@@ -484,4 +489,13 @@ void LocalGeoLogger::log_execution_time(DNode node, std::chrono::microseconds ex
   node_exec_times_.append({node, exec_time});
 }
 
+/**
+ * Log a message that will be displayed in the node editor next to the node. This should only be
+ * used for debugging purposes and not to display information to users.
+ */
+void LocalGeoLogger::log_debug_message(DNode node, std::string message)
+{
+  node_debug_messages_.append({node, std::move(message)});
+}
+
 }  // namespace blender::nodes::geometry_nodes_eval_log



More information about the Bf-blender-cvs mailing list