[Bf-blender-cvs] [244315afc9b] master: Cleanup: refactor auto-save timer usage

Campbell Barton noreply at git.blender.org
Mon Mar 15 04:54:13 CET 2021


Commit: 244315afc9bd905c6d725b5be2428fa6e382cd00
Author: Campbell Barton
Date:   Mon Mar 15 14:21:33 2021 +1100
Branches: master
https://developer.blender.org/rB244315afc9bd905c6d725b5be2428fa6e382cd00

Cleanup: refactor auto-save timer usage

- Split out auto-save file writing from timer code.
- Add wm_autosave_timer_begin so there are both begin & end functions.
- Replace WM_event_add_timer/WM_event_remove_timer with begin/end calls.

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

M	source/blender/windowmanager/intern/wm_files.c
M	source/blender/windowmanager/wm.h

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

diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index fb0b9ed39e4..ca59174f8e8 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -1643,35 +1643,10 @@ static void wm_autosave_location(char *filepath)
   BLI_join_dirfile(filepath, FILE_MAX, BKE_tempdir_base(), path);
 }
 
-void WM_autosave_init(wmWindowManager *wm)
-{
-  wm_autosave_timer_end(wm);
-
-  if (U.flag & USER_AUTOSAVE) {
-    wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, U.savetime * 60.0);
-  }
-}
-
-void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
+static void wm_autosave_write(Main *bmain, wmWindowManager *wm)
 {
   char filepath[FILE_MAX];
 
-  WM_event_remove_timer(wm, NULL, wm->autosavetimer);
-
-  /* If a modal operator is running, don't autosave because we might not be in
-   * a valid state to save. But try again in 10ms. */
-  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-    LISTBASE_FOREACH (wmEventHandler *, handler_base, &win->modalhandlers) {
-      if (handler_base->type == WM_HANDLER_TYPE_OP) {
-        wmEventHandler_Op *handler = (wmEventHandler_Op *)handler_base;
-        if (handler->op) {
-          wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, 0.01);
-          return;
-        }
-      }
-    }
-  }
-
   wm_autosave_location(filepath);
 
   if (U.uiflag & USER_GLOBALUNDO) {
@@ -1690,8 +1665,20 @@ void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
     /* Error reporting into console. */
     BLO_write_file(bmain, filepath, fileflags, &(const struct BlendFileWriteParams){0}, NULL);
   }
-  /* do timer after file write, just in case file write takes a long time */
-  wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, U.savetime * 60.0);
+}
+
+static void wm_autosave_timer_begin_ex(wmWindowManager *wm, double timestep)
+{
+  wm_autosave_timer_end(wm);
+
+  if (U.flag & USER_AUTOSAVE) {
+    wm->autosavetimer = WM_event_add_timer(wm, NULL, TIMERAUTOSAVE, timestep);
+  }
+}
+
+void wm_autosave_timer_begin(wmWindowManager *wm)
+{
+  wm_autosave_timer_begin_ex(wm, U.savetime * 60.0);
 }
 
 void wm_autosave_timer_end(wmWindowManager *wm)
@@ -1702,6 +1689,38 @@ void wm_autosave_timer_end(wmWindowManager *wm)
   }
 }
 
+void WM_autosave_init(wmWindowManager *wm)
+{
+  wm_autosave_timer_begin(wm);
+}
+
+/**
+ * Run the auto-save timer action.
+ */
+void wm_autosave_timer(Main *bmain, wmWindowManager *wm, wmTimer *UNUSED(wt))
+{
+  wm_autosave_timer_end(wm);
+
+  /* If a modal operator is running, don't autosave because we might not be in
+   * a valid state to save. But try again in 10ms. */
+  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
+    LISTBASE_FOREACH (wmEventHandler *, handler_base, &win->modalhandlers) {
+      if (handler_base->type == WM_HANDLER_TYPE_OP) {
+        wmEventHandler_Op *handler = (wmEventHandler_Op *)handler_base;
+        if (handler->op) {
+          wm_autosave_timer_begin_ex(wm, 0.01);
+          return;
+        }
+      }
+    }
+  }
+
+  wm_autosave_write(bmain, wm);
+
+  /* Restart the timer after file write, just in case file write takes a long time. */
+  wm_autosave_timer_begin(wm);
+}
+
 void wm_autosave_delete(void)
 {
   char filename[FILE_MAX];
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 6fc44e82df0..7fddf60eb97 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -75,6 +75,7 @@ void wm_jobs_timer_end(wmWindowManager *wm, wmTimer *wt);
 
 /* wm_files.c */
 void wm_autosave_timer(struct Main *bmain, wmWindowManager *wm, wmTimer *wt);
+void wm_autosave_timer_begin(struct wmWindowManager *wm);
 void wm_autosave_timer_end(wmWindowManager *wm);
 void wm_autosave_delete(void);



More information about the Bf-blender-cvs mailing list