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
This commit is contained in:
parent
9fc5a9c78f
commit
65f547c3fc
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue