[Bf-blender-cvs] [43e2b34] soc-2013-depsgraph_mt: Address notes from Campbell's review

Sergey Sharybin noreply at git.blender.org
Tue Dec 17 18:12:28 CET 2013


Commit: 43e2b343e4e151ecec528acf747320633909e14f
Author: Sergey Sharybin
Date:   Tue Dec 17 23:10:07 2013 +0600
http://developer.blender.org/rB43e2b343e4e151ecec528acf747320633909e14f

Address notes from Campbell's review

- Cleanup naming in some places.
- Get rid of _ex functions with use_threads argument
  in scene update routines.

  Using Py_BEGIN_ALLOW_THREADS from frame_set and
  update_tagged functions seems made the trick.

- Fix for possible uninitialized members of
  evaluation context when it's allocated in stack.

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

M	source/blender/blenkernel/BKE_library.h
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/BKE_shrinkwrap.h
M	source/blender/blenkernel/intern/blender.c
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/shrinkwrap.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/space_image/image_ops.c
M	source/blender/makesrna/intern/CMakeLists.txt
M	source/blender/makesrna/intern/SConscript
M	source/blender/makesrna/intern/rna_main_api.c
M	source/blender/makesrna/intern/rna_object_api.c
M	source/blender/makesrna/intern/rna_scene_api.c
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_boolean.c
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/modifiers/intern/MOD_util.h

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

diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 957b6d1..bdfa097 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -77,7 +77,7 @@ void BKE_libblock_free(struct ListBase *lb, void *idv);
 void BKE_libblock_free_us(struct ListBase *lb, void *idv);
 void BKE_libblock_free_data(struct ID *id);
 
-struct Main *BKE_main_allocate(void);
+struct Main *BKE_main_new(void);
 void free_main(struct Main *mainvar);
 
 void tag_main_idcode(struct Main *mainvar, const short type, const short tag);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 47f3de6..1ec2b72 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -114,11 +114,7 @@ float BKE_scene_frame_get_from_ctime(struct Scene *scene, const float frame);
 void  BKE_scene_frame_set(struct Scene *scene, double cfra);
 
 /* **  Scene evaluation ** */
-
-void BKE_scene_update_tagged_ex(struct EvaluationContext *evaluation_context, struct Main *bmain, struct Scene *scene, bool use_threads);
 void BKE_scene_update_tagged(struct EvaluationContext *evaluation_context, struct Main *bmain, struct Scene *sce);
-
-void BKE_scene_update_for_newframe_ex(struct EvaluationContext *evaluation_context, struct Main *bmain, struct Scene *sce, unsigned int lay, bool use_threads);
 void BKE_scene_update_for_newframe(struct EvaluationContext *evaluation_context, struct Main *bmain, struct Scene *sce, unsigned int lay);
 
 struct SceneRenderLayer *BKE_scene_add_render_layer(struct Scene *sce, const char *name);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index 051edd7..6e85d9e 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -37,7 +37,7 @@
 #include "BKE_customdata.h"
 struct DerivedMesh;
 struct Object;
-struct DerivedMesh *object_get_derived_final(struct Object *ob, bool forRender);
+struct DerivedMesh *object_get_derived_final(struct Object *ob, bool for_render);
 
 
 /* SpaceTransform stuff */
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 4286bdc..5b40e3a 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -138,7 +138,7 @@ void initglobals(void)
 	
 	U.savetime = 1;
 
-	G.main = BKE_main_allocate();
+	G.main = BKE_main_new();
 
 	strcpy(G.ima, "//");
 
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index bf0cda8..d52ba12 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1005,7 +1005,7 @@ void BKE_libblock_free_us(ListBase *lb, void *idv)      /* test users */
 	}
 }
 
-Main *BKE_main_allocate(void)
+Main *BKE_main_new(void)
 {
 	Main *bmain = MEM_callocN(sizeof(Main), "new main");
 	bmain->evaluation_context = MEM_callocN(sizeof(EvaluationContext), "EvaluationCintext");
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 6fbb182..ecf2d99 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1365,17 +1365,12 @@ static void print_threads_statistics(ThreadedObjectUpdateState *state)
 #endif
 }
 
-static void scene_update_objects(EvaluationContext *evaluation_context, Scene *scene, Scene *scene_parent, bool use_threads)
+static void scene_update_objects(EvaluationContext *evaluation_context, Scene *scene, Scene *scene_parent)
 {
 	TaskScheduler *task_scheduler = BLI_task_scheduler_get();
 	TaskPool *task_pool;
 	ThreadedObjectUpdateState state;
 
-	if (use_threads == false) {
-		scene_update_all_bases(evaluation_context, scene, scene_parent);
-		return;
-	}
-
 	state.evaluation_context = evaluation_context;
 	state.scene = scene;
 	state.scene_parent = scene_parent;
@@ -1403,17 +1398,17 @@ static void scene_update_objects(EvaluationContext *evaluation_context, Scene *s
 #endif
 }
 
- static void scene_update_tagged_recursive(EvaluationContext *evaluation_context, Main *bmain, Scene *scene, Scene *scene_parent, bool use_threads)
+static void scene_update_tagged_recursive(EvaluationContext *evaluation_context, Main *bmain, Scene *scene, Scene *scene_parent)
 {
 	scene->customdata_mask = scene_parent->customdata_mask;
 
 	/* sets first, we allow per definition current scene to have
 	 * dependencies on sets, but not the other way around. */
 	if (scene->set)
-		scene_update_tagged_recursive(evaluation_context, bmain, scene->set, scene_parent, use_threads);
+		scene_update_tagged_recursive(evaluation_context, bmain, scene->set, scene_parent);
 
 	/* scene objects */
-	scene_update_objects(evaluation_context, scene, scene_parent, use_threads);
+	scene_update_objects(evaluation_context, scene, scene_parent);
 
 	/* scene drivers... */
 	scene_update_drivers(bmain, scene);
@@ -1426,20 +1421,7 @@ static void scene_update_objects(EvaluationContext *evaluation_context, Scene *s
 	
 }
 
-/* this is called in main loop, doing tagged updates before redraw */
-/* NOTE: We don't use threads when scene update was called from python
- * via scene.update() call.
- *
- * This is so because this call will set python's GIL and if any of
- * the objects is using drivers we'll end up being in a dead-lock
- * because driver evaluation will also try to set GIL.
- *
- * We might try using Py_BEGIN_ALLOW_THREADS in RNA callback, but
- * not sure how it's gonna to fit into design and what would be the
- * rules there and whether it'll help even.
- *                                               - sergey -
- */
-void BKE_scene_update_tagged_ex(EvaluationContext *evaluation_context, Main *bmain, Scene *scene, bool use_threads)
+void BKE_scene_update_tagged(EvaluationContext *evaluation_context, Main *bmain, Scene *scene)
 {
 	Scene *sce_iter;
 	
@@ -1466,7 +1448,7 @@ void BKE_scene_update_tagged_ex(EvaluationContext *evaluation_context, Main *bma
 	 *
 	 * in the future this should handle updates for all datablocks, not
 	 * only objects and scenes. - brecht */
-	scene_update_tagged_recursive(evaluation_context, bmain, scene, scene, use_threads);
+	scene_update_tagged_recursive(evaluation_context, bmain, scene, scene);
 
 	/* extra call here to recalc scene animation (for sequencer) */
 	{
@@ -1485,13 +1467,8 @@ void BKE_scene_update_tagged_ex(EvaluationContext *evaluation_context, Main *bma
 	DAG_ids_clear_recalc(bmain);
 }
 
-void BKE_scene_update_tagged(EvaluationContext *evaluation_context, Main *bmain, Scene *scene)
-{
-	BKE_scene_update_tagged_ex(evaluation_context, bmain, scene, true);
-}
-
 /* applies changes right away, does all sets too */
-void BKE_scene_update_for_newframe_ex(EvaluationContext *evaluation_context, Main *bmain, Scene *sce, unsigned int lay, bool use_threads)
+void BKE_scene_update_for_newframe(EvaluationContext *evaluation_context, Main *bmain, Scene *sce, unsigned int lay)
 {
 	float ctime = BKE_scene_frame_get(sce);
 	Scene *sce_iter;
@@ -1552,7 +1529,7 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext *evaluation_context, Mai
 	scene_do_rb_simulation_recursive(sce, ctime);
 
 	/* BKE_object_handle_update() on all objects, groups and sets */
-	scene_update_tagged_recursive(evaluation_context, bmain, sce, sce, use_threads);
+	scene_update_tagged_recursive(evaluation_context, bmain, sce, sce);
 
 	scene_depsgraph_hack(evaluation_context, sce, sce);
 
@@ -1570,11 +1547,6 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext *evaluation_context, Mai
 #endif
 }
 
-void BKE_scene_update_for_newframe(EvaluationContext *evaluation_context, Main *bmain, Scene *sce, unsigned int lay)
-{
-	BKE_scene_update_for_newframe_ex(evaluation_context, bmain, sce, lay, true);
-}
-
 /* return default layer, also used to patch old files */
 SceneRenderLayer *BKE_scene_add_render_layer(Scene *sce, const char *name)
 {
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 4e659b6..34a3cdf 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -68,12 +68,12 @@
 
 /* get derived mesh */
 /* TODO is anyfunction that does this? returning the derivedFinal without we caring if its in edit mode or not? */
-DerivedMesh *object_get_derived_final(Object *ob, bool forRender)
+DerivedMesh *object_get_derived_final(Object *ob, bool for_render)
 {
 	Mesh *me = ob->data;
 	BMEditMesh *em = me->edit_btmesh;
 
-	if (forRender) {
+	if (for_render) {
 		/* TODO(sergey): Use proper derivedRender when known. */
 		return ob->derivedFinal;
 	}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index f67e7e6..5f2c20d 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -492,7 +492,7 @@ void blo_split_main(ListBase *mainlist, Main *main)
 		return;
 	
 	for (lib = main->library.first; lib; lib = lib->id.next) {
-		Main *libmain = BKE_main_allocate();
+		Main *libmain = BKE_main_new();
 		libmain->curlib = lib;
 		BLI_addtail(mainlist, libmain);
 	}
@@ -545,7 +545,7 @@ static Main *blo_find_main(FileData *fd, const char *filepath, const char *relab
 		}
 	}
 	
-	m = BKE_main_allocate();
+	m = BKE_main_new();
 	BLI_addtail(mainlist, m);
 	
 	lib = BKE_libblock_alloc(&m->library, ID_LI, "lib");
@@ -6530,7 +6530,7 @@ static void direct_link_library(FileData *fd, Library *lib, Main *main)
 	lib->packedfile = direct_link_packedfile(fd, lib->packedfile);
 	
 	/* new main */
-	newmain = BKE_main_allocate();
+	newmain = BKE_main_new();
 	BLI_addtail(fd->mainlist, newmain);
 	newmain->curlib = lib;
 	
@@ -7554,7 +7554,7 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
 	ListBase mainlist = {NULL, NULL};
 	
 	bfd = MEM_callocN(sizeof(BlendFileData), "blendfiledata");
-	bfd->main = BKE_main_allocate();
+	bfd->main = BKE_main_new();
 	BLI_addtail(&mainlist, bfd->main);
 	fd->mainlist = &mainlist;
 	
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list