[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