what is _pfCuller doing here? (2nd try)

New Message Reply Date view Thread view Subject view Author view

Daniel Williams (dwilliams++at++sarnoff.com)
Thu, 13 Aug 1998 11:50:33 -0400


I sent this last Friday and haven't gotten any response
from the Performer team so I'm trying again:

My application manages hundreds to thousands of entities in my
pfScene. Each entity is represented by a subclass from pfGroup that
contains a geode with two geosets and a draw callback.

I'm trying to understand the memory allocation behavior of my
application and have discovered that a pool of arena memory is being
accumulated at the following location:

        pfMemory::operator new(unsigned int,unsigned int,void*)
[pfMemory.C:105]
        pfMemory::malloc(unsigned int) [pfMemory.C:480]
        _pfCuller::pf_getFuncs(void) [pfCuller.C:637]
        _pfCuller::pf_flushStackState(void) [pfCuller.C:426]
        _pfCuller::add(pfGeoSet*) [pfCuller.C:369]
        pfGeode::nb_cull(int,int,_pfCuller*) [pfGeode.C:269]
        pfGroup::nb_cull(int,int,_pfCuller*) [pfGroup.C:306]
        pfScene::nb_cull(int,int,_pfCuller*) [pfScene.C:293]
        _pfCuller::nb_cull(void) [pfCuller.C:208]
        beginDraw(int) [pfProcess.C:6293]
        pfDraw [pfProcess.C:6347]
        pfDWChannel::drawCallback(pfChannel*,void*)
[pfDWChannel.c++:225]
        pfChannel::pf_callDrawFunc(void) [pfChannel.C:2194]
        doDraw(pfChannel*,pfPipe*,int*) [pfProcess.C:6200]
        appCullDraw(int) [pfProcess.C:3944]
        pfFrame [pfProcess.C:4400]

The memory seems to be associated with pfChannel because usage doubles
if I run in stereo.

This memory is not freed when I delete the entities; instead, it seems
to be reused for subsequent entities. It is allocated in binary
exponential form:

        11296 bytes allocated in 2 blocks
        22592 bytes allocated in 4 blocks
        45184 bytes allocated in 8 blocks
        90368 bytes allocated in 16 blocks
        180736 bytes allocated in 32 blocks
        361472 bytes allocated in 64 blocks

This is worrying because if my calculations are correct, the memory
used is (5648 bytes) * number-of-entities * number-of-channels; if I
have 5000 entities on a 3-pipe stereo machine my usage is 161 MB for
something I know nothing about.

Can someone peer into the pfSourceCode and tell me what _pfCuller is
doing in this case and how I might avoid it?

Thanks,
Dan

--
Daniel Williams, Systems & Scientific Software
Voice: (215) 885-1573 Email: sass++at++acm.com
Independent Consultant to: Sarnoff Corporation
Voice: (609) 734-2153 Email: dwilliams++at++sarnoff.com

New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Thu Aug 13 1998 - 08:50:39 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.