Commit: e5e7507d31e8ae817231c4189fe0602ebce4003f
Author: Bastien Montagne
Date:   Wed Jan 27 11:48:30 2016 +0100
Branches: master
https://developer.blender.org/rBe5e7507d31e8ae817231c4189fe0602ebce4003f

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.

===================================================================

M       source/blender/blenlib/PIL_time_utildefines.h
M       source/blender/editors/sculpt_paint/paint_stroke.c

===================================================================

diff --git a/source/blender/blenlib/PIL_time_utildefines.h 
b/source/blender/blenlib/PIL_time_utildefines.h
index 4141bef..3984482 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 e394c3f..bf1a2fa 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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to