[Bf-blender-cvs] [2b5c93d] master: Cleanup: move write flush into its own function

Campbell Barton noreply at git.blender.org
Thu Jul 7 08:10:05 CEST 2016


Commit: 2b5c93d8fe0e46ae21027355d6efa4a7d910c42d
Author: Campbell Barton
Date:   Thu Jul 7 16:02:45 2016 +1000
Branches: master
https://developer.blender.org/rB2b5c93d8fe0e46ae21027355d6efa4a7d910c42d

Cleanup: move write flush into its own function

No point passing dummy args to existing function, split out logic instead.

Also add flush after writing mesh data too.

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

M	source/blender/blenloader/intern/writefile.c

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

diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 217162a..e8bbc5e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -366,26 +366,31 @@ static void writedata_free(WriteData *wd)
 /***/
 
 /**
+ * Flush helps the de-duplicating memory for undo-save by logically segmenting data,
+ * so differences in one part of memory won't cause unrelated data to be duplicated.
+ */
+static void mywrite_flush(WriteData *wd)
+{
+	if (wd->count) {
+		writedata_do_write(wd, wd->buf, wd->count);
+		wd->count = 0;
+	}
+}
+
+/**
  * Low level WRITE(2) wrapper that buffers data
  * \param adr Pointer to new chunk of data
  * \param len Length of new chunk of data
  * \warning Talks to other functions with global parameters
  */
-
-#define MYWRITE_FLUSH		NULL
-
 static void mywrite(WriteData *wd, const void *adr, int len)
 {
 	if (UNLIKELY(wd->error)) {
 		return;
 	}
 
-	/* flush helps compression for undo-save */
-	if (adr == MYWRITE_FLUSH) {
-		if (wd->count) {
-			writedata_do_write(wd, wd->buf, wd->count);
-			wd->count = 0;
-		}
+	if (adr == NULL) {
+		BLI_assert(0);
 		return;
 	}
 
@@ -816,8 +821,7 @@ static void write_actions(WriteData *wd, ListBase *idbase)
 		}
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_keyingsets(WriteData *wd, ListBase *list)
@@ -1894,8 +1898,7 @@ static void write_objects(WriteData *wd, ListBase *idbase)
 		ob = ob->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 
@@ -1923,8 +1926,7 @@ static void write_vfonts(WriteData *wd, ListBase *idbase)
 		vf = vf->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 
@@ -1957,8 +1959,8 @@ static void write_keys(WriteData *wd, ListBase *idbase)
 
 		key = key->id.next;
 	}
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+
+	mywrite_flush(wd);
 }
 
 static void write_cameras(WriteData *wd, ListBase *idbase)
@@ -2060,8 +2062,7 @@ static void write_curves(WriteData *wd, ListBase *idbase)
 		cu = cu->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_dverts(WriteData *wd, int count, MDeformVert *dvlist)
@@ -2335,6 +2336,8 @@ static void write_meshes(WriteData *wd, ListBase *idbase)
 
 		mesh = mesh->id.next;
 	}
+
+	mywrite_flush(wd);
 }
 
 static void write_lattices(WriteData *wd, ListBase *idbase)
@@ -2362,8 +2365,7 @@ static void write_lattices(WriteData *wd, ListBase *idbase)
 		lt = lt->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_images(WriteData *wd, ListBase *idbase)
@@ -2407,8 +2409,8 @@ static void write_images(WriteData *wd, ListBase *idbase)
 		}
 		ima = ima->id.next;
 	}
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+
+	mywrite_flush(wd);
 }
 
 static void write_textures(WriteData *wd, ListBase *idbase)
@@ -2460,8 +2462,7 @@ static void write_textures(WriteData *wd, ListBase *idbase)
 		tex = tex->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_materials(WriteData *wd, ListBase *idbase)
@@ -2578,8 +2579,7 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
 		la = la->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_sequence_modifiers(WriteData *wd, ListBase *modbase)
@@ -2827,8 +2827,8 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
 
 		sce = sce->id.next;
 	}
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+
+	mywrite_flush(wd);
 }
 
 static void write_gpencils(WriteData *wd, ListBase *lb)
@@ -2866,8 +2866,7 @@ static void write_gpencils(WriteData *wd, ListBase *lb)
 		}
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_windowmanagers(WriteData *wd, ListBase *lb)
@@ -3143,8 +3142,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
 		sc = sc->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_bone(WriteData *wd, Bone *bone)
@@ -3192,8 +3190,7 @@ static void write_armatures(WriteData *wd, ListBase *idbase)
 		arm = arm->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_texts(WriteData *wd, ListBase *idbase)
@@ -3234,8 +3231,7 @@ static void write_texts(WriteData *wd, ListBase *idbase)
 		text = text->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_speakers(WriteData *wd, ListBase *idbase)
@@ -3279,8 +3275,7 @@ static void write_sounds(WriteData *wd, ListBase *idbase)
 		sound = sound->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_groups(WriteData *wd, ListBase *idbase)
@@ -3304,8 +3299,7 @@ static void write_groups(WriteData *wd, ListBase *idbase)
 		}
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_nodetrees(WriteData *wd, ListBase *idbase)
@@ -3518,8 +3512,7 @@ static void write_movieclips(WriteData *wd, ListBase *idbase)
 		clip = clip->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_masks(WriteData *wd, ListBase *idbase)
@@ -3579,8 +3572,7 @@ static void write_masks(WriteData *wd, ListBase *idbase)
 		mask = mask->id.next;
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers)
@@ -3930,8 +3922,7 @@ static void write_libraries(WriteData *wd, Main *main)
 		}
 	}
 
-	/* flush helps the compression for undo-save */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 }
 
 /* context is usually defined by WM, two cases where no WM is available:
@@ -4033,7 +4024,7 @@ static bool write_file_handle(
 
 	/* The windowmanager and screen often change,
 	 * avoid thumbnail detecting changes because of this. */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 
 	write_windowmanagers(wd, &mainvar->wm);
 	write_screens(wd, &mainvar->screen);
@@ -4069,7 +4060,7 @@ static bool write_file_handle(
 	write_libraries(wd,  mainvar->next);
 
 	/* So changes above don't cause a 'DNA1' to be detected as changed on undo. */
-	mywrite(wd, MYWRITE_FLUSH, 0);
+	mywrite_flush(wd);
 
 	if (write_flags & G_FILE_USERPREFS) {
 		write_userdef(wd);




More information about the Bf-blender-cvs mailing list