Refactored the view stats.
This commit is contained in:
@@ -72,7 +72,7 @@ void CompositeViewer::constructorInit()
|
||||
_updateVisitor = new osgUtil::UpdateVisitor;
|
||||
_updateVisitor->setFrameStamp(_frameStamp.get());
|
||||
|
||||
setStats(new osg::Stats("CompsiteViewer"));
|
||||
setViewerStats(new osg::Stats("CompsiteViewer"));
|
||||
}
|
||||
|
||||
CompositeViewer::~CompositeViewer()
|
||||
@@ -564,15 +564,15 @@ void CompositeViewer::advance(double simulationTime)
|
||||
_frameStamp->setSimulationTime(simulationTime);
|
||||
}
|
||||
|
||||
if (getStats() && getStats()->collectStats("frame_rate"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("frame_rate"))
|
||||
{
|
||||
// update previous frame stats
|
||||
double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime;
|
||||
getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
|
||||
getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
|
||||
getViewerStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
|
||||
getViewerStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -944,14 +944,14 @@ void CompositeViewer::eventTraversal()
|
||||
|
||||
|
||||
|
||||
if (getStats() && getStats()->collectStats("event"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("event"))
|
||||
{
|
||||
double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1034,14 +1034,14 @@ void CompositeViewer::updateTraversal()
|
||||
|
||||
}
|
||||
|
||||
if (getStats() && getStats()->collectStats("update"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("update"))
|
||||
{
|
||||
double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
#include <osg/PolygonMode>
|
||||
#include <osg/Geometry>
|
||||
#include <osgUtil/Statistics>
|
||||
|
||||
namespace osgViewer
|
||||
{
|
||||
@@ -70,7 +69,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
{
|
||||
if (ea.getKey()==_keyEventTogglesOnScreenStats)
|
||||
{
|
||||
if (viewer->getStats())
|
||||
if (viewer->getViewerStats())
|
||||
{
|
||||
if (!_initialized)
|
||||
{
|
||||
@@ -89,9 +88,9 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
{
|
||||
case(NO_STATS):
|
||||
{
|
||||
viewer->getStats()->collectStats("frame_rate",false);
|
||||
viewer->getStats()->collectStats("event",false);
|
||||
viewer->getStats()->collectStats("update",false);
|
||||
viewer->getViewerStats()->collectStats("frame_rate",false);
|
||||
viewer->getViewerStats()->collectStats("event",false);
|
||||
viewer->getViewerStats()->collectStats("update",false);
|
||||
|
||||
for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin();
|
||||
itr != cameras.end();
|
||||
@@ -106,7 +105,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
}
|
||||
|
||||
viewer->getStats()->collectStats("scene",false);
|
||||
viewer->getViewerStats()->collectStats("scene",false);
|
||||
|
||||
_camera->setNodeMask(0x0);
|
||||
_switch->setAllChildrenOff();
|
||||
@@ -114,7 +113,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
case(FRAME_RATE):
|
||||
{
|
||||
viewer->getStats()->collectStats("frame_rate",true);
|
||||
viewer->getViewerStats()->collectStats("frame_rate",true);
|
||||
|
||||
_camera->setNodeMask(0xffffffff);
|
||||
_switch->setValue(_frameRateChildNum, true);
|
||||
@@ -136,8 +135,8 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
}
|
||||
|
||||
viewer->getStats()->collectStats("event",true);
|
||||
viewer->getStats()->collectStats("update",true);
|
||||
viewer->getViewerStats()->collectStats("event",true);
|
||||
viewer->getViewerStats()->collectStats("update",true);
|
||||
|
||||
for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin();
|
||||
itr != cameras.end();
|
||||
@@ -174,7 +173,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
_camera->setNodeMask(0xffffffff);
|
||||
_switch->setValue(_viewerSceneChildNum, true);
|
||||
|
||||
viewer->getStats()->collectStats("scene",true);
|
||||
viewer->getViewerStats()->collectStats("scene",true);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -188,12 +187,12 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
if (ea.getKey()==_keyEventPrintsOutStats)
|
||||
{
|
||||
if (viewer->getStats())
|
||||
if (viewer->getViewerStats())
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<std::endl<<"Stats report:"<<std::endl;
|
||||
typedef std::vector<osg::Stats*> StatsList;
|
||||
StatsList statsList;
|
||||
statsList.push_back(viewer->getStats());
|
||||
statsList.push_back(viewer->getViewerStats());
|
||||
|
||||
osgViewer::ViewerBase::Contexts contexts;
|
||||
viewer->getContexts(contexts);
|
||||
@@ -213,7 +212,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = viewer->getStats()->getEarliestFrameNumber(); i<= viewer->getStats()->getLatestFrameNumber()-1; ++i)
|
||||
for(int i = viewer->getViewerStats()->getEarliestFrameNumber(); i<= viewer->getViewerStats()->getLatestFrameNumber()-1; ++i)
|
||||
{
|
||||
for(StatsList::iterator itr = statsList.begin();
|
||||
itr != statsList.end();
|
||||
@@ -386,7 +385,7 @@ struct CameraSceneStatsTextDrawCallback : public virtual osg::Drawable::DrawCall
|
||||
if (stats->getAttribute(frameNumber, str, value)) \
|
||||
viewStr << std::setw(7) << value << std::endl; \
|
||||
else \
|
||||
viewStr << std::setw(7) << "no value" << std::endl; \
|
||||
viewStr << std::setw(7) << "." << std::endl; \
|
||||
|
||||
double value = 0.0;
|
||||
|
||||
@@ -444,13 +443,9 @@ struct ViewSceneStatsTextDrawCallback : public virtual osg::Drawable::DrawCallba
|
||||
if (delta > 200) // update every 100ms
|
||||
{
|
||||
_tickLastUpdated = tick;
|
||||
osg::ref_ptr<osg::Node> sceneRoot = _view.valid() ? _view->getScene()->getSceneData() : 0;
|
||||
|
||||
if (sceneRoot.valid())
|
||||
osg::Stats* stats = _view->getStats();
|
||||
if (stats)
|
||||
{
|
||||
osgUtil::StatsVisitor statsVisitor;
|
||||
sceneRoot->accept(statsVisitor);
|
||||
|
||||
std::ostringstream viewStr;
|
||||
viewStr.clear();
|
||||
viewStr.setf(std::ios::left,std::ios::adjustfield);
|
||||
@@ -465,33 +460,35 @@ struct ViewSceneStatsTextDrawCallback : public virtual osg::Drawable::DrawCallba
|
||||
|
||||
viewStr << std::endl;
|
||||
|
||||
unsigned int unique_primitives = 0;
|
||||
osgUtil::Statistics::PrimitiveCountMap::iterator pcmitr;
|
||||
for(pcmitr = statsVisitor._uniqueStats.GetPrimitivesBegin();
|
||||
pcmitr != statsVisitor._uniqueStats.GetPrimitivesEnd();
|
||||
++pcmitr)
|
||||
int frameNumber = renderInfo.getState()->getFrameStamp()->getFrameNumber();
|
||||
// if (!(renderer->getGraphicsThreadDoesCull()))
|
||||
{
|
||||
unique_primitives += pcmitr->second;
|
||||
--frameNumber;
|
||||
}
|
||||
|
||||
#define STATS_ATTRIBUTE_PAIR(str1, str2) \
|
||||
if (stats->getAttribute(frameNumber, str1, value)) \
|
||||
viewStr << std::setw(10) << value; \
|
||||
else \
|
||||
viewStr << std::setw(10) << "."; \
|
||||
if (stats->getAttribute(frameNumber, str2, value)) \
|
||||
viewStr << std::setw(10) << value << std::endl; \
|
||||
else \
|
||||
viewStr << std::setw(10) << "." << std::endl; \
|
||||
|
||||
unsigned int instanced_primitives = 0;
|
||||
for(pcmitr = statsVisitor._instancedStats.GetPrimitivesBegin();
|
||||
pcmitr != statsVisitor._instancedStats.GetPrimitivesEnd();
|
||||
++pcmitr)
|
||||
{
|
||||
instanced_primitives += pcmitr->second;
|
||||
}
|
||||
double value = 0.0;
|
||||
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique StateSet","Number of instanced Stateset")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Group","Number of instanced Group")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Transform","Number of instanced Transform")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique LOD","Number of instanced LOD")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Switch","Number of instanced Switch")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Geode","Number of instanced Geode")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Drawable","Number of instanced Drawable")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Geometry","Number of instanced Geometry")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Vertices","Number of instanced Vertices")
|
||||
STATS_ATTRIBUTE_PAIR("Number of unique Primitives","Number of instanced Primitives")
|
||||
|
||||
viewStr << std::setw(10) << statsVisitor._statesetSet.size() << std::setw(10) << statsVisitor._numInstancedStateSet << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._groupSet.size() << std::setw(10) << statsVisitor._numInstancedGroup << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._transformSet.size() << std::setw(10) << statsVisitor._numInstancedTransform << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._lodSet.size() << std::setw(10) << statsVisitor._numInstancedLOD << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._switchSet.size() << std::setw(10) << statsVisitor._numInstancedSwitch << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._geodeSet.size() << std::setw(10) << statsVisitor._numInstancedGeode << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._drawableSet.size() << std::setw(10) << statsVisitor._numInstancedDrawable << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._geometrySet.size() << std::setw(10) << statsVisitor._numInstancedGeometry << std::endl;
|
||||
viewStr << std::setw(10) << statsVisitor._uniqueStats._vertexCount << std::setw(10) << statsVisitor._instancedStats._vertexCount << std::endl;
|
||||
viewStr << std::setw(10) << unique_primitives << std::setw(10) << instanced_primitives << std::endl;
|
||||
|
||||
text->setText(viewStr.str());
|
||||
}
|
||||
@@ -1050,7 +1047,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
frameRateValue->setPosition(pos);
|
||||
frameRateValue->setText("0.0");
|
||||
|
||||
frameRateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0));
|
||||
frameRateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Frame rate",-1, true, 1.0));
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
|
||||
@@ -1119,11 +1116,11 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
eventValue->setPosition(pos);
|
||||
eventValue->setText("0.0");
|
||||
|
||||
eventValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0));
|
||||
eventValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Event traversal time taken",-1, false, 1000.0));
|
||||
|
||||
pos.x() = startBlocks;
|
||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getViewerStats(), viewer->getViewerStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
|
||||
geode->addDrawable(geometry);
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
@@ -1152,11 +1149,11 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
updateValue->setPosition(pos);
|
||||
updateValue->setText("0.0");
|
||||
|
||||
updateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0));
|
||||
updateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Update traversal time taken",-1, false, 1000.0));
|
||||
|
||||
pos.x() = startBlocks;
|
||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getViewerStats(), viewer->getViewerStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
|
||||
geode->addDrawable(geometry);
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
@@ -1169,7 +1166,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
citr != cameras.end();
|
||||
++citr)
|
||||
{
|
||||
group->addChild(createCameraTimeStats(font, pos, startBlocks, acquireGPUStats, characterSize, viewer->getStats(), *citr));
|
||||
group->addChild(createCameraTimeStats(font, pos, startBlocks, acquireGPUStats, characterSize, viewer->getViewerStats(), *citr));
|
||||
}
|
||||
|
||||
// add frame ticks
|
||||
@@ -1187,7 +1184,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
geode->addDrawable(ticks);
|
||||
|
||||
osg::Geometry* frameMarkers = createFrameMarkers(pos, height, colourTicks, _numBlocks + 1);
|
||||
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getStats(), 0, _numBlocks + 1));
|
||||
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getViewerStats(), 0, _numBlocks + 1));
|
||||
geode->addDrawable(frameMarkers);
|
||||
|
||||
pos.x() = leftPos;
|
||||
@@ -1203,17 +1200,17 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
|
||||
StatsGraph* statsGraph = new StatsGraph(pos, width, height);
|
||||
group->addChild(statsGraph);
|
||||
|
||||
statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorFR, 100, "Frame rate");
|
||||
statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorEvent, 0.016, "Event traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorUpdate, 0.016, "Update traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorFR, 100, "Frame rate");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorEvent, 0.016, "Event traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorUpdate, 0.016, "Update traversal time taken");
|
||||
|
||||
for(ViewerBase::Cameras::iterator citr = cameras.begin();
|
||||
citr != cameras.end();
|
||||
++citr)
|
||||
{
|
||||
statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorCull, 0.016, "Cull traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorDraw, 0.016, "Draw traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorGPU, 0.016, "GPU draw time taken");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorCull, 0.016, "Cull traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorDraw, 0.016, "Draw traversal time taken");
|
||||
statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorGPU, 0.016, "GPU draw time taken");
|
||||
}
|
||||
|
||||
geode->addDrawable(createBackgroundRectangle( pos + osg::Vec3(-backgroundMargin, backgroundMargin, 0),
|
||||
|
||||
@@ -177,7 +177,7 @@ void Viewer::constructorInit()
|
||||
_updateVisitor = new osgUtil::UpdateVisitor;
|
||||
_updateVisitor->setFrameStamp(_frameStamp.get());
|
||||
|
||||
setStats(new osg::Stats("Viewer"));
|
||||
setViewerStats(new osg::Stats("Viewer"));
|
||||
}
|
||||
|
||||
Viewer::~Viewer()
|
||||
@@ -516,15 +516,15 @@ void Viewer::advance(double simulationTime)
|
||||
_frameStamp->setSimulationTime(simulationTime);
|
||||
}
|
||||
|
||||
if (getStats() && getStats()->collectStats("frame_rate"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("frame_rate"))
|
||||
{
|
||||
// update previous frame stats
|
||||
double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime;
|
||||
getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
|
||||
getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
|
||||
getViewerStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
|
||||
getViewerStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
|
||||
}
|
||||
|
||||
if (osg::Referenced::getDeleteHandler())
|
||||
@@ -854,14 +854,14 @@ void Viewer::eventTraversal()
|
||||
}
|
||||
}
|
||||
|
||||
if (getStats() && getStats()->collectStats("event"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("event"))
|
||||
{
|
||||
double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -926,14 +926,14 @@ void Viewer::updateTraversal()
|
||||
|
||||
updateSlaves();
|
||||
|
||||
if (getStats() && getStats()->collectStats("update"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("update"))
|
||||
{
|
||||
double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
|
||||
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
|
||||
getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <osgUtil/Optimizer>
|
||||
#include <osgUtil/IntersectionVisitor>
|
||||
#include <osgUtil/Statistics>
|
||||
|
||||
static osg::ApplicationUsageProxy ViewerBase_e0(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_CONFIG_FILE <filename>","Specify a viewer configuration file to load by default.");
|
||||
static osg::ApplicationUsageProxy ViewerBase_e1(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_THREADING <value>","Set the threading model using by Viewer, <value> can be SingleThreaded, CullDrawThreadPerContext, DrawThreadPerContext or CullThreadPerCameraDrawThreadPerContext.");
|
||||
@@ -639,6 +640,66 @@ void ViewerBase::renderingTraversals()
|
||||
|
||||
osg::FrameStamp* frameStamp = getViewerFrameStamp();
|
||||
|
||||
if (getViewerStats() && getViewerStats()->collectStats("scene"))
|
||||
{
|
||||
int frameNumber = frameStamp ? frameStamp->getFrameNumber() : 0;
|
||||
|
||||
Views views;
|
||||
getViews(views);
|
||||
for(Views::iterator vitr = views.begin();
|
||||
vitr != views.end();
|
||||
++vitr)
|
||||
{
|
||||
View* view = *vitr;
|
||||
osg::Stats* stats = view->getStats();
|
||||
osg::Node* sceneRoot = view->getSceneData();
|
||||
if (sceneRoot)
|
||||
{
|
||||
osgUtil::StatsVisitor statsVisitor;
|
||||
sceneRoot->accept(statsVisitor);
|
||||
|
||||
unsigned int unique_primitives = 0;
|
||||
osgUtil::Statistics::PrimitiveCountMap::iterator pcmitr;
|
||||
for(pcmitr = statsVisitor._uniqueStats.GetPrimitivesBegin();
|
||||
pcmitr != statsVisitor._uniqueStats.GetPrimitivesEnd();
|
||||
++pcmitr)
|
||||
{
|
||||
unique_primitives += pcmitr->second;
|
||||
}
|
||||
|
||||
stats->setAttribute(frameNumber, "Number of unique StateSet", static_cast<double>(statsVisitor._statesetSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Group", static_cast<double>(statsVisitor._groupSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Transform", static_cast<double>(statsVisitor._transformSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique LOD", static_cast<double>(statsVisitor._lodSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Switch", static_cast<double>(statsVisitor._switchSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Geode", static_cast<double>(statsVisitor._geodeSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Drawable", static_cast<double>(statsVisitor._drawableSet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Geometry", static_cast<double>(statsVisitor._geometrySet.size()));
|
||||
stats->setAttribute(frameNumber, "Number of unique Vertices", static_cast<double>(statsVisitor._uniqueStats._vertexCount));
|
||||
stats->setAttribute(frameNumber, "Number of unique Primitives", static_cast<double>(unique_primitives));
|
||||
|
||||
unsigned int instanced_primitives = 0;
|
||||
for(pcmitr = statsVisitor._instancedStats.GetPrimitivesBegin();
|
||||
pcmitr != statsVisitor._instancedStats.GetPrimitivesEnd();
|
||||
++pcmitr)
|
||||
{
|
||||
instanced_primitives += pcmitr->second;
|
||||
}
|
||||
|
||||
stats->setAttribute(frameNumber, "Number of instanced Stateset", static_cast<double>(statsVisitor._numInstancedStateSet));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Group", static_cast<double>(statsVisitor._numInstancedGroup));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Transform", static_cast<double>(statsVisitor._numInstancedTransform));
|
||||
stats->setAttribute(frameNumber, "Number of instanced LOD", static_cast<double>(statsVisitor._numInstancedLOD));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Switch", static_cast<double>(statsVisitor._numInstancedSwitch));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Geode", static_cast<double>(statsVisitor._numInstancedGeode));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Drawable", static_cast<double>(statsVisitor._numInstancedDrawable));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Geometry", static_cast<double>(statsVisitor._numInstancedGeometry));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Vertices", static_cast<double>(statsVisitor._instancedStats._vertexCount));
|
||||
stats->setAttribute(frameNumber, "Number of instanced Primitives", static_cast<double>(instanced_primitives));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scenes scenes;
|
||||
getScenes(scenes);
|
||||
|
||||
@@ -756,14 +817,14 @@ void ViewerBase::renderingTraversals()
|
||||
releaseContext();
|
||||
}
|
||||
|
||||
if (getStats() && getStats()->collectStats("update"))
|
||||
if (getViewerStats() && getViewerStats()->collectStats("update"))
|
||||
{
|
||||
double endRenderingTraversals = elapsedTime();
|
||||
|
||||
// update current frames stats
|
||||
getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals);
|
||||
getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals);
|
||||
getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals);
|
||||
getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals);
|
||||
getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals);
|
||||
getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <osg/Matrix>
|
||||
#include <osg/Matrixd>
|
||||
#include <osg/Object>
|
||||
#include <osg/Stats>
|
||||
#include <osg/View>
|
||||
|
||||
// Must undefine IN and OUT macros defined in Windows headers
|
||||
@@ -74,6 +75,21 @@ BEGIN_OBJECT_REFLECTOR(osg::View)
|
||||
__void__take__View_R1,
|
||||
"Take all the settings, Camera and Slaves from the passed in view, leaving it empty. ",
|
||||
"");
|
||||
I_Method1(void, setStats, IN, osg::Stats *, stats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setStats__osg_Stats_P1,
|
||||
"Set the Stats object used for collect various frame related timing and scene graph stats. ",
|
||||
"");
|
||||
I_Method0(osg::Stats *, getStats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__osg_Stats_P1__getStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method0(const osg::Stats *, getStats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_osg_Stats_P1__getStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method1(void, setLightingMode, IN, osg::View::LightingMode, lightingMode,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setLightingMode__LightingMode,
|
||||
@@ -204,6 +220,9 @@ BEGIN_OBJECT_REFLECTOR(osg::View)
|
||||
0,
|
||||
0,
|
||||
__bool__removeSlave__unsigned_int);
|
||||
I_SimpleProperty(osg::Stats *, Stats,
|
||||
__osg_Stats_P1__getStats,
|
||||
__void__setStats__osg_Stats_P1);
|
||||
END_REFLECTOR
|
||||
|
||||
BEGIN_VALUE_REFLECTOR(osg::View::Slave)
|
||||
|
||||
@@ -207,15 +207,25 @@ BEGIN_OBJECT_REFLECTOR(osgUtil::Statistics)
|
||||
__void__add__C5_Statistics_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method0(osgUtil::Statistics::PrimitiveCountMap &, getPrimitiveCountMap,
|
||||
Properties::NON_VIRTUAL,
|
||||
__PrimitiveCountMap_R1__getPrimitiveCountMap,
|
||||
"",
|
||||
"");
|
||||
I_Method0(const osgUtil::Statistics::PrimitiveCountMap &, getPrimitiveCountMap,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_PrimitiveCountMap_R1__getPrimitiveCountMap,
|
||||
"",
|
||||
"");
|
||||
I_Method0(osgUtil::Statistics::PrimitiveCountMap::iterator, GetPrimitivesBegin,
|
||||
Properties::NON_VIRTUAL,
|
||||
__PrimitiveCountMap_iterator__GetPrimitivesBegin,
|
||||
"",
|
||||
"deprecated ",
|
||||
"");
|
||||
I_Method0(osgUtil::Statistics::PrimitiveCountMap::iterator, GetPrimitivesEnd,
|
||||
Properties::NON_VIRTUAL,
|
||||
__PrimitiveCountMap_iterator__GetPrimitivesEnd,
|
||||
"",
|
||||
"deprecated ",
|
||||
"");
|
||||
I_SimpleProperty(int, BinNo,
|
||||
0,
|
||||
@@ -226,6 +236,9 @@ BEGIN_OBJECT_REFLECTOR(osgUtil::Statistics)
|
||||
I_SimpleProperty(int, Depth,
|
||||
0,
|
||||
__void__setDepth__int);
|
||||
I_SimpleProperty(osgUtil::Statistics::PrimitiveCountMap &, PrimitiveCountMap,
|
||||
__PrimitiveCountMap_R1__getPrimitiveCountMap,
|
||||
0);
|
||||
I_SimpleProperty(osgUtil::Statistics::StatsType, Type,
|
||||
0,
|
||||
__void__setType__StatsType);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <osg/CopyOp>
|
||||
#include <osg/FrameStamp>
|
||||
#include <osg/Object>
|
||||
#include <osg/Stats>
|
||||
#include <osg/Timer>
|
||||
#include <osgViewer/CompositeViewer>
|
||||
#include <osgViewer/View>
|
||||
@@ -75,6 +76,21 @@ BEGIN_OBJECT_REFLECTOR(osgViewer::CompositeViewer)
|
||||
__bool__readConfiguration__C5_std_string_R1,
|
||||
"read the viewer configuration from a configuration file. ",
|
||||
"");
|
||||
I_Method1(void, setViewerStats, IN, osg::Stats *, stats,
|
||||
Properties::VIRTUAL,
|
||||
__void__setViewerStats__osg_Stats_P1,
|
||||
"Set the Stats object used for collect various frame related timing and scene graph stats. ",
|
||||
"");
|
||||
I_Method0(osg::Stats *, getViewerStats,
|
||||
Properties::VIRTUAL,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method0(const osg::Stats *, getViewerStats,
|
||||
Properties::VIRTUAL,
|
||||
__C5_osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method1(void, addView, IN, osgViewer::View *, view,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__addView__osgViewer_View_P1,
|
||||
@@ -257,5 +273,8 @@ BEGIN_OBJECT_REFLECTOR(osgViewer::CompositeViewer)
|
||||
I_SimpleProperty(osg::FrameStamp *, ViewerFrameStamp,
|
||||
__osg_FrameStamp_P1__getViewerFrameStamp,
|
||||
0);
|
||||
I_SimpleProperty(osg::Stats *, ViewerStats,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
__void__setViewerStats__osg_Stats_P1);
|
||||
END_REFLECTOR
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <osg/FrameStamp>
|
||||
#include <osg/Node>
|
||||
#include <osg/Object>
|
||||
#include <osg/Stats>
|
||||
#include <osg/Timer>
|
||||
#include <osgViewer/GraphicsWindow>
|
||||
#include <osgViewer/View>
|
||||
@@ -77,6 +78,21 @@ BEGIN_OBJECT_REFLECTOR(osgViewer::Viewer)
|
||||
__void__take__View_R1,
|
||||
"Take all the settings, Camera and Slaves from the passed in view(er), leaving it empty. ",
|
||||
"");
|
||||
I_Method1(void, setViewerStats, IN, osg::Stats *, stats,
|
||||
Properties::VIRTUAL,
|
||||
__void__setViewerStats__osg_Stats_P1,
|
||||
"Set the Stats object used for collect various frame related timing and scene graph stats. ",
|
||||
"");
|
||||
I_Method0(osg::Stats *, getViewerStats,
|
||||
Properties::VIRTUAL,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method0(const osg::Stats *, getViewerStats,
|
||||
Properties::VIRTUAL,
|
||||
__C5_osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method1(bool, readConfiguration, IN, const std::string &, filename,
|
||||
Properties::VIRTUAL,
|
||||
__bool__readConfiguration__C5_std_string_R1,
|
||||
@@ -219,5 +235,8 @@ BEGIN_OBJECT_REFLECTOR(osgViewer::Viewer)
|
||||
I_SimpleProperty(osg::FrameStamp *, ViewerFrameStamp,
|
||||
__osg_FrameStamp_P1__getViewerFrameStamp,
|
||||
0);
|
||||
I_SimpleProperty(osg::Stats *, ViewerStats,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
__void__setViewerStats__osg_Stats_P1);
|
||||
END_REFLECTOR
|
||||
|
||||
|
||||
@@ -70,19 +70,19 @@ BEGIN_ABSTRACT_OBJECT_REFLECTOR(osgViewer::ViewerBase)
|
||||
____ViewerBase__C5_ViewerBase_R1,
|
||||
"",
|
||||
"");
|
||||
I_Method1(void, setStats, IN, osg::Stats *, stats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__void__setStats__osg_Stats_P1,
|
||||
I_Method1(void, setViewerStats, IN, osg::Stats *, stats,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__void__setViewerStats__osg_Stats_P1,
|
||||
"Set the Stats object used for collect various frame related timing and scene graph stats. ",
|
||||
"");
|
||||
I_Method0(osg::Stats *, getStats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__osg_Stats_P1__getStats,
|
||||
I_Method0(osg::Stats *, getViewerStats,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method0(const osg::Stats *, getStats,
|
||||
Properties::NON_VIRTUAL,
|
||||
__C5_osg_Stats_P1__getStats,
|
||||
I_Method0(const osg::Stats *, getViewerStats,
|
||||
Properties::PURE_VIRTUAL,
|
||||
__C5_osg_Stats_P1__getViewerStats,
|
||||
"Get the Viewers Stats object. ",
|
||||
"");
|
||||
I_Method1(bool, readConfiguration, IN, const std::string &, filename,
|
||||
@@ -374,9 +374,6 @@ BEGIN_ABSTRACT_OBJECT_REFLECTOR(osgViewer::ViewerBase)
|
||||
I_SimpleProperty(bool, ReleaseContextAtEndOfFrameHint,
|
||||
__bool__getReleaseContextAtEndOfFrameHint,
|
||||
__void__setReleaseContextAtEndOfFrameHint__bool);
|
||||
I_SimpleProperty(osg::Stats *, Stats,
|
||||
__osg_Stats_P1__getStats,
|
||||
__void__setStats__osg_Stats_P1);
|
||||
I_SimpleProperty(osgViewer::ViewerBase::ThreadingModel, ThreadingModel,
|
||||
__ThreadingModel__getThreadingModel,
|
||||
__void__setThreadingModel__ThreadingModel);
|
||||
@@ -389,6 +386,9 @@ BEGIN_ABSTRACT_OBJECT_REFLECTOR(osgViewer::ViewerBase)
|
||||
I_SimpleProperty(osg::FrameStamp *, ViewerFrameStamp,
|
||||
__osg_FrameStamp_P1__getViewerFrameStamp,
|
||||
0);
|
||||
I_SimpleProperty(osg::Stats *, ViewerStats,
|
||||
__osg_Stats_P1__getViewerStats,
|
||||
__void__setViewerStats__osg_Stats_P1);
|
||||
END_REFLECTOR
|
||||
|
||||
STD_VECTOR_REFLECTOR(std::vector< OpenThreads::Thread * >)
|
||||
|
||||
Reference in New Issue
Block a user