Commit: 2335bfeaa09ff0c700c8c2dc3b388175f2416601
Author: Sergey Sharybin
Date:   Thu Jun 8 16:11:14 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2335bfeaa09ff0c700c8c2dc3b388175f2416601

Avoid allocation of evaluation context for iterator

Use stack-allocated context when possible.

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

M       source/blender/depsgraph/DEG_depsgraph_query.h
M       source/blender/depsgraph/intern/depsgraph_eval.cc
M       source/blender/depsgraph/intern/depsgraph_query.cc

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

diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h 
b/source/blender/depsgraph/DEG_depsgraph_query.h
index 888730552e9..649e788a0ef 100644
--- a/source/blender/depsgraph/DEG_depsgraph_query.h
+++ b/source/blender/depsgraph/DEG_depsgraph_query.h
@@ -33,6 +33,8 @@
 #ifndef __DEG_DEPSGRAPH_QUERY_H__
 #define __DEG_DEPSGRAPH_QUERY_H__
 
+#include "DEG_depsgraph.h"
+
 struct ID;
 
 struct Base;
@@ -74,7 +76,7 @@ enum {
 typedef struct DEGObjectsIteratorData {
        struct Depsgraph *graph;
        struct Scene *scene;
-       struct EvaluationContext *eval_ctx;
+       struct EvaluationContext eval_ctx;
 
        /* TODO(sergey): Base should never be a thing coming FROM depsgraph. */
        struct Base *base;
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc 
b/source/blender/depsgraph/intern/depsgraph_eval.cc
index 62d591f65de..73a0428c264 100644
--- a/source/blender/depsgraph/intern/depsgraph_eval.cc
+++ b/source/blender/depsgraph/intern/depsgraph_eval.cc
@@ -61,7 +61,7 @@ EvaluationContext *DEG_evaluation_context_new(int mode)
        EvaluationContext *eval_ctx =
                (EvaluationContext *)MEM_callocN(sizeof(EvaluationContext),
                                                 "EvaluationContext");
-       eval_ctx->mode = mode;
+       DEG_evaluation_context_init(eval_ctx, mode);
        return eval_ctx;
 }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc 
b/source/blender/depsgraph/intern/depsgraph_query.cc
index 8022a11818a..bcfcbb3856c 100644
--- a/source/blender/depsgraph/intern/depsgraph_query.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query.cc
@@ -111,8 +111,7 @@ void DEG_objects_iterator_begin(BLI_Iterator *iter, 
DEGObjectsIteratorData *data
        iter->valid = true;
 
        data->scene = DEG_get_scene(graph);
-       /* TODO(sergey): Make it in-place initilization of evaluation context. 
*/
-       data->eval_ctx = DEG_evaluation_context_new(DAG_EVAL_RENDER);
+       DEG_evaluation_context_init(&data->eval_ctx, DAG_EVAL_RENDER);
 
        /* TODO(sergey): It's really confusing to store pointer to a local 
data. */
        Base base = {(Base *)scene_layer->object_bases.first, NULL};
@@ -210,7 +209,7 @@ void DEG_objects_iterator_next(BLI_Iterator *iter)
 
                        if ((data->flag & DEG_OBJECT_ITER_FLAG_DUPLI) && 
(ob->transflag & OB_DUPLI)) {
                                data->dupli_parent = ob;
-                               data->dupli_list = 
object_duplilist(data->eval_ctx, data->scene, ob);
+                               data->dupli_list = 
object_duplilist(&data->eval_ctx, data->scene, ob);
                                data->dupli_object_next = (DupliObject 
*)data->dupli_list->first;
                        }
                        return;
@@ -240,13 +239,11 @@ void DEG_objects_iterator_next(BLI_Iterator *iter)
 
 void DEG_objects_iterator_end(BLI_Iterator *iter)
 {
+#ifndef NDEBUG
        DEGObjectsIteratorData *data = (DEGObjectsIteratorData *)iter->data;
-       if (data->eval_ctx != NULL) {
-               DEG_evaluation_context_free(data->eval_ctx);
-       }
-
-#ifdef DEBUG
        /* Force crash in case the iterator data is referenced and accessed 
down the line. (T51718) */
-       memset(&data->temp_dupli_object, 0xFF, sizeof(data->temp_dupli_object));
+       memset(&data->temp_dupli_object, 0xff, sizeof(data->temp_dupli_object));
+#else
+       (void) iter;
 #endif
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to