[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53674] trunk/blender/source/blender: add RNA_def_struct_ptr(...) to use for runtime struct registration, saves over 2000 string lookups on startup and gives overall ~10% speedup for starting blender on my system .

Campbell Barton ideasman42 at gmail.com
Wed Jan 9 06:32:23 CET 2013


Revision: 53674
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53674
Author:   campbellbarton
Date:     2013-01-09 05:32:15 +0000 (Wed, 09 Jan 2013)
Log Message:
-----------
add RNA_def_struct_ptr(...) to use for runtime struct registration, saves over 2000 string lookups on startup and gives overall ~10% speedup for starting blender on my system.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/RNA_define.h
    trunk/blender/source/blender/makesrna/intern/rna_ID.c
    trunk/blender/source/blender/makesrna/intern/rna_animation.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/makesrna/intern/rna_render.c
    trunk/blender/source/blender/makesrna/intern/rna_ui.c
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/makesrna/RNA_define.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_define.h	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/RNA_define.h	2013-01-09 05:32:15 UTC (rev 53674)
@@ -49,6 +49,7 @@
 
 /* Struct */
 
+StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom);
 StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from);
 void RNA_def_struct_sdna(StructRNA *srna, const char *structname);
 void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname);

Modified: trunk/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ID.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_ID.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -248,7 +248,7 @@
 		return NULL;
 	}
 
-	return RNA_def_struct(&BLENDER_RNA, identifier, "PropertyGroup");  /* XXX */
+	return RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_PropertyGroup);  /* XXX */
 }
 
 StructRNA *rna_PropertyGroup_refine(PointerRNA *ptr)

Modified: trunk/blender/source/blender/makesrna/intern/rna_animation.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_animation.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_animation.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -234,7 +234,7 @@
 	memcpy(ksi, &dummyksi, sizeof(KeyingSetInfo));
 	
 	/* set RNA-extensions info */
-	ksi->ext.srna = RNA_def_struct(&BLENDER_RNA, ksi->idname, "KeyingSetInfo");
+	ksi->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ksi->idname, &RNA_KeyingSetInfo);
 	ksi->ext.data = data;
 	ksi->ext.call = call;
 	ksi->ext.free = free;

Modified: trunk/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_define.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_define.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -623,13 +623,12 @@
 }
 
 /* Struct Definition */
-
-StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
+StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
 {
-	StructRNA *srna, *srnafrom = NULL;
+	StructRNA *srna;
 	StructDefRNA *ds = NULL, *dsfrom = NULL;
 	PropertyRNA *prop;
-	
+
 	if (DefRNA.preprocess) {
 		char error[512];
 
@@ -638,19 +637,7 @@
 			DefRNA.error = 1;
 		}
 	}
-	
-	if (from) {
-		/* find struct to derive from */
-		for (srnafrom = brna->structs.first; srnafrom; srnafrom = srnafrom->cont.next)
-			if (strcmp(srnafrom->identifier, from) == 0)
-				break;
 
-		if (!srnafrom) {
-			fprintf(stderr, "%s: struct %s not found to define %s.\n", __func__, from, identifier);
-			DefRNA.error = 1;
-		}
-	}
-
 	srna = MEM_callocN(sizeof(StructRNA), "StructRNA");
 	DefRNA.laststruct = srna;
 
@@ -670,7 +657,7 @@
 		else
 			srna->base = srnafrom;
 	}
-	
+
 	srna->identifier = identifier;
 	srna->name = identifier; /* may be overwritten later RNA_def_struct_ui_text */
 	srna->description = "";
@@ -741,6 +728,28 @@
 	return srna;
 }
 
+StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
+{
+	StructRNA *srnafrom = NULL;
+
+	/* only use RNA_def_struct() while pre-processing, otherwise use RNA_def_struct_ptr() */
+	BLI_assert(DefRNA.preprocess);
+
+	if (from) {
+		/* find struct to derive from */
+		for (srnafrom = brna->structs.first; srnafrom; srnafrom = srnafrom->cont.next)
+			if (strcmp(srnafrom->identifier, from) == 0)
+				break;
+
+		if (!srnafrom) {
+			fprintf(stderr, "%s: struct %s not found to define %s.\n", __func__, from, identifier);
+			DefRNA.error = 1;
+		}
+	}
+
+	return RNA_def_struct_ptr(brna, identifier, srnafrom);
+}
+
 void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
 {
 	StructDefRNA *ds;

Modified: trunk/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_render.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -196,7 +196,7 @@
 	et = MEM_callocN(sizeof(RenderEngineType), "python render engine");
 	memcpy(et, &dummyet, sizeof(dummyet));
 
-	et->ext.srna = RNA_def_struct(&BLENDER_RNA, et->idname, "RenderEngine");
+	et->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, et->idname, &RNA_RenderEngine);
 	et->ext.data = data;
 	et->ext.call = call;
 	et->ext.free = free;

Modified: trunk/blender/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -225,7 +225,7 @@
 	pt = MEM_callocN(sizeof(PanelType), "python buttons panel");
 	memcpy(pt, &dummypt, sizeof(dummypt));
 
-	pt->ext.srna = RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel");
+	pt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, pt->idname, &RNA_Panel);
 	pt->ext.data = data;
 	pt->ext.call = call;
 	pt->ext.free = free;
@@ -338,7 +338,7 @@
 	ult = MEM_callocN(sizeof(uiListType) + over_alloc, "python uilist");
 	memcpy(ult, &dummyult, sizeof(dummyult));
 
-	ult->ext.srna = RNA_def_struct(&BLENDER_RNA, ult->idname, "UIList");
+	ult->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ult->idname, &RNA_UIList);
 	ult->ext.data = data;
 	ult->ext.call = call;
 	ult->ext.free = free;
@@ -439,7 +439,7 @@
 	ht = MEM_callocN(sizeof(HeaderType), "python buttons header");
 	memcpy(ht, &dummyht, sizeof(dummyht));
 
-	ht->ext.srna = RNA_def_struct(&BLENDER_RNA, ht->idname, "Header");
+	ht->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ht->idname, &RNA_Header);
 	ht->ext.data = data;
 	ht->ext.call = call;
 	ht->ext.free = free;
@@ -572,7 +572,7 @@
 		mt->description = buf;
 	}
 
-	mt->ext.srna = RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu");
+	mt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, mt->idname, &RNA_Menu);
 	mt->ext.data = data;
 	mt->ext.call = call;
 	mt->ext.free = free;

Modified: trunk/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -514,7 +514,7 @@
 	memcpy(apt, &dummyapt, sizeof(dummyapt));
 	BKE_addon_pref_type_add(apt);
 
-	apt->ext.srna = RNA_def_struct(&BLENDER_RNA, identifier, "AddonPreferences");
+	apt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_AddonPreferences);
 	apt->ext.data = data;
 	apt->ext.call = call;
 	apt->ext.free = free;

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -1138,7 +1138,7 @@
 	 * for now just remove from dir(bpy.types) */
 
 	/* create a new operator type */
-	dummyot.ext.srna = RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+	dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
 	RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
 	dummyot.ext.data = data;
 	dummyot.ext.call = call;
@@ -1219,7 +1219,7 @@
 	 * for now just remove from dir(bpy.types) */
 
 	/* create a new operator type */
-	dummyot.ext.srna = RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+	dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
 	dummyot.ext.data = data;
 	dummyot.ext.call = call;
 	dummyot.ext.free = free;

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2013-01-09 04:17:53 UTC (rev 53673)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2013-01-09 05:32:15 UTC (rev 53674)
@@ -151,7 +151,7 @@
 	wmOperatorType *ot;
 	
 	ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-	ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+	ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
 	/* Set the default i18n context now, so that opfunc can redefine it if needed! */
 	RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT);
 	opfunc(ot);
@@ -173,7 +173,7 @@
 	wmOperatorType *ot;
 
 	ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-	ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+	ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
 	/* Set the default i18n context now, so that opfunc can redefine it if needed! */
 	RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT);
 	opfunc(ot, userdata);
@@ -360,7 +360,7 @@
 	}
 	
 	ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-	ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+	ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
 	
 	ot->idname = idname;
 	ot->name = name;
@@ -390,7 +390,7 @@
 	wmOperatorType *ot;
 
 	ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-	ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+	ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
 
 	ot->flag = OPTYPE_MACRO;
 	ot->exec = wm_macro_exec;




More information about the Bf-blender-cvs mailing list