[Bf-blender-cvs] [499af28a35c] master: IO: remove BKE_layer_collection_resync_forbid & allow

Aras Pranckevicius noreply at git.blender.org
Mon Oct 10 13:06:55 CEST 2022


Commit: 499af28a35c48244c1ac58bf7a817f0eeb24c7f5
Author: Aras Pranckevicius
Date:   Mon Oct 10 14:06:36 2022 +0300
Branches: master
https://developer.blender.org/rB499af28a35c48244c1ac58bf7a817f0eeb24c7f5

IO: remove BKE_layer_collection_resync_forbid & allow

Part of T101073: after the view layer sync was made lazy (D15885), the
BKE_layer_collection_resync_forbid and BKE_layer_collection_resync_allow
in Alembic/USD/OBJ importers is no longer needed, as long as they do
view layer dependent operations (selecting new objects) in a separate
loop after creating all the objects.

Verified that this does not regress import times for 26k objects OBJ
scene (Blender 3.0 splash) and 250k objects USD scene (Moana).

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

M	source/blender/io/alembic/intern/alembic_capi.cc
M	source/blender/io/usd/intern/usd_capi_import.cc
M	source/blender/io/wavefront_obj/importer/obj_importer.cc

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

diff --git a/source/blender/io/alembic/intern/alembic_capi.cc b/source/blender/io/alembic/intern/alembic_capi.cc
index 39595089109..b92ce5b4cfb 100644
--- a/source/blender/io/alembic/intern/alembic_capi.cc
+++ b/source/blender/io/alembic/intern/alembic_capi.cc
@@ -608,15 +608,11 @@ static void import_endjob(void *user_data)
 
     lc = BKE_layer_collection_get_active(view_layer);
 
-    /* Add all objects to the collection (don't do sync for each object). */
-    BKE_layer_collection_resync_forbid();
     for (AbcObjectReader *reader : data->readers) {
       Object *ob = reader->object();
       BKE_collection_object_add(data->bmain, lc->collection, ob);
     }
-    /* Sync the collection, and do view layer operations. */
-    BKE_layer_collection_resync_allow();
-    BKE_main_collection_sync(data->bmain);
+    /* Sync and do the view layer operations. */
     BKE_view_layer_synced_ensure(scene, view_layer);
     for (AbcObjectReader *reader : data->readers) {
       Object *ob = reader->object();
diff --git a/source/blender/io/usd/intern/usd_capi_import.cc b/source/blender/io/usd/intern/usd_capi_import.cc
index 5808c6bc77a..b8cc43beeb9 100644
--- a/source/blender/io/usd/intern/usd_capi_import.cc
+++ b/source/blender/io/usd/intern/usd_capi_import.cc
@@ -317,8 +317,7 @@ static void import_endjob(void *customdata)
 
     lc = BKE_layer_collection_get_active(view_layer);
 
-    /* Add all objects to the collection (don't do sync for each object). */
-    BKE_layer_collection_resync_forbid();
+    /* Add all objects to the collection. */
     for (USDPrimReader *reader : data->archive->readers()) {
       if (!reader) {
         continue;
@@ -330,9 +329,7 @@ static void import_endjob(void *customdata)
       BKE_collection_object_add(data->bmain, lc->collection, ob);
     }
 
-    /* Sync the collection, and do view layer operations. */
-    BKE_layer_collection_resync_allow();
-    BKE_main_collection_sync(data->bmain);
+    /* Sync and do the view layer operations. */
     BKE_view_layer_synced_ensure(scene, view_layer);
     for (USDPrimReader *reader : data->archive->readers()) {
       if (!reader) {
diff --git a/source/blender/io/wavefront_obj/importer/obj_importer.cc b/source/blender/io/wavefront_obj/importer/obj_importer.cc
index ccbcce64d65..a42ec47151d 100644
--- a/source/blender/io/wavefront_obj/importer/obj_importer.cc
+++ b/source/blender/io/wavefront_obj/importer/obj_importer.cc
@@ -42,9 +42,6 @@ static void geometry_to_blender_objects(Main *bmain,
 {
   LayerCollection *lc = BKE_layer_collection_get_active(view_layer);
 
-  /* Don't do collection syncs for each object, will do once after the loop. */
-  BKE_layer_collection_resync_forbid();
-
   /* Sort objects by name: creating many objects is much faster if the creation
    * order is sorted by name. */
   blender::parallel_sort(
@@ -73,12 +70,8 @@ static void geometry_to_blender_objects(Main *bmain,
     }
   }
 
-  /* Sync the collection after all objects are created. */
-  BKE_layer_collection_resync_allow();
-  BKE_main_collection_sync(bmain);
+  /* Do object selections in a separate loop (allows just one view layer sync). */
   BKE_view_layer_synced_ensure(scene, view_layer);
-
-  /* After collection sync, select objects in the view layer and do DEG updates. */
   for (Object *obj : objects) {
     Base *base = BKE_view_layer_base_find(view_layer, obj);
     BKE_view_layer_base_select_and_set_active(view_layer, base);



More information about the Bf-blender-cvs mailing list