Revision: 54568
http://brlcad.svn.sourceforge.net/brlcad/?rev=54568&view=rev
Author: brlcad
Date: 2013-03-08 15:38:35 +0000 (Fri, 08 Mar 2013)
Log Message:
-----------
undo the usage of richard's pooling memory interface underneath NMG. direct
profiling of the implementation showed it to be an order of magnitude slower
than bu_malloc/calloc, 50M allocations went from 5s to 70s-90s.
Modified Paths:
--------------
brlcad/trunk/include/nmg.h
brlcad/trunk/src/librt/primitives/nmg/nmg_copy.c
Modified: brlcad/trunk/include/nmg.h
===================================================================
--- brlcad/trunk/include/nmg.h 2013-03-08 15:32:49 UTC (rev 54567)
+++ brlcad/trunk/include/nmg.h 2013-03-08 15:38:35 UTC (rev 54568)
@@ -548,12 +548,16 @@
* OBSOLETE
*/
#define NMG_FREESTRUCT(ptr, str) { \
+ BU_PUT(ptr, struct str); \
+ (ptr) = NULL; \
+}
+#if 0
memset((char *)(ptr), 0, sizeof(struct str)); \
BU_PUT((ptr), struct str); \
- (ptr) = NULL; \
-}
+#endif
+
/*
* Macros to create and destroy storage for the NMG data structures.
* Since nmg_mk.c and g_nmg.c are the only source file which should
@@ -564,7 +568,7 @@
#define NMG_INCR_INDEX(_p, _m) \
NMG_CK_MODEL(_m); (_p)->index = ((_m)->maxindex)++
-#if 1
+#if 0
#define GET_REGION(p, m) {p = (struct nmgregion
*)bu_pool_get(sizeof(struct nmgregion)); NMG_INCR_INDEX(p, m);}
#define GET_REGION_A(p, m) {p = (struct nmgregion_a
*)bu_pool_get(sizeof(struct nmgregion_a)); NMG_INCR_INDEX(p, m);}
#define GET_SHELL(p, m) {p = (struct shell
*)bu_pool_get(sizeof(struct shell)); NMG_INCR_INDEX(p, m);}
@@ -610,7 +614,7 @@
#define GET_VERTEXUSE_A_CNURB(p, m) {NMG_GETSTRUCT(p, vertexuse_a_cnurb);
NMG_INCR_INDEX(p, m);}
#endif
-#if 1
+#if 0
#define FREE_MODEL(p) NMG_FREESTRUCT(p, model)
#define FREE_REGION(p) {bu_pool_put((void *)p, sizeof(struct
nmgregion));}
#define FREE_REGION_A(p) {bu_pool_put((void *)p, sizeof(struct
nmgregion_a));}
Modified: brlcad/trunk/src/librt/primitives/nmg/nmg_copy.c
===================================================================
--- brlcad/trunk/src/librt/primitives/nmg/nmg_copy.c 2013-03-08 15:32:49 UTC
(rev 54567)
+++ brlcad/trunk/src/librt/primitives/nmg/nmg_copy.c 2013-03-08 15:38:35 UTC
(rev 54568)
@@ -35,15 +35,12 @@
#include "raytrace.h"
-#define NMG_COPY_GETSTRUCT(p, str) (p = (struct str
*)bu_pool_get(sizeof(struct str)))
-
-
static struct nmgregion_a *
nmg_construct_region_a(const struct nmgregion_a *original, genptr_t
*structArray)
{
struct nmgregion_a *ret;
- NMG_COPY_GETSTRUCT(ret, nmgregion_a);
+ NMG_GETSTRUCT(ret, nmgregion_a);
ret->magic = NMG_REGION_A_MAGIC;
@@ -62,7 +59,7 @@
{
struct nmgregion *ret;
- NMG_COPY_GETSTRUCT(ret, nmgregion);
+ NMG_GETSTRUCT(ret, nmgregion);
ret->l.magic = NMG_REGION_MAGIC;
ret->m_p = parent;
@@ -92,7 +89,7 @@
{
struct face_g_plane *ret;
- NMG_COPY_GETSTRUCT(ret, face_g_plane);
+ NMG_GETSTRUCT(ret, face_g_plane);
ret->magic = NMG_FACE_G_PLANE_MAGIC;
@@ -111,7 +108,7 @@
{
struct face_g_snurb *ret;
- NMG_COPY_GETSTRUCT(ret, face_g_snurb);
+ NMG_GETSTRUCT(ret, face_g_snurb);
ret->l.magic = NMG_FACE_G_SNURB_MAGIC;
@@ -151,7 +148,7 @@
{
struct face *ret;
- NMG_COPY_GETSTRUCT(ret, face);
+ NMG_GETSTRUCT(ret, face);
ret->l.magic = NMG_FACE_MAGIC;
ret->fu_p = parent;
@@ -192,7 +189,7 @@
{
struct vertex_g *ret;
- NMG_COPY_GETSTRUCT(ret, vertex_g);
+ NMG_GETSTRUCT(ret, vertex_g);
ret->magic = NMG_VERTEX_G_MAGIC;
@@ -210,7 +207,7 @@
{
struct vertex *ret;
- NMG_COPY_GETSTRUCT(ret, vertex);
+ NMG_GETSTRUCT(ret, vertex);
ret->magic = NMG_VERTEX_MAGIC;
@@ -236,7 +233,7 @@
{
struct vertexuse_a_plane *ret;
- NMG_COPY_GETSTRUCT(ret, vertexuse_a_plane);
+ NMG_GETSTRUCT(ret, vertexuse_a_plane);
ret->magic = NMG_VERTEXUSE_A_PLANE_MAGIC;
@@ -254,7 +251,7 @@
{
struct vertexuse_a_cnurb *ret;
- NMG_COPY_GETSTRUCT(ret, vertexuse_a_cnurb);
+ NMG_GETSTRUCT(ret, vertexuse_a_cnurb);
ret->magic = NMG_VERTEXUSE_A_CNURB_MAGIC;
@@ -272,7 +269,7 @@
{
struct vertexuse *ret;
- NMG_COPY_GETSTRUCT(ret, vertexuse);
+ NMG_GETSTRUCT(ret, vertexuse);
ret->l.magic = NMG_VERTEXUSE_MAGIC;
ret->up.magic_p = parent;
@@ -317,7 +314,7 @@
{
struct edge *ret;
- NMG_COPY_GETSTRUCT(ret, edge);
+ NMG_GETSTRUCT(ret, edge);
ret->magic = NMG_EDGE_MAGIC;
ret->eu_p = parent;
@@ -334,7 +331,7 @@
{
struct edge_g_lseg *ret;
- NMG_COPY_GETSTRUCT(ret, edge_g_lseg);
+ NMG_GETSTRUCT(ret, edge_g_lseg);
ret->l.magic = NMG_EDGE_G_LSEG_MAGIC;
@@ -355,7 +352,7 @@
{
struct edge_g_cnurb *ret;
- NMG_COPY_GETSTRUCT(ret, edge_g_cnurb);
+ NMG_GETSTRUCT(ret, edge_g_cnurb);
ret->l.magic = NMG_EDGE_G_CNURB_MAGIC;
@@ -385,7 +382,7 @@
{
struct edgeuse *ret;
- NMG_COPY_GETSTRUCT(ret, edgeuse);
+ NMG_GETSTRUCT(ret, edgeuse);
ret->l.magic = NMG_EDGEUSE_MAGIC;
@@ -466,7 +463,7 @@
{
struct loop_g *ret;
- NMG_COPY_GETSTRUCT(ret, loop_g);
+ NMG_GETSTRUCT(ret, loop_g);
ret->magic = NMG_LOOP_G_MAGIC;
@@ -485,7 +482,7 @@
{
struct loop *ret;
- NMG_COPY_GETSTRUCT(ret, loop);
+ NMG_GETSTRUCT(ret, loop);
ret->magic = NMG_LOOP_MAGIC;
ret->lu_p = parent;
@@ -509,7 +506,7 @@
{
struct loopuse *ret;
- NMG_COPY_GETSTRUCT(ret, loopuse);
+ NMG_GETSTRUCT(ret, loopuse);
ret->l.magic = NMG_LOOPUSE_MAGIC;
ret->up.magic_p = parent;
@@ -576,7 +573,7 @@
struct faceuse *ret;
const struct loopuse *originalLoopUse;
- NMG_COPY_GETSTRUCT(ret, faceuse);
+ NMG_GETSTRUCT(ret, faceuse);
ret->l.magic = NMG_FACEUSE_MAGIC;
ret->s_p = parent;
@@ -622,7 +619,7 @@
{
struct shell_a *ret;
- NMG_COPY_GETSTRUCT(ret, shell_a);
+ NMG_GETSTRUCT(ret, shell_a);
ret->magic = NMG_SHELL_A_MAGIC;
@@ -644,7 +641,7 @@
const struct loopuse *originalLoopUse;
const struct edgeuse *originalEdgeUse;
- NMG_COPY_GETSTRUCT(ret, shell);
+ NMG_GETSTRUCT(ret, shell);
ret->l.magic = NMG_SHELL_MAGIC;
ret->r_p = parent;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
endpoint security space. For insight on selecting the right partner to
tackle endpoint security challenges, access the full report.
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits