From Stephan Huber, add basic support for CompositeViewer in StatsHandler

This commit is contained in:
Robert Osfield
2007-09-29 11:41:57 +00:00
parent 41ce67600e
commit 4ef1864432
8 changed files with 226 additions and 130 deletions

View File

@@ -131,6 +131,7 @@ void CompositeViewer::addView(osgViewer::View* view)
_views.push_back(view);
view->setFrameStamp(_frameStamp.get());
view->setStats(new osg::Stats("CompositeViewer"));
if (threadsWereRuinning) startThreading();
}
@@ -661,6 +662,10 @@ void CompositeViewer::frame(double simulationTime)
void CompositeViewer::advance(double simulationTime)
{
if (_done) return;
double prevousReferenceTime = _frameStamp->getReferenceTime();
int previousFrameNumber = _frameStamp->getFrameNumber();
_frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1);
@@ -674,6 +679,24 @@ void CompositeViewer::advance(double simulationTime)
{
_frameStamp->setSimulationTime(simulationTime);
}
for(Views::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
if ((*vitr)->getStats() && (*vitr)->getStats()->collectStats("frame_rate"))
{
// update previous frame stats
double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime;
(*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
(*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
// update current frames stats
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
}
}
}
void CompositeViewer::setCameraWithFocus(osg::Camera* camera)
@@ -703,6 +726,8 @@ void CompositeViewer::eventTraversal()
if (_done) return;
if (_views.empty()) return;
double beginEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// osg::notify(osg::NOTICE)<<"CompositeViewer::frameEventTraversal()."<<std::endl;
@@ -1016,6 +1041,24 @@ void CompositeViewer::eventTraversal()
}
}
// stats:
for(Views::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
if ((*vitr)->getStats() && (*vitr)->getStats()->collectStats("event"))
{
double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
}
}
}
@@ -1041,6 +1084,8 @@ void CompositeViewer::removeUpdateOperation(osg::Operation* operation)
void CompositeViewer::updateTraversal()
{
if (_done) return;
double beginUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
Scenes scenes;
getScenes(scenes);
@@ -1101,7 +1146,21 @@ void CompositeViewer::updateTraversal()
view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix());
}
view->updateSlaves();
// stats
if (view->getStats() && view->getStats()->collectStats("update"))
{
double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
}
}
}