[Bf-blender-cvs] [e80d9a53916] functions: destruct unused values as early as possible
Jacques Lucke
noreply at git.blender.org
Sun Apr 28 18:57:48 CEST 2019
Commit: e80d9a53916991ec488325f59bff9d4244afe355
Author: Jacques Lucke
Date: Sun Apr 28 18:56:16 2019 +0200
Branches: functions
https://developer.blender.org/rBe80d9a53916991ec488325f59bff9d4244afe355
destruct unused values as early as possible
===================================================================
M source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
===================================================================
diff --git a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
index 1830514ba22..cfdf627d0e2 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -318,6 +318,7 @@ class ExecuteFGraph : public TupleCallBody {
ctx.stack().pop();
if (state.is_done()) {
+ this->destruct_remaining_node_inputs(node_id, storage);
this->copy_outputs_to_final_output_if_necessary(node_id, storage, fn_out);
sockets_to_compute.pop();
}
@@ -344,11 +345,10 @@ class ExecuteFGraph : public TupleCallBody {
ctx.stack().pop();
if (state.is_done()) {
+ this->destruct_remaining_node_inputs(node_id, storage);
this->copy_outputs_to_final_output_if_necessary(node_id, storage, fn_out);
sockets_to_compute.pop();
lazy_states.pop();
-
- // TODO: destruct inputs
}
else {
for (uint requested_input_index : state.requested_inputs()) {
@@ -381,6 +381,7 @@ class ExecuteFGraph : public TupleCallBody {
body->call__setup_stack(body_in, body_out, ctx, source_info);
BLI_assert(body_out.all_initialized());
+ this->destruct_remaining_node_inputs(node_id, storage);
this->copy_outputs_to_final_output_if_necessary(node_id, storage, fn_out);
sockets_to_compute.pop();
}
@@ -402,6 +403,17 @@ class ExecuteFGraph : public TupleCallBody {
}
}
+ void destruct_remaining_node_inputs(uint node_id, SocketValueStorage &storage) const
+ {
+ for (uint input_id : m_graph->input_ids_of_node(node_id)) {
+ if (storage.is_input_initialized(input_id)) {
+ CPPTypeInfo *type_info = m_input_info[input_id].type;
+ type_info->destruct_type(storage.input_value_ptr(input_id));
+ storage.set_input_initialized(input_id, false);
+ }
+ }
+ }
+
void forward_output(uint output_id, SocketValueStorage &storage, Tuple &fn_out) const
{
BLI_assert(storage.is_output_initialized(output_id));
More information about the Bf-blender-cvs
mailing list