diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-01-27 13:48:30 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-01-27 14:26:00 +0300 |
commit | e5e7507d31e8ae817231c4189fe0602ebce4003f (patch) | |
tree | c8d89abd5c3d466819cbecdfc1ac093b0f6a4250 | |
parent | 7e9103b49c6bdadc0c72fa369261060e67c9bc85 (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.
-rw-r--r-- | source/blender/blenlib/PIL_time_utildefines.h | 35 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 4 |
2 files changed, 32 insertions, 7 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: diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index e394c3f6541..bf1a2fa57d7 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -983,7 +983,7 @@ static bool paint_stroke_curve_end(bContext *C, wmOperator *op, PaintStroke *str return true; #ifdef DEBUG_TIME - TIMEIT_START(stroke); + TIMEIT_START_AVERAGED(whole_stroke); #endif pcp = pc->points; @@ -1044,7 +1044,7 @@ static bool paint_stroke_curve_end(bContext *C, wmOperator *op, PaintStroke *str stroke_done(C, op); #ifdef DEBUG_TIME - TIMEIT_END(stroke); + TIMEIT_END_AVERAGED(whole_stroke); #endif return true; |