code cleanup: move shrinkwrap's benchmark macro into PIL_time.h & some minor style edits.

This commit is contained in:
Campbell Barton
2012-11-09 04:01:19 +00:00
parent cf08068e10
commit 11a5c909f8
4 changed files with 25 additions and 34 deletions

View File

@@ -56,33 +56,16 @@
#include "BKE_mesh.h"
#include "BKE_tessmesh.h"
/* for timing... */
#if 0
# include "PIL_time.h"
#else
# define TIMEIT_BENCH(expr, id) (expr)
#endif
/* Util macros */
#define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n"))
/* Benchmark macros */
#if !defined(_WIN32) && 0
#include <sys/time.h>
#define BENCH(a) \
do { \
double _t1, _t2; \
struct timeval _tstart, _tend; \
clock_t _clock_init = clock(); \
gettimeofday ( &_tstart, NULL); \
(a); \
gettimeofday ( &_tend, NULL); \
_t1 = ( double ) _tstart.tv_sec + ( double ) _tstart.tv_usec/ ( 1000*1000 ); \
_t2 = ( double ) _tend.tv_sec + ( double ) _tend.tv_usec/ ( 1000*1000 ); \
printf("%s: %fs (real) %fs (cpu)\n", #a, _t2-_t1, (float)(clock()-_clock_init)/CLOCKS_PER_SEC);\
} while (0)
#else
#define BENCH(a) (a)
#endif
/* get derived mesh */
/* TODO is anyfunction that does this? returning the derivedFinal without we caring if its in edit mode or not? */
DerivedMesh *object_get_derived_final(Object *ob)
@@ -143,7 +126,7 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
BVHTreeNearest nearest = NULL_BVHTreeNearest;
BENCH(bvhtree_from_mesh_verts(&treeData, calc->target, 0.0, 2, 6));
TIMEIT_BENCH(bvhtree_from_mesh_verts(&treeData, calc->target, 0.0, 2, 6), bvhtree_verts);
if (treeData.tree == NULL) {
OUT_OF_MEMORY();
return;
@@ -437,7 +420,7 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
BVHTreeNearest nearest = NULL_BVHTreeNearest;
/* Create a bvh-tree of the given target */
BENCH(bvhtree_from_mesh_faces(&treeData, calc->target, 0.0, 2, 6));
TIMEIT_BENCH(bvhtree_from_mesh_faces(&treeData, calc->target, 0.0, 2, 6), bvhtree_faces);
if (treeData.tree == NULL) {
OUT_OF_MEMORY();
return;
@@ -584,15 +567,15 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedM
if (calc.target) {
switch (smd->shrinkType) {
case MOD_SHRINKWRAP_NEAREST_SURFACE:
BENCH(shrinkwrap_calc_nearest_surface_point(&calc));
TIMEIT_BENCH(shrinkwrap_calc_nearest_surface_point(&calc), deform_surface);
break;
case MOD_SHRINKWRAP_PROJECT:
BENCH(shrinkwrap_calc_normal_projection(&calc));
TIMEIT_BENCH(shrinkwrap_calc_normal_projection(&calc), deform_project);
break;
case MOD_SHRINKWRAP_NEAREST_VERTEX:
BENCH(shrinkwrap_calc_nearest_vertex(&calc));
TIMEIT_BENCH(shrinkwrap_calc_nearest_vertex(&calc), deform_vertex);
break;
}
}

View File

@@ -76,6 +76,14 @@ void PIL_sleep_ms(int ms);
fflush(stdout); \
} (void)0
#define TIMEIT_BENCH(expr, id) \
{ \
TIMEIT_START(id); \
(expr); \
TIMEIT_END(id); \
} (void)0
#ifdef __cplusplus
}
#endif

View File

@@ -510,7 +510,7 @@ static int find_intersection_point(float r[3], float a1[3], float a2[3], float b
static void find_intersection_point_plane(float r[3], float p1[3], float p2[3], float p3[3],
float a[3], float m[3])
{
const double null = 1e-20;
const double isect_epsilon = 1e-20;
float P[3], N[3], A[3], M[3];
float vv1[3], vv2[3];
double t;
@@ -542,9 +542,9 @@ static void find_intersection_point_plane(float r[3], float p1[3], float p2[3],
else {
C = N[0] * P[0] + N[1] * P[1] + N[2] * P[2];
D = N[0] * M[0] + N[1] * M[1] + N[2] * M[2];
E = (A[0] * N[0] + A[1] * N[1] + A[2] * N[2]);
E = A[0] * N[0] + A[1] * N[1] + A[2] * N[2];
if (fabs(E) < null)
if (fabs(E) < isect_epsilon)
t = 0;
else
t = (C - D) / E;