Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2016-01-27 13:48:30 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-01-27 14:26:00 +0300
commite5e7507d31e8ae817231c4189fe0602ebce4003f (patch)
treec8d89abd5c3d466819cbecdfc1ac093b0f6a4250 /source/blender/blenlib/PIL_time_utildefines.h
parent7e9103b49c6bdadc0c72fa369261060e67c9bc85 (diff)
PIL_time_utiledefines: add TIMEIT_AVERAGED variants to block timing macros.
This variant behave exactly as TIMEIT_START etc., but it also sums up all times in a static var and prints out average execution time - very useful when dealing with small/quick pieces of code that get executed often, to get some meaningful results.
Diffstat (limited to 'source/blender/blenlib/PIL_time_utildefines.h')
-rw-r--r--source/blender/blenlib/PIL_time_utildefines.h35
1 files changed, 30 insertions, 5 deletions
diff --git a/source/blender/blenlib/PIL_time_utildefines.h b/source/blender/blenlib/PIL_time_utildefines.h
index 4141befb130..3984482f1ec 100644
--- a/source/blender/blenlib/PIL_time_utildefines.h
+++ b/source/blender/blenlib/PIL_time_utildefines.h
@@ -51,15 +51,40 @@
#define TIMEIT_VALUE_PRINT(var) \
{ \
- printf("time update(" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var));\
+ printf("time update (" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var));\
fflush(stdout); \
} (void)0
#define TIMEIT_END(var) \
- } \
- printf("time end (" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var)); \
- fflush(stdout); \
-} (void)0
+ } \
+ printf("time end (" #var "): %.6f" " " AT "\n", TIMEIT_VALUE(var));\
+ fflush(stdout); \
+ } (void)0
+
+/**
+ * _AVERAGED variants do same thing as their basic counterpart, but additionnally add elapsed time to an averaged
+ * static value, useful to get sensible timing of code running fast and often.
+ */
+#define TIMEIT_START_AVERAGED(var) \
+ { \
+ static float _sum_##var = 0.0f; \
+ static float _num_##var = 0.0f; \
+ double _timeit_##var = PIL_check_seconds_timer(); \
+ printf("time start (" #var "): " AT "\n"); \
+ fflush(stdout); \
+ { (void)0
+
+#define TIMEIT_AVERAGED_VALUE(var) (_num##var ? (_sum_##var / _num_##var) : 0.0f)
+
+#define TIMEIT_END_AVERAGED(var) \
+ } \
+ const float _delta_##var = TIMEIT_VALUE(var); \
+ _sum_##var += _delta_##var; \
+ printf("time end (" #var "): %.6f" " " AT "\n", _delta_##var); \
+ printf("time averaged (" #var "): %.6f" " " AT "\n", \
+ (_sum_##var / ++_num_##var)); \
+ fflush(stdout); \
+ } (void)0
/**
* Given some function/expression: