Show
Ignore:
Timestamp:
01/27/09 14:23:20 (6 years ago)
Author:
robert
Message:

Refactored the view stats.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgViewer/StatsHandler.cpp

    r9552 r9554  
    2525#include <osg/PolygonMode> 
    2626#include <osg/Geometry> 
    27 #include <osgUtil/Statistics> 
    2827 
    2928namespace osgViewer 
     
    7170            if (ea.getKey()==_keyEventTogglesOnScreenStats) 
    7271            { 
    73                 if (viewer->getStats()) 
     72                if (viewer->getViewerStats()) 
    7473                { 
    7574                    if (!_initialized) 
     
    9089                        case(NO_STATS): 
    9190                        { 
    92                             viewer->getStats()->collectStats("frame_rate",false); 
    93                             viewer->getStats()->collectStats("event",false); 
    94                             viewer->getStats()->collectStats("update",false); 
     91                            viewer->getViewerStats()->collectStats("frame_rate",false); 
     92                            viewer->getViewerStats()->collectStats("event",false); 
     93                            viewer->getViewerStats()->collectStats("update",false); 
    9594 
    9695                            for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin(); 
     
    107106                            } 
    108107                             
    109                             viewer->getStats()->collectStats("scene",false); 
     108                            viewer->getViewerStats()->collectStats("scene",false); 
    110109 
    111110                            _camera->setNodeMask(0x0);  
     
    115114                        case(FRAME_RATE): 
    116115                        { 
    117                             viewer->getStats()->collectStats("frame_rate",true); 
     116                            viewer->getViewerStats()->collectStats("frame_rate",true); 
    118117                             
    119118                            _camera->setNodeMask(0xffffffff); 
     
    137136                            } 
    138137                         
    139                             viewer->getStats()->collectStats("event",true); 
    140                             viewer->getStats()->collectStats("update",true); 
     138                            viewer->getViewerStats()->collectStats("event",true); 
     139                            viewer->getViewerStats()->collectStats("update",true); 
    141140 
    142141                            for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin(); 
     
    175174                            _switch->setValue(_viewerSceneChildNum, true); 
    176175 
    177                             viewer->getStats()->collectStats("scene",true); 
     176                            viewer->getViewerStats()->collectStats("scene",true); 
    178177 
    179178                            break; 
     
    189188            if (ea.getKey()==_keyEventPrintsOutStats) 
    190189            { 
    191                 if (viewer->getStats()) 
     190                if (viewer->getViewerStats()) 
    192191                { 
    193192                    osg::notify(osg::NOTICE)<<std::endl<<"Stats report:"<<std::endl; 
    194193                    typedef std::vector<osg::Stats*> StatsList; 
    195194                    StatsList statsList; 
    196                     statsList.push_back(viewer->getStats()); 
     195                    statsList.push_back(viewer->getViewerStats()); 
    197196 
    198197                    osgViewer::ViewerBase::Contexts contexts; 
     
    214213                    } 
    215214 
    216                     for(int i = viewer->getStats()->getEarliestFrameNumber(); i<= viewer->getStats()->getLatestFrameNumber()-1; ++i) 
     215                    for(int i = viewer->getViewerStats()->getEarliestFrameNumber(); i<= viewer->getViewerStats()->getLatestFrameNumber()-1; ++i) 
    217216                    { 
    218217                        for(StatsList::iterator itr = statsList.begin(); 
     
    387386                        viewStr << std::setw(7) << value << std::endl; \ 
    388387                    else \ 
    389                         viewStr << std::setw(7) << "no value" << std::endl; \ 
     388                        viewStr << std::setw(7) << "." << std::endl; \ 
    390389 
    391390                double value = 0.0; 
     
    445444        { 
    446445            _tickLastUpdated = tick; 
    447             osg::ref_ptr<osg::Node> sceneRoot = _view.valid() ? _view->getScene()->getSceneData() : 0; 
    448  
    449             if (sceneRoot.valid()) 
    450             { 
    451                 osgUtil::StatsVisitor statsVisitor; 
    452                 sceneRoot->accept(statsVisitor); 
    453  
     446            osg::Stats* stats = _view->getStats(); 
     447            if (stats) 
     448            { 
    454449                std::ostringstream viewStr; 
    455450                viewStr.clear(); 
     
    466461                viewStr << std::endl; 
    467462 
    468                 unsigned int unique_primitives = 0; 
    469                 osgUtil::Statistics::PrimitiveCountMap::iterator pcmitr; 
    470                 for(pcmitr = statsVisitor._uniqueStats.GetPrimitivesBegin(); 
    471                     pcmitr != statsVisitor._uniqueStats.GetPrimitivesEnd(); 
    472                     ++pcmitr) 
     463                int frameNumber = renderInfo.getState()->getFrameStamp()->getFrameNumber(); 
     464                // if (!(renderer->getGraphicsThreadDoesCull())) 
    473465                { 
    474                     unique_primitives += pcmitr->second; 
     466                    --frameNumber; 
    475467                } 
    476  
    477                 unsigned int instanced_primitives = 0; 
    478                 for(pcmitr = statsVisitor._instancedStats.GetPrimitivesBegin(); 
    479                     pcmitr != statsVisitor._instancedStats.GetPrimitivesEnd(); 
    480                     ++pcmitr) 
    481                 { 
    482                     instanced_primitives += pcmitr->second; 
    483                 } 
    484  
    485                 viewStr << std::setw(10) << statsVisitor._statesetSet.size()       << std::setw(10) << statsVisitor._numInstancedStateSet << std::endl; 
    486                 viewStr << std::setw(10) << statsVisitor._groupSet.size()          << std::setw(10) << statsVisitor._numInstancedGroup << std::endl; 
    487                 viewStr << std::setw(10) << statsVisitor._transformSet.size()      << std::setw(10) << statsVisitor._numInstancedTransform << std::endl; 
    488                 viewStr << std::setw(10) << statsVisitor._lodSet.size()            << std::setw(10) << statsVisitor._numInstancedLOD << std::endl; 
    489                 viewStr << std::setw(10) << statsVisitor._switchSet.size()         << std::setw(10) << statsVisitor._numInstancedSwitch << std::endl; 
    490                 viewStr << std::setw(10) << statsVisitor._geodeSet.size()          << std::setw(10) << statsVisitor._numInstancedGeode << std::endl; 
    491                 viewStr << std::setw(10) << statsVisitor._drawableSet.size()       << std::setw(10) << statsVisitor._numInstancedDrawable << std::endl; 
    492                 viewStr << std::setw(10) << statsVisitor._geometrySet.size()       << std::setw(10) << statsVisitor._numInstancedGeometry << std::endl; 
    493                 viewStr << std::setw(10) << statsVisitor._uniqueStats._vertexCount << std::setw(10) << statsVisitor._instancedStats._vertexCount << std::endl; 
    494                 viewStr << std::setw(10) << unique_primitives                        << std::setw(10) << instanced_primitives << std::endl; 
     468                 
     469                #define STATS_ATTRIBUTE_PAIR(str1, str2) \ 
     470                    if (stats->getAttribute(frameNumber, str1, value)) \ 
     471                        viewStr << std::setw(10) << value; \ 
     472                    else \ 
     473                        viewStr << std::setw(10) << "."; \ 
     474                    if (stats->getAttribute(frameNumber, str2, value)) \ 
     475                        viewStr << std::setw(10) << value << std::endl; \ 
     476                    else \ 
     477                        viewStr << std::setw(10) << "." << std::endl; \ 
     478 
     479                double value = 0.0; 
     480 
     481                STATS_ATTRIBUTE_PAIR("Number of unique StateSet","Number of instanced Stateset") 
     482                STATS_ATTRIBUTE_PAIR("Number of unique Group","Number of instanced Group") 
     483                STATS_ATTRIBUTE_PAIR("Number of unique Transform","Number of instanced Transform") 
     484                STATS_ATTRIBUTE_PAIR("Number of unique LOD","Number of instanced LOD") 
     485                STATS_ATTRIBUTE_PAIR("Number of unique Switch","Number of instanced Switch") 
     486                STATS_ATTRIBUTE_PAIR("Number of unique Geode","Number of instanced Geode") 
     487                STATS_ATTRIBUTE_PAIR("Number of unique Drawable","Number of instanced Drawable") 
     488                STATS_ATTRIBUTE_PAIR("Number of unique Geometry","Number of instanced Geometry") 
     489                STATS_ATTRIBUTE_PAIR("Number of unique Vertices","Number of instanced Vertices") 
     490                STATS_ATTRIBUTE_PAIR("Number of unique Primitives","Number of instanced Primitives") 
     491 
    495492 
    496493                text->setText(viewStr.str()); 
     
    10511048        frameRateValue->setText("0.0"); 
    10521049 
    1053         frameRateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0)); 
     1050        frameRateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Frame rate",-1, true, 1.0)); 
    10541051 
    10551052        pos.y() -= characterSize*1.5f; 
     
    11201117            eventValue->setText("0.0"); 
    11211118 
    1122             eventValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0)); 
     1119            eventValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Event traversal time taken",-1, false, 1000.0)); 
    11231120 
    11241121            pos.x() = startBlocks; 
    11251122            osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks); 
    1126             geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks)); 
     1123            geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getViewerStats(), viewer->getViewerStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks)); 
    11271124            geode->addDrawable(geometry); 
    11281125 
     
    11531150            updateValue->setText("0.0"); 
    11541151 
    1155             updateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0)); 
     1152            updateValue->setDrawCallback(new AveragedValueTextDrawCallback(viewer->getViewerStats(),"Update traversal time taken",-1, false, 1000.0)); 
    11561153 
    11571154            pos.x() = startBlocks; 
    11581155            osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks); 
    1159             geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks)); 
     1156            geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getViewerStats(), viewer->getViewerStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks)); 
    11601157            geode->addDrawable(geometry); 
    11611158 
     
    11701167            ++citr) 
    11711168        { 
    1172             group->addChild(createCameraTimeStats(font, pos, startBlocks, acquireGPUStats, characterSize, viewer->getStats(), *citr)); 
     1169            group->addChild(createCameraTimeStats(font, pos, startBlocks, acquireGPUStats, characterSize, viewer->getViewerStats(), *citr)); 
    11731170        } 
    11741171 
     
    11881185 
    11891186            osg::Geometry* frameMarkers = createFrameMarkers(pos, height, colourTicks, _numBlocks + 1); 
    1190             frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getStats(), 0, _numBlocks + 1)); 
     1187            frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getViewerStats(), 0, _numBlocks + 1)); 
    11911188            geode->addDrawable(frameMarkers); 
    11921189 
     
    12041201            group->addChild(statsGraph); 
    12051202 
    1206             statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorFR, 100, "Frame rate"); 
    1207             statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorEvent, 0.016, "Event traversal time taken"); 
    1208             statsGraph->addStatGraph(viewer->getStats(), viewer->getStats(), colorUpdate, 0.016, "Update traversal time taken"); 
     1203            statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorFR, 100, "Frame rate"); 
     1204            statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorEvent, 0.016, "Event traversal time taken"); 
     1205            statsGraph->addStatGraph(viewer->getViewerStats(), viewer->getViewerStats(), colorUpdate, 0.016, "Update traversal time taken"); 
    12091206             
    12101207            for(ViewerBase::Cameras::iterator citr = cameras.begin(); 
     
    12121209                ++citr) 
    12131210            { 
    1214                 statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorCull, 0.016, "Cull traversal time taken"); 
    1215                 statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorDraw, 0.016, "Draw traversal time taken"); 
    1216                 statsGraph->addStatGraph(viewer->getStats(), (*citr)->getStats(), colorGPU, 0.016, "GPU draw time taken"); 
     1211                statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorCull, 0.016, "Cull traversal time taken"); 
     1212                statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorDraw, 0.016, "Draw traversal time taken"); 
     1213                statsGraph->addStatGraph(viewer->getViewerStats(), (*citr)->getStats(), colorGPU, 0.016, "GPU draw time taken"); 
    12171214            } 
    12181215