[Bf-blender-cvs] [103d29e2b2c] master: Timer: Use explicit re-initialization on file load

Sergey Sharybin noreply at git.blender.org
Mon Sep 9 14:27:57 CEST 2019


Commit: 103d29e2b2c0053436d0cef649ee9c6a24b2cba8
Author: Sergey Sharybin
Date:   Thu Sep 5 15:46:55 2019 +0200
Branches: master
https://developer.blender.org/rB103d29e2b2c0053436d0cef649ee9c6a24b2cba8

Timer: Use explicit re-initialization on file load

Before this the timer API was relying on using a callback API to do
initialization when new file is loaded. This isn't how rest of Blender
works and it gets in a way because callbacks API is to be move to the
BKE level.

Use explicit call to timer API from where the file is loaded.

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

M	source/blender/blenlib/BLI_timer.h
M	source/blender/blenlib/intern/BLI_timer.c
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/blenlib/BLI_timer.h b/source/blender/blenlib/BLI_timer.h
index dc47aefa090..959ac4a2b2b 100644
--- a/source/blender/blenlib/BLI_timer.h
+++ b/source/blender/blenlib/BLI_timer.h
@@ -50,4 +50,8 @@ void BLI_timer_execute(void);
 
 void BLI_timer_free(void);
 
+/* This function is to be called next to BLI_CB_EVT_LOAD_PRE, to make sure the module
+ * is properly configured for the new file. */
+void BLI_timer_on_file_load(void);
+
 #endif /* __BLI_TIMER_H__ */
diff --git a/source/blender/blenlib/intern/BLI_timer.c b/source/blender/blenlib/intern/BLI_timer.c
index bf9fd1b57f8..7ff320083eb 100644
--- a/source/blender/blenlib/intern/BLI_timer.c
+++ b/source/blender/blenlib/intern/BLI_timer.c
@@ -23,7 +23,6 @@
 
 #include "BLI_timer.h"
 #include "BLI_listbase.h"
-#include "BLI_callbacks.h"
 
 #include "MEM_guardedalloc.h"
 #include "PIL_time.h"
@@ -48,8 +47,6 @@ typedef struct TimerContainer {
 
 static TimerContainer GlobalTimer = {{0}};
 
-static void ensure_callback_is_registered(void);
-
 void BLI_timer_register(uintptr_t uuid,
                         BLI_timer_func func,
                         void *user_data,
@@ -57,8 +54,6 @@ void BLI_timer_register(uintptr_t uuid,
                         double first_interval,
                         bool persistent)
 {
-  ensure_callback_is_registered();
-
   TimedFunction *timed_func = MEM_callocN(sizeof(TimedFunction), __func__);
   timed_func->func = func;
   timed_func->user_data_free = user_data_free;
@@ -156,11 +151,7 @@ void BLI_timer_free()
   remove_tagged_functions();
 }
 
-struct ID;
-struct Main;
-static void remove_non_persistent_functions(struct Main *UNUSED(_1),
-                                            struct ID *UNUSED(_2),
-                                            void *UNUSED(_3))
+static void remove_non_persistent_functions(void)
 {
   LISTBASE_FOREACH (TimedFunction *, timed_func, &GlobalTimer.funcs) {
     if (!timed_func->persistent) {
@@ -169,18 +160,7 @@ static void remove_non_persistent_functions(struct Main *UNUSED(_1),
   }
 }
 
-static bCallbackFuncStore load_pre_callback = {
-    NULL,
-    NULL,                            /* next, prev */
-    remove_non_persistent_functions, /* func */
-    NULL,                            /* arg */
-    0,                               /* alloc */
-};
-
-static void ensure_callback_is_registered()
+void BLI_timer_on_file_load(void)
 {
-  if (!GlobalTimer.file_load_cb_registered) {
-    BLI_callback_add(&load_pre_callback, BLI_CB_EVT_LOAD_PRE);
-    GlobalTimer.file_load_cb_registered = true;
-  }
+  remove_non_persistent_functions();
 }
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index a2e7f7fe935..e70640d2f22 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -52,6 +52,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_linklist.h"
 #include "BLI_utildefines.h"
+#include "BLI_timer.h"
 #include "BLI_threads.h"
 #include "BLI_callbacks.h"
 #include "BLI_system.h"
@@ -609,6 +610,7 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
   WM_cursor_wait(1);
 
   BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE);
+  BLI_timer_on_file_load();
 
   UI_view2d_zoom_cache_reset();
 
@@ -806,6 +808,7 @@ void wm_homefile_read(bContext *C,
 
   if (use_data) {
     BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE);
+    BLI_timer_on_file_load();
 
     G.relbase_valid = 0;



More information about the Bf-blender-cvs mailing list