Changeset 9554

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

Refactored the view stats.

Location:
OpenSceneGraph/trunk
Files:
13 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osg/View

    r8624 r9554  
    1717#include <osg/Camera> 
    1818#include <osg/Light> 
     19#include <osg/Stats> 
    1920 
    2021#include <OpenThreads/Mutex> 
     
    3839        /** Take all the settings, Camera and Slaves from the passed in view, leaving it empty. */ 
    3940        virtual void take(View& rhs); 
     41 
     42 
     43        /** Set the Stats object used for collect various frame related timing and scene graph stats.*/ 
     44        void setStats(osg::Stats* stats) { _stats = stats; } 
     45 
     46        /** Get the Viewers Stats object.*/ 
     47        osg::Stats* getStats() { return _stats.get(); } 
     48 
     49        /** Get the Viewers Stats object.*/ 
     50        const osg::Stats* getStats() const { return _stats.get(); } 
     51 
    4052 
    4153        /** Options for controlling the global lighting used for the view.*/ 
     
    140152        virtual osg::GraphicsOperation* createRenderer(osg::Camera*) { return 0; } 
    141153 
     154        osg::ref_ptr<osg::Stats>        _stats; 
     155 
    142156        LightingMode                    _lightingMode; 
    143157        osg::ref_ptr<osg::Light>        _light; 
  • OpenSceneGraph/trunk/include/osgViewer/CompositeViewer

    r8971 r9554  
    3939        /** read the viewer configuration from a configuration file.*/ 
    4040        bool readConfiguration(const std::string& filename); 
     41 
     42 
     43        /** Set the Stats object used for collect various frame related timing and scene graph stats.*/ 
     44        virtual void setViewerStats(osg::Stats* stats) { _stats = stats; } 
     45 
     46        /** Get the Viewers Stats object.*/ 
     47        virtual osg::Stats* getViewerStats() { return _stats.get(); } 
     48 
     49        /** Get the Viewers Stats object.*/ 
     50        virtual const osg::Stats* getViewerStats() const { return _stats.get(); } 
     51 
    4152 
    4253        void addView(osgViewer::View* view); 
     
    115126        bool _firstFrame; 
    116127         
     128        osg::ref_ptr<osg::Stats>            _stats; 
     129 
    117130        osg::Timer_t                        _startTick; 
    118131        osg::ref_ptr<osg::FrameStamp>       _frameStamp; 
  • OpenSceneGraph/trunk/include/osgViewer/Viewer

    r8893 r9554  
    4141        /** Take all the settings, Camera and Slaves from the passed in view(er), leaving it empty. */ 
    4242        virtual void take(View& rhs); 
     43 
     44 
     45        /** Set the Stats object used for collect various frame related timing and scene graph stats.*/ 
     46        virtual void setViewerStats(osg::Stats* stats) { setStats(stats); } 
     47 
     48        /** Get the Viewers Stats object.*/ 
     49        virtual osg::Stats* getViewerStats() { return getStats(); } 
     50 
     51        /** Get the Viewers Stats object.*/ 
     52        virtual const osg::Stats* getViewerStats() const { return getStats(); } 
     53 
    4354 
    4455        /** read the viewer configuration from a configuration file.*/ 
  • OpenSceneGraph/trunk/include/osgViewer/ViewerBase

    r9186 r9554  
    4242         
    4343        /** Set the Stats object used for collect various frame related timing and scene graph stats.*/ 
    44         void setStats(osg::Stats* stats) { _stats = stats; } 
     44        virtual void setViewerStats(osg::Stats* stats) = 0; 
    4545 
    4646        /** Get the Viewers Stats object.*/ 
    47         osg::Stats* getStats() { return _stats.get(); } 
     47        virtual osg::Stats* getViewerStats() = 0; 
    4848 
    4949        /** Get the Viewers Stats object.*/ 
    50         const osg::Stats* getStats() const { return _stats.get(); } 
     50        virtual const osg::Stats* getViewerStats() const = 0; 
    5151 
    5252             
     
    260260 
    261261        virtual void viewerInit() = 0; 
    262          
    263  
    264         osg::ref_ptr<osg::Stats>                    _stats; 
    265262 
    266263        bool                                        _firstFrame; 
  • OpenSceneGraph/trunk/src/osgViewer/CompositeViewer.cpp

    r9462 r9554  
    7373    _updateVisitor->setFrameStamp(_frameStamp.get()); 
    7474 
    75     setStats(new osg::Stats("CompsiteViewer")); 
     75    setViewerStats(new osg::Stats("CompsiteViewer")); 
    7676} 
    7777 
     
    565565    } 
    566566     
    567     if (getStats() && getStats()->collectStats("frame_rate")) 
     567    if (getViewerStats() && getViewerStats()->collectStats("frame_rate")) 
    568568    { 
    569569        // update previous frame stats 
    570570        double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime; 
    571         getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime); 
    572         getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime); 
     571        getViewerStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime); 
     572        getViewerStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime); 
    573573 
    574574        // update current frames stats 
    575         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime()); 
     575        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime()); 
    576576    } 
    577577 
     
    945945     
    946946 
    947     if (getStats() && getStats()->collectStats("event")) 
     947    if (getViewerStats() && getViewerStats()->collectStats("event")) 
    948948    { 
    949949        double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); 
    950950 
    951951        // update current frames stats 
    952         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal); 
    953         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal); 
    954         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal); 
     952        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal); 
     953        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal); 
     954        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal); 
    955955    } 
    956956} 
     
    10351035    } 
    10361036     
    1037     if (getStats() && getStats()->collectStats("update")) 
     1037    if (getViewerStats() && getViewerStats()->collectStats("update")) 
    10381038    { 
    10391039        double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); 
    10401040 
    10411041        // update current frames stats 
    1042         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal); 
    1043         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal); 
    1044         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal); 
     1042        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal); 
     1043        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal); 
     1044        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal); 
    10451045    } 
    10461046 
  • 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 
  • OpenSceneGraph/trunk/src/osgViewer/Viewer.cpp

    r9475 r9554  
    178178    _updateVisitor->setFrameStamp(_frameStamp.get()); 
    179179 
    180     setStats(new osg::Stats("Viewer")); 
     180    setViewerStats(new osg::Stats("Viewer")); 
    181181} 
    182182 
     
    517517    } 
    518518     
    519     if (getStats() && getStats()->collectStats("frame_rate")) 
     519    if (getViewerStats() && getViewerStats()->collectStats("frame_rate")) 
    520520    { 
    521521        // update previous frame stats 
    522522        double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime; 
    523         getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime); 
    524         getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime); 
     523        getViewerStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime); 
     524        getViewerStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime); 
    525525 
    526526        // update current frames stats 
    527         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime()); 
     527        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime()); 
    528528    } 
    529529 
     
    855855    } 
    856856     
    857     if (getStats() && getStats()->collectStats("event")) 
     857    if (getViewerStats() && getViewerStats()->collectStats("event")) 
    858858    { 
    859859        double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); 
    860860 
    861861        // update current frames stats 
    862         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal); 
    863         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal); 
    864         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal); 
     862        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal); 
     863        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal); 
     864        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal); 
    865865    } 
    866866 
     
    927927    updateSlaves(); 
    928928 
    929     if (getStats() && getStats()->collectStats("update")) 
     929    if (getViewerStats() && getViewerStats()->collectStats("update")) 
    930930    { 
    931931        double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick()); 
    932932 
    933933        // update current frames stats 
    934         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal); 
    935         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal); 
    936         getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal); 
     934        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal); 
     935        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal); 
     936        getViewerStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal); 
    937937    } 
    938938} 
  • OpenSceneGraph/trunk/src/osgViewer/ViewerBase.cpp

    r9131 r9554  
    2828#include <osgUtil/Optimizer> 
    2929#include <osgUtil/IntersectionVisitor> 
     30#include <osgUtil/Statistics> 
    3031 
    3132static osg::ApplicationUsageProxy ViewerBase_e0(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_CONFIG_FILE <filename>","Specify a viewer configuration file to load by default."); 
     
    640641    osg::FrameStamp* frameStamp = getViewerFrameStamp(); 
    641642 
     643    if (getViewerStats() && getViewerStats()->collectStats("scene")) 
     644    { 
     645        int frameNumber = frameStamp ? frameStamp->getFrameNumber() : 0; 
     646     
     647        Views views; 
     648        getViews(views); 
     649        for(Views::iterator vitr = views.begin(); 
     650            vitr != views.end(); 
     651            ++vitr) 
     652        { 
     653            View* view = *vitr; 
     654            osg::Stats* stats = view->getStats();             
     655            osg::Node* sceneRoot = view->getSceneData(); 
     656            if (sceneRoot) 
     657            { 
     658                osgUtil::StatsVisitor statsVisitor; 
     659                sceneRoot->accept(statsVisitor); 
     660                 
     661                unsigned int unique_primitives = 0; 
     662                osgUtil::Statistics::PrimitiveCountMap::iterator pcmitr; 
     663                for(pcmitr = statsVisitor._uniqueStats.GetPrimitivesBegin(); 
     664                    pcmitr != statsVisitor._uniqueStats.GetPrimitivesEnd(); 
     665                    ++pcmitr) 
     666                { 
     667                    unique_primitives += pcmitr->second; 
     668                } 
     669 
     670                stats->setAttribute(frameNumber, "Number of unique StateSet", static_cast<double>(statsVisitor._statesetSet.size())); 
     671                stats->setAttribute(frameNumber, "Number of unique Group", static_cast<double>(statsVisitor._groupSet.size())); 
     672                stats->setAttribute(frameNumber, "Number of unique Transform", static_cast<double>(statsVisitor._transformSet.size())); 
     673                stats->setAttribute(frameNumber, "Number of unique LOD", static_cast<double>(statsVisitor._lodSet.size())); 
     674                stats->setAttribute(frameNumber, "Number of unique Switch", static_cast<double>(statsVisitor._switchSet.size())); 
     675                stats->setAttribute(frameNumber, "Number of unique Geode", static_cast<double>(statsVisitor._geodeSet.size())); 
     676                stats->setAttribute(frameNumber, "Number of unique Drawable", static_cast<double>(statsVisitor._drawableSet.size())); 
     677                stats->setAttribute(frameNumber, "Number of unique Geometry", static_cast<double>(statsVisitor._geometrySet.size())); 
     678                stats->setAttribute(frameNumber, "Number of unique Vertices", static_cast<double>(statsVisitor._uniqueStats._vertexCount)); 
     679                stats->setAttribute(frameNumber, "Number of unique Primitives", static_cast<double>(unique_primitives)); 
     680 
     681                unsigned int instanced_primitives = 0; 
     682                for(pcmitr = statsVisitor._instancedStats.GetPrimitivesBegin(); 
     683                    pcmitr != statsVisitor._instancedStats.GetPrimitivesEnd(); 
     684                    ++pcmitr) 
     685                { 
     686                    instanced_primitives += pcmitr->second; 
     687                } 
     688 
     689                stats->setAttribute(frameNumber, "Number of instanced Stateset", static_cast<double>(statsVisitor._numInstancedStateSet)); 
     690                stats->setAttribute(frameNumber, "Number of instanced Group", static_cast<double>(statsVisitor._numInstancedGroup)); 
     691                stats->setAttribute(frameNumber, "Number of instanced Transform", static_cast<double>(statsVisitor._numInstancedTransform)); 
     692                stats->setAttribute(frameNumber, "Number of instanced LOD", static_cast<double>(statsVisitor._numInstancedLOD)); 
     693                stats->setAttribute(frameNumber, "Number of instanced Switch", static_cast<double>(statsVisitor._numInstancedSwitch)); 
     694                stats->setAttribute(frameNumber, "Number of instanced Geode", static_cast<double>(statsVisitor._numInstancedGeode)); 
     695                stats->setAttribute(frameNumber, "Number of instanced Drawable", static_cast<double>(statsVisitor._numInstancedDrawable)); 
     696                stats->setAttribute(frameNumber, "Number of instanced Geometry", static_cast<double>(statsVisitor._numInstancedGeometry)); 
     697                stats->setAttribute(frameNumber, "Number of instanced Vertices", static_cast<double>(statsVisitor._instancedStats._vertexCount)); 
     698                stats->setAttribute(frameNumber, "Number of instanced Primitives", static_cast<double>(instanced_primitives)); 
     699           } 
     700        } 
     701    } 
     702 
    642703    Scenes scenes; 
    643704    getScenes(scenes); 
     
    757818    } 
    758819 
    759     if (getStats() && getStats()->collectStats("update")) 
     820    if (getViewerStats() && getViewerStats()->collectStats("update")) 
    760821    { 
    761822        double endRenderingTraversals = elapsedTime(); 
    762823 
    763824        // update current frames stats 
    764         getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals); 
    765         getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals); 
    766         getStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals); 
    767     } 
    768 } 
    769  
     825        getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals); 
     826        getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals); 
     827        getViewerStats()->setAttribute(frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals); 
     828    } 
     829} 
     830 
  • OpenSceneGraph/trunk/src/osgWrappers/osg/View.cpp

    r8625 r9554  
    1818#include <osg/Matrixd> 
    1919#include <osg/Object> 
     20#include <osg/Stats> 
    2021#include <osg/View> 
    2122 
     
    7475                  __void__take__View_R1, 
    7576                  "Take all the settings, Camera and Slaves from the passed in view, leaving it empty. ", 
     77                  ""); 
     78        I_Method1(void, setStats, IN, osg::Stats *, stats, 
     79                  Properties::NON_VIRTUAL, 
     80                  __void__setStats__osg_Stats_P1, 
     81                  "Set the Stats object used for collect various frame related timing and scene graph stats. ", 
     82                  ""); 
     83        I_Method0(osg::Stats *, getStats, 
     84                  Properties::NON_VIRTUAL, 
     85                  __osg_Stats_P1__getStats, 
     86                  "Get the Viewers Stats object. ", 
     87                  ""); 
     88        I_Method0(const osg::Stats *, getStats, 
     89                  Properties::NON_VIRTUAL, 
     90                  __C5_osg_Stats_P1__getStats, 
     91                  "Get the Viewers Stats object. ", 
    7692                  ""); 
    7793        I_Method1(void, setLightingMode, IN, osg::View::LightingMode, lightingMode, 
     
    205221                        0,  
    206222                        __bool__removeSlave__unsigned_int); 
     223        I_SimpleProperty(osg::Stats *, Stats,  
     224                         __osg_Stats_P1__getStats,  
     225                         __void__setStats__osg_Stats_P1); 
    207226END_REFLECTOR 
    208227 
  • OpenSceneGraph/trunk/src/osgWrappers/osgUtil/Statistics.cpp

    r9402 r9554  
    208208                  "", 
    209209                  ""); 
     210        I_Method0(osgUtil::Statistics::PrimitiveCountMap &, getPrimitiveCountMap, 
     211                  Properties::NON_VIRTUAL, 
     212                  __PrimitiveCountMap_R1__getPrimitiveCountMap, 
     213                  "", 
     214                  ""); 
     215        I_Method0(const osgUtil::Statistics::PrimitiveCountMap &, getPrimitiveCountMap, 
     216                  Properties::NON_VIRTUAL, 
     217                  __C5_PrimitiveCountMap_R1__getPrimitiveCountMap, 
     218                  "", 
     219                  ""); 
    210220        I_Method0(osgUtil::Statistics::PrimitiveCountMap::iterator, GetPrimitivesBegin, 
    211221                  Properties::NON_VIRTUAL, 
    212222                  __PrimitiveCountMap_iterator__GetPrimitivesBegin, 
    213                   "", 
     223                  "deprecated ", 
    214224                  ""); 
    215225        I_Method0(osgUtil::Statistics::PrimitiveCountMap::iterator, GetPrimitivesEnd, 
    216226                  Properties::NON_VIRTUAL, 
    217227                  __PrimitiveCountMap_iterator__GetPrimitivesEnd, 
    218                   "", 
     228                  "deprecated ", 
    219229                  ""); 
    220230        I_SimpleProperty(int, BinNo,  
     
    227237                         0,  
    228238                         __void__setDepth__int); 
     239        I_SimpleProperty(osgUtil::Statistics::PrimitiveCountMap &, PrimitiveCountMap,  
     240                         __PrimitiveCountMap_R1__getPrimitiveCountMap,  
     241                         0); 
    229242        I_SimpleProperty(osgUtil::Statistics::StatsType, Type,  
    230243                         0,  
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/CompositeViewer.cpp

    r8980 r9554  
    1717#include <osg/FrameStamp> 
    1818#include <osg/Object> 
     19#include <osg/Stats> 
    1920#include <osg/Timer> 
    2021#include <osgViewer/CompositeViewer> 
     
    7576                  __bool__readConfiguration__C5_std_string_R1, 
    7677                  "read the viewer configuration from a configuration file. ", 
     78                  ""); 
     79        I_Method1(void, setViewerStats, IN, osg::Stats *, stats, 
     80                  Properties::VIRTUAL, 
     81                  __void__setViewerStats__osg_Stats_P1, 
     82                  "Set the Stats object used for collect various frame related timing and scene graph stats. ", 
     83                  ""); 
     84        I_Method0(osg::Stats *, getViewerStats, 
     85                  Properties::VIRTUAL, 
     86                  __osg_Stats_P1__getViewerStats, 
     87                  "Get the Viewers Stats object. ", 
     88                  ""); 
     89        I_Method0(const osg::Stats *, getViewerStats, 
     90                  Properties::VIRTUAL, 
     91                  __C5_osg_Stats_P1__getViewerStats, 
     92                  "Get the Viewers Stats object. ", 
    7793                  ""); 
    7894        I_Method1(void, addView, IN, osgViewer::View *, view, 
     
    258274                         __osg_FrameStamp_P1__getViewerFrameStamp,  
    259275                         0); 
     276        I_SimpleProperty(osg::Stats *, ViewerStats,  
     277                         __osg_Stats_P1__getViewerStats,  
     278                         __void__setViewerStats__osg_Stats_P1); 
    260279END_REFLECTOR 
    261280 
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/Viewer.cpp

    r8895 r9554  
    1818#include <osg/Node> 
    1919#include <osg/Object> 
     20#include <osg/Stats> 
    2021#include <osg/Timer> 
    2122#include <osgViewer/GraphicsWindow> 
     
    7778                  __void__take__View_R1, 
    7879                  "Take all the settings, Camera and Slaves from the passed in view(er), leaving it empty. ", 
     80                  ""); 
     81        I_Method1(void, setViewerStats, IN, osg::Stats *, stats, 
     82                  Properties::VIRTUAL, 
     83                  __void__setViewerStats__osg_Stats_P1, 
     84                  "Set the Stats object used for collect various frame related timing and scene graph stats. ", 
     85                  ""); 
     86        I_Method0(osg::Stats *, getViewerStats, 
     87                  Properties::VIRTUAL, 
     88                  __osg_Stats_P1__getViewerStats, 
     89                  "Get the Viewers Stats object. ", 
     90                  ""); 
     91        I_Method0(const osg::Stats *, getViewerStats, 
     92                  Properties::VIRTUAL, 
     93                  __C5_osg_Stats_P1__getViewerStats, 
     94                  "Get the Viewers Stats object. ", 
    7995                  ""); 
    8096        I_Method1(bool, readConfiguration, IN, const std::string &, filename, 
     
    220236                         __osg_FrameStamp_P1__getViewerFrameStamp,  
    221237                         0); 
     238        I_SimpleProperty(osg::Stats *, ViewerStats,  
     239                         __osg_Stats_P1__getViewerStats,  
     240                         __void__setViewerStats__osg_Stats_P1); 
    222241END_REFLECTOR 
    223242 
  • OpenSceneGraph/trunk/src/osgWrappers/osgViewer/ViewerBase.cpp

    r8895 r9554  
    7171                       "", 
    7272                       ""); 
    73         I_Method1(void, setStats, IN, osg::Stats *, stats, 
    74                   Properties::NON_VIRTUAL, 
    75                   __void__setStats__osg_Stats_P1, 
     73        I_Method1(void, setViewerStats, IN, osg::Stats *, stats, 
     74                  Properties::PURE_VIRTUAL, 
     75                  __void__setViewerStats__osg_Stats_P1, 
    7676                  "Set the Stats object used for collect various frame related timing and scene graph stats. ", 
    7777                  ""); 
    78         I_Method0(osg::Stats *, getStats, 
    79                   Properties::NON_VIRTUAL, 
    80                   __osg_Stats_P1__getStats, 
     78        I_Method0(osg::Stats *, getViewerStats, 
     79                  Properties::PURE_VIRTUAL, 
     80                  __osg_Stats_P1__getViewerStats, 
    8181                  "Get the Viewers Stats object. ", 
    8282                  ""); 
    83         I_Method0(const osg::Stats *, getStats, 
    84                   Properties::NON_VIRTUAL, 
    85                   __C5_osg_Stats_P1__getStats, 
     83        I_Method0(const osg::Stats *, getViewerStats, 
     84                  Properties::PURE_VIRTUAL, 
     85                  __C5_osg_Stats_P1__getViewerStats, 
    8686                  "Get the Viewers Stats object. ", 
    8787                  ""); 
     
    375375                         __bool__getReleaseContextAtEndOfFrameHint,  
    376376                         __void__setReleaseContextAtEndOfFrameHint__bool); 
    377         I_SimpleProperty(osg::Stats *, Stats,  
    378                          __osg_Stats_P1__getStats,  
    379                          __void__setStats__osg_Stats_P1); 
    380377        I_SimpleProperty(osgViewer::ViewerBase::ThreadingModel, ThreadingModel,  
    381378                         __ThreadingModel__getThreadingModel,  
     
    390387                         __osg_FrameStamp_P1__getViewerFrameStamp,  
    391388                         0); 
     389        I_SimpleProperty(osg::Stats *, ViewerStats,  
     390                         __osg_Stats_P1__getViewerStats,  
     391                         __void__setViewerStats__osg_Stats_P1); 
    392392END_REFLECTOR 
    393393