[Bf-blender-cvs] [211946fe679] override-recursive-resync: Finish first pass of enhanced stats/reports for file loading.

Bastien Montagne noreply at git.blender.org
Fri Jun 11 17:56:18 CEST 2021


Commit: 211946fe679faa3fd8ccc3850499ccd1d630f866
Author: Bastien Montagne
Date:   Fri Jun 11 17:55:35 2021 +0200
Branches: override-recursive-resync
https://developer.blender.org/rB211946fe679faa3fd8ccc3850499ccd1d630f866

Finish first pass of enhanced stats/reports for file loading.

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

M	source/blender/blenkernel/intern/lib_override.c
M	source/blender/blenloader/BLO_readfile.h
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 6b3ee8f5c1f..aaf850696b0 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -55,6 +55,7 @@
 #include "BLO_readfile.h"
 
 #include "BLI_ghash.h"
+#include "BLI_linklist.h"
 #include "BLI_listbase.h"
 #include "BLI_string.h"
 #include "BLI_task.h"
@@ -1537,6 +1538,7 @@ static void lib_override_library_main_resync_on_library_indirect_level(
             (!ID_IS_LINKED(id) && library_indirect_level != 0)) {
           continue;
         }
+        Library *library = id->lib;
 
         int level = 0;
         /* In complex non-supported cases, with several different override hierarchies sharing
@@ -1548,12 +1550,21 @@ static void lib_override_library_main_resync_on_library_indirect_level(
         id = lib_override_library_main_resync_find_root_recurse(id, &level);
         id->tag &= ~LIB_TAG_LIB_OVERRIDE_NEED_RESYNC;
         BLI_assert(ID_IS_OVERRIDE_LIBRARY_REAL(id));
+        BLI_assert(id->lib == library);
         do_continue = true;
 
-        CLOG_INFO(&LOG, 2, "Resyncing %s (%p)...", id->name, id->lib);
+        CLOG_INFO(&LOG, 2, "Resyncing %s (%p)...", id->name, library);
         const bool success = BKE_lib_override_library_resync(
             bmain, scene, view_layer, id, override_resync_residual_storage, false, false, reports);
         CLOG_INFO(&LOG, 2, "\tSuccess: %d", success);
+        if (success && reports != NULL) {
+          reports->num_resynced_lib_overrides++;
+          if (library_indirect_level > 0 &&
+              BLI_linklist_index(reports->libraries_recursive_linked, library) < 0) {
+            BLI_linklist_prepend(&reports->libraries_recursive_linked, library);
+            reports->num_resynced_lib_overrides_libraries++;
+          }
+        }
         break;
       }
       FOREACH_MAIN_LISTBASE_ID_END;
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 4e12508ec8b..cca68b120e5 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -104,11 +104,12 @@ typedef struct BlendFileReadReport {
    * during this file read. */
   int num_missing_libraries;
   int num_missing_linked_id;
+  /* Number of root override IDs that were resynced. */
   int num_resynced_lib_overrides;
 
   /* Number of libraries which had overrides that needed to be resynced, and a single linked list
    * of those. */
-  int num_resynced_linked_lib_overrides;
+  int num_resynced_lib_overrides_libraries;
   struct LinkNode *libraries_recursive_linked;
 } BlendFileReadReport;
 
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 6783f79ad87..2e261e6652a 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -822,23 +822,44 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
       const int duration_lib_override_recursive_resync_minutes = (int)floor(
           bf_reports.duration_lib_overrides_recursive_resync / 60.0);
 
-      BKE_reportf(reports,
-                  RPT_INFO,
-                  "Blender file read in %d min %f sec (loading libraries: %d min %f sec, applying "
-                  "overrides: %d min %f sec, resyncing overrides: %d min %f sec, recursive resync "
-                  "of overrides: %d min %f sec)",
-                  duration_whole_minutes,
-                  bf_reports.duration_whole - (duration_whole_minutes * 60.0),
-                  duration_libraries_minutes,
-                  bf_reports.duration_libraries - (duration_libraries_minutes * 60.0),
-                  duration_lib_override_minutes,
-                  bf_reports.duration_lib_overrides - (duration_lib_override_minutes * 60.0),
-                  duration_lib_override_resync_minutes,
-                  bf_reports.duration_lib_overrides_resync -
-                      (duration_lib_override_resync_minutes * 60.0),
-                  duration_lib_override_recursive_resync_minutes,
-                  bf_reports.duration_lib_overrides_recursive_resync -
-                      (duration_lib_override_recursive_resync_minutes * 60.0));
+      BKE_reportf(
+          reports,
+          RPT_INFO,
+          "Blender file read in %d min %.2f sec (loading libraries: %d min %.2f sec, applying "
+          "overrides: %d min %.2f sec, resyncing overrides: %d min %.2f sec (%d root "
+          "overrides), among which recursive resync of overrides: %d min %.2f sec)",
+          duration_whole_minutes,
+          bf_reports.duration_whole - (duration_whole_minutes * 60.0),
+          duration_libraries_minutes,
+          bf_reports.duration_libraries - (duration_libraries_minutes * 60.0),
+          duration_lib_override_minutes,
+          bf_reports.duration_lib_overrides - (duration_lib_override_minutes * 60.0),
+          duration_lib_override_resync_minutes,
+          bf_reports.duration_lib_overrides_resync - (duration_lib_override_resync_minutes * 60.0),
+          bf_reports.num_resynced_lib_overrides,
+          duration_lib_override_recursive_resync_minutes,
+          bf_reports.duration_lib_overrides_recursive_resync -
+              (duration_lib_override_recursive_resync_minutes * 60.0));
+      if (bf_reports.num_resynced_lib_overrides_libraries != 0) {
+        for (LinkNode *node_lib = bf_reports.libraries_recursive_linked; node_lib != NULL;
+             node_lib = node_lib->next) {
+          Library *library = node_lib->link;
+          BKE_reportf(reports, RPT_INFO, "Library %s needs overrides resync.", library->filepath);
+        }
+        BKE_reportf(reports,
+                    RPT_WARNING,
+                    "%d libraries have overrides needing resync, this costed %d min %.2f seconds "
+                    "of the total %d min %.2f sec file reading.",
+                    bf_reports.num_resynced_lib_overrides_libraries,
+                    duration_lib_override_recursive_resync_minutes,
+                    bf_reports.duration_lib_overrides_recursive_resync -
+                        (duration_lib_override_recursive_resync_minutes * 60.0),
+                    duration_whole_minutes,
+                    bf_reports.duration_whole - (duration_whole_minutes * 60.0));
+      }
+
+      BLI_linklist_free(bf_reports.libraries_recursive_linked, NULL);
+      bf_reports.libraries_recursive_linked = NULL;
 
       success = true;
     }



More information about the Bf-blender-cvs mailing list