[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