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

Refactored the view stats.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • 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