[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24565] trunk/blender: skip rna property & function lookups for members starting with "_" ( since makesrna disallows this)

Campbell Barton ideasman42 at gmail.com
Sun Nov 15 00:11:46 CET 2009


Revision: 24565
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24565
Author:   campbellbarton
Date:     2009-11-15 00:11:46 +0100 (Sun, 15 Nov 2009)

Log Message:
-----------
skip rna property & function lookups for members starting with "_" (since makesrna disallows this)
added a way profile python startup in bpy/__init__.py, if'd out by default.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy/__init__.py
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/modules/bpy/__init__.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/__init__.py	2009-11-14 22:43:42 UTC (rev 24564)
+++ trunk/blender/release/scripts/modules/bpy/__init__.py	2009-11-14 23:11:46 UTC (rev 24565)
@@ -64,4 +64,14 @@
                 print("Reloading:", mod)
                 reload(mod)
 
-load_scripts()
\ No newline at end of file
+
+if "-d" in sys.argv and False: # Enable this to measure startup speed
+    import cProfile
+    cProfile.run('import bpy; bpy.load_scripts()', 'blender.prof')
+    
+    import pstats
+    p = pstats.Stats('blender.prof')
+    p.sort_stats('cumulative').print_stats(100)
+
+else:
+    load_scripts()
\ No newline at end of file

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2009-11-14 22:43:42 UTC (rev 24564)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2009-11-14 23:11:46 UTC (rev 24565)
@@ -1379,7 +1379,10 @@
 	PropertyRNA *prop;
 	FunctionRNA *func;
 	
-  	if ((prop = RNA_struct_find_property(&self->ptr, name))) {
+	if(name[0]=='_') { // rna can't start with a "_", so for __dict__ and similar we can skip using rna lookups
+		ret = PyObject_GenericGetAttr((PyObject *)self, pyname);
+	}
+	else if ((prop = RNA_struct_find_property(&self->ptr, name))) {
   		ret = pyrna_prop_to_py(&self->ptr, prop);
   	}
 	else if ((func = RNA_struct_find_function(&self->ptr, name))) {
@@ -1485,24 +1488,27 @@
 static PyObject *pyrna_prop_getattro( BPy_PropertyRNA *self, PyObject *pyname )
 {
 	char *name = _PyUnicode_AsString(pyname);
-	PyObject *ret;
-	PropertyRNA *prop;
-	FunctionRNA *func;
 
-	if (RNA_property_type(self->prop) == PROP_COLLECTION) {
-		PointerRNA r_ptr;
-		if(RNA_property_collection_type_get(&self->ptr, self->prop, &r_ptr)) {
-			if ((prop = RNA_struct_find_property(&r_ptr, name))) {
-				ret = pyrna_prop_to_py(&r_ptr, prop);
+	if(name[0] != '_') {
+		if (RNA_property_type(self->prop) == PROP_COLLECTION) {
+			PyObject *ret;
+			PropertyRNA *prop;
+			FunctionRNA *func;
 
-				return ret;
-			}
-			else if ((func = RNA_struct_find_function(&r_ptr, name))) {
-				PyObject *self_collection= pyrna_struct_CreatePyObject(&r_ptr);
-				ret = pyrna_func_to_py((BPy_DummyPointerRNA *)self_collection, func);
-				Py_DECREF(self_collection);
+			PointerRNA r_ptr;
+			if(RNA_property_collection_type_get(&self->ptr, self->prop, &r_ptr)) {
+				if ((prop = RNA_struct_find_property(&r_ptr, name))) {
+					ret = pyrna_prop_to_py(&r_ptr, prop);
 
-				return ret;
+					return ret;
+				}
+				else if ((func = RNA_struct_find_function(&r_ptr, name))) {
+					PyObject *self_collection= pyrna_struct_CreatePyObject(&r_ptr);
+					ret = pyrna_func_to_py((BPy_DummyPointerRNA *)self_collection, func);
+					Py_DECREF(self_collection);
+
+					return ret;
+				}
 			}
 		}
 	}





More information about the Bf-blender-cvs mailing list