Added methods for checking sizes of various buffer object/texture object pool sizes.

This commit is contained in:
Robert Osfield
2010-12-14 19:29:01 +00:00
parent 4b4b438d44
commit 65f95fe3fe
5 changed files with 119 additions and 20 deletions

View File

@@ -937,6 +937,17 @@ void GLBufferObjectSet::moveToSet(GLBufferObject* to, GLBufferObjectSet* set)
set->addToBack(to);
}
unsigned int GLBufferObjectSet::computeNumGLBufferObjectsInList() const
{
unsigned int num=0;
GLBufferObject* obj = _head;
while(obj!=NULL)
{
++num;
obj = obj->_next;
}
return num;
}
GLBufferObjectManager::GLBufferObjectManager(unsigned int contextID):
@@ -1085,14 +1096,17 @@ void GLBufferObjectManager::newFrame(osg::FrameStamp* fs)
++_numFrames;
}
void GLBufferObjectManager::reportStats()
void GLBufferObjectManager::reportStats(std::ostream& out)
{
double numFrames(_numFrames==0 ? 1.0 : _numFrames);
OSG_NOTICE<<"GLBufferObjectMananger::reportStats()"<<std::endl;
OSG_NOTICE<<" total _numOfGLBufferObjects="<<_numActiveGLBufferObjects<<", _numOrphanedGLBufferObjects="<<_numOrphanedGLBufferObjects<<" _currGLBufferObjectPoolSize="<<_currGLBufferObjectPoolSize<<std::endl;
OSG_NOTICE<<" total _numGenerated="<<_numGenerated<<", _generateTime="<<_generateTime<<", averagePerFrame="<<_generateTime/numFrames*1000.0<<"ms"<<std::endl;
OSG_NOTICE<<" total _numDeleted="<<_numDeleted<<", _deleteTime="<<_deleteTime<<", averagePerFrame="<<_deleteTime/numFrames*1000.0<<"ms"<<std::endl;
OSG_NOTICE<<" total _numApplied="<<_numApplied<<", _applyTime="<<_applyTime<<", averagePerFrame="<<_applyTime/numFrames*1000.0<<"ms"<<std::endl;
out<<"GLBufferObjectMananger::reportStats()"<<std::endl;
out<<" total _numOfGLBufferObjects="<<_numActiveGLBufferObjects<<", _numOrphanedGLBufferObjects="<<_numOrphanedGLBufferObjects<<" _currGLBufferObjectPoolSize="<<_currGLBufferObjectPoolSize<<std::endl;
out<<" total _numGenerated="<<_numGenerated<<", _generateTime="<<_generateTime<<", averagePerFrame="<<_generateTime/numFrames*1000.0<<"ms"<<std::endl;
out<<" total _numDeleted="<<_numDeleted<<", _deleteTime="<<_deleteTime<<", averagePerFrame="<<_deleteTime/numFrames*1000.0<<"ms"<<std::endl;
out<<" total _numApplied="<<_numApplied<<", _applyTime="<<_applyTime<<", averagePerFrame="<<_applyTime/numFrames*1000.0<<"ms"<<std::endl;
recomputeStats(out);
}
void GLBufferObjectManager::resetStats()
@@ -1108,6 +1122,33 @@ void GLBufferObjectManager::resetStats()
_applyTime = 0;
}
void GLBufferObjectManager::recomputeStats(std::ostream& out)
{
out<<"GLBufferObjectMananger::recomputeStats()"<<std::endl;
unsigned int numObjectsInLists = 0;
unsigned int numActive = 0;
unsigned int numOrphans = 0;
unsigned int numPendingOrphans = 0;
unsigned int currentSize = 0;
for(GLBufferObjectSetMap::iterator itr = _glBufferObjectSetMap.begin();
itr != _glBufferObjectSetMap.end();
++itr)
{
GLBufferObjectSet* os = itr->second.get();
numObjectsInLists += os->computeNumGLBufferObjectsInList();
numActive += os->getNumOfGLBufferObjects();
numOrphans += os->getNumOrphans();
numPendingOrphans += os->getNumPendingOrphans();
currentSize += os->getProfile()._size * (numObjectsInLists+numOrphans);
out<<" size="<<os->getProfile()._size
<<", os->computeNumGLBufferObjectsInList()"<<os->computeNumGLBufferObjectsInList()
<<", os->getNumOfGLBufferObjects()"<<os->getNumOfGLBufferObjects()
<<", os->getNumOrphans()"<<os->getNumOrphans()
<<", os->getNumPendingOrphans()"<<os->getNumPendingOrphans()
<<std::endl;
}
out<<" numObjectsInLists="<<numObjectsInLists<<", numActive="<<numActive<<", numOrphans="<<numOrphans<<" currentSize="<<currentSize<<std::endl;
}
osg::ref_ptr<GLBufferObjectManager>& GLBufferObjectManager::getGLBufferObjectManager(unsigned int contextID)