summaryrefslogtreecommitdiffstats
path: root/libdimension-python
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension-python')
-rw-r--r--libdimension-python/dimension.pxd16
-rw-r--r--libdimension-python/dimension.pyx43
2 files changed, 59 insertions, 0 deletions
diff --git a/libdimension-python/dimension.pxd b/libdimension-python/dimension.pxd
index 22e9764..f104e9c 100644
--- a/libdimension-python/dimension.pxd
+++ b/libdimension-python/dimension.pxd
@@ -63,6 +63,19 @@ cdef extern from "../libdimension/dimension.h":
void dmnsn_array_remove(dmnsn_array *array, size_t i)
void dmnsn_array_apply(dmnsn_array *array, dmnsn_callback_fn *callback)
+ ##########
+ # Timers #
+ ##########
+
+ ctypedef struct dmnsn_timer:
+ double real
+ double user
+ double system
+
+ dmnsn_timer *dmnsn_new_timer()
+ void dmnsn_complete_timer(dmnsn_timer *timer)
+ void dmnsn_delete_timer(dmnsn_timer *timer)
+
############
# Geometry #
############
@@ -352,6 +365,9 @@ cdef extern from "../libdimension/dimension.h":
double adc_bailout
unsigned int nthreads
+ dmnsn_timer *bounding_timer
+ dmnsn_timer *render_timer
+
dmnsn_scene *dmnsn_new_scene()
void dmnsn_delete_scene(dmnsn_scene *scene)
diff --git a/libdimension-python/dimension.pyx b/libdimension-python/dimension.pyx
index 54b7e66..442394b 100644
--- a/libdimension-python/dimension.pyx
+++ b/libdimension-python/dimension.pyx
@@ -27,6 +27,42 @@ import os
def dieOnWarnings(alwaysDie):
dmnsn_die_on_warnings(alwaysDie)
+##########
+# Timers #
+##########
+
+cdef class Timer:
+ cdef dmnsn_timer *_timer
+
+ def __init__(self):
+ self._timer = dmnsn_new_timer()
+
+ def __dealloc__(self):
+ dmnsn_delete_timer(self._timer)
+
+ def complete(self):
+ dmnsn_complete_timer(self._timer)
+
+ property real:
+ def __get__(self):
+ return self._timer.real
+ property user:
+ def __get__(self):
+ return self._timer.user
+ property system:
+ def __get__(self):
+ return self._timer.system
+
+ def __str__(self):
+ return '%.2fs (user: %.2fs; system: %.2fs)' % \
+ (self._timer.real, self._timer.user, self._timer.system)
+
+cdef _rawTimer(dmnsn_timer *timer):
+ cdef Timer self = Timer.__new__(Timer)
+ self._timer = timer
+ DMNSN_INCREF(self._timer)
+ return self
+
############
# Geometry #
############
@@ -887,6 +923,13 @@ cdef class Scene:
def __set__(self, n):
self._scene.nthreads = n
+ property boundingTimer:
+ def __get__(self):
+ return _rawTimer(self._scene.bounding_timer)
+ property renderTimer:
+ def __get__(self):
+ return _rawTimer(self._scene.render_timer)
+
def raytrace(self):
# Ensure the default texture is complete
cdef Texture default = Texture(Black)