[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22321] branches/blender2.5/blender/source /blender/python/intern: - fix error in last commit

Campbell Barton ideasman42 at gmail.com
Sun Aug 9 15:20:13 CEST 2009


Revision: 22321
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22321
Author:   campbellbarton
Date:     2009-08-09 15:20:12 +0200 (Sun, 09 Aug 2009)

Log Message:
-----------
- fix error in last commit
- added better error feedback when registering operators fails.
- added some python benchmark timers (prints on exit), times number of times py scripts run, average time and total % of time running py scripts.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_operator_wrap.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c	2009-08-09 12:52:59 UTC (rev 22320)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c	2009-08-09 13:20:12 UTC (rev 22321)
@@ -50,6 +50,18 @@
 /* incase a python script triggers another python call, stop bpy_context_clear from invalidating */
 static int py_call_level= 0;
 
+
+// only for tests
+#define TIME_PY_RUN
+
+#ifdef TIME_PY_RUN
+#include "PIL_time.h"
+static int		bpy_timer_count = 0;
+static double	bpy_timer; /* time since python starts */
+static double	bpy_timer_run; /* time for each python script run */
+static double	bpy_timer_run_tot; /* accumulate python runs */
+#endif
+
 void bpy_context_set(bContext *C, PyGILState_STATE *gilstate)
 {
 	py_call_level++;
@@ -68,6 +80,18 @@
 		else {
 			fprintf(stderr, "ERROR: Python context called with a NULL Context. this should not happen!\n");
 		}
+
+#ifdef TIME_PY_RUN
+		if(bpy_timer_count==0) {
+			/* record time from the beginning */
+			bpy_timer= PIL_check_seconds_timer();
+			bpy_timer_run = bpy_timer_run_tot = 0.0;
+		}
+		bpy_timer_run= PIL_check_seconds_timer();
+
+
+		bpy_timer_count++;
+#endif
 	}
 }
 
@@ -85,6 +109,12 @@
 		// XXX - Calling classes currently wont store the context :\, cant set NULL because of this. but this is very flakey still.
 		//BPy_SetContext(NULL);
 		//bpy_import_main_set(NULL);
+
+#ifdef TIME_PY_RUN
+		bpy_timer_run_tot += PIL_check_seconds_timer() - bpy_timer_run;
+		bpy_timer_count++;
+#endif
+
 	}
 }
 
@@ -259,7 +289,23 @@
 	
 	Py_Finalize(  );
 	
-	return;
+#ifdef TIME_PY_RUN
+	// measure time since py started
+	bpy_timer = PIL_check_seconds_timer() - bpy_timer;
+
+	printf("*bpy stats* - ");
+	printf("tot exec: %d,  ", bpy_timer_count);
+	printf("tot run: %.4fsec,  ", bpy_timer_run_tot);
+	if(bpy_timer_count>0)
+		printf("average run: %.6fsec,  ", (bpy_timer_run_tot/bpy_timer_count));
+
+	if(bpy_timer>0.0)
+		printf("tot usage %.4f%%", (bpy_timer_run_tot/bpy_timer)*100.0);
+
+	printf("\n");
+
+#endif
+
 }
 
 /* Can run a file or text block */
@@ -570,6 +616,9 @@
 #ifdef TIME_REGISTRATION
 	printf("script time %f\n", (PIL_check_seconds_timer()-time));
 #endif
+
+	/* reset the timer so as not to take loading into the stats */
+	bpy_timer_count = 0;
 }
 
 /* ****************************************** */

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-08-09 12:52:59 UTC (rev 22320)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-08-09 13:20:12 UTC (rev 22321)
@@ -296,7 +296,7 @@
 			PyObject *py_func_ptr, *py_kw, *py_srna_cobject, *py_ret;
 			item = PyList_GET_ITEM(props, i);
 			
-			if (PyArg_ParseTuple(item, "O!O!", &PyCObject_Type, &py_func_ptr, &PyDict_Type, &py_kw)) {
+			if (PyArg_ParseTuple(item, "O!O!:PYTHON_OT_wrapper", &PyCObject_Type, &py_func_ptr, &PyDict_Type, &py_kw)) {
 				
 				PyObject *(*pyfunc)(PyObject *, PyObject *, PyObject *);
 				pyfunc = PyCObject_AsVoidPtr(py_func_ptr);
@@ -306,6 +306,8 @@
 				if (py_ret) {
 					Py_DECREF(py_ret);
 				} else {
+					fprintf(stderr, "BPy Operator \"%s\" registration error: %s item %d could not run\n", ot->idname, PYOP_ATTR_PROP, i);
+					PyLineSpit();
 					PyErr_Print();
 					PyErr_Clear();
 				}

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-08-09 12:52:59 UTC (rev 22320)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-08-09 13:20:12 UTC (rev 22321)
@@ -2642,7 +2642,7 @@
 		return NULL;
 	}
 	
-	if(PyCObject_Check(self) || PyType_Check(self) == 0) {
+	if(((self && (PyCObject_Check(self))) || (self && BPy_StructRNA_Check(self))) == 0) {
 		PyObject *ret = PyTuple_New(2);
 		PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_FloatProperty, NULL));
 		PyTuple_SET_ITEM(ret, 1, kw);
@@ -2675,7 +2675,7 @@
 		return NULL;
 	}
 	
-	if(PyCObject_Check(self) || PyType_Check(self) == 0) {
+	if(((self && (PyCObject_Check(self))) || (self && BPy_StructRNA_Check(self))) == 0) {
 		PyObject *ret = PyTuple_New(2);
 		PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_IntProperty, NULL));
 		PyTuple_SET_ITEM(ret, 1, kw);
@@ -2708,7 +2708,7 @@
 		return NULL;
 	}
 
-	if(PyCObject_Check(self) || PyType_Check(self) == 0) {
+	if(((self && (PyCObject_Check(self))) || (self && BPy_StructRNA_Check(self))) == 0) {
 		PyObject *ret = PyTuple_New(2);
 		PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_BoolProperty, NULL));
 		PyTuple_SET_ITEM(ret, 1, kw);
@@ -2741,9 +2741,9 @@
 		return NULL;
 	}
 
-	if(PyCObject_Check(self) || PyType_Check(self) == 0) {
+	if(((self && (PyCObject_Check(self))) || (self && BPy_StructRNA_Check(self))) == 0) {
 		PyObject *ret = PyTuple_New(2);
-		PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_BoolProperty, NULL));
+		PyTuple_SET_ITEM(ret, 0, PyCObject_FromVoidPtr((void *)BPy_StringProperty, NULL));
 		PyTuple_SET_ITEM(ret, 1, kw);
 		Py_INCREF(kw);
 		return ret;





More information about the Bf-blender-cvs mailing list