Added support for compute average stats attributes in inverse space to improve
the quality of frame rate reporting.
This commit is contained in:
parent
6acd0e89a1
commit
b8d98a2cfe
@ -43,8 +43,8 @@ class OSG_EXPORT Stats : public osg::Referenced
|
|||||||
bool setAttribute(int frameNumber, const std::string& attributeName, double value);
|
bool setAttribute(int frameNumber, const std::string& attributeName, double value);
|
||||||
bool getAttribute(int frameNumber, const std::string& attributeName, double& value) const;
|
bool getAttribute(int frameNumber, const std::string& attributeName, double& value) const;
|
||||||
|
|
||||||
bool getAveragedAttribute(const std::string& attributeName, double& value) const;
|
bool getAveragedAttribute(const std::string& attributeName, double& value, bool averageInInverseSpace=false) const;
|
||||||
bool getAveragedAttribute(int startFrameNumber, int endFrameNumber, const std::string& attributeName, double& value) const;
|
bool getAveragedAttribute(int startFrameNumber, int endFrameNumber, const std::string& attributeName, double& value, bool averageInInverseSpace=false) const;
|
||||||
|
|
||||||
AttributeMap& getAttributeMap(int frameNumber);
|
AttributeMap& getAttributeMap(int frameNumber);
|
||||||
const AttributeMap& getAttributeMap(int frameNumber) const;
|
const AttributeMap& getAttributeMap(int frameNumber) const;
|
||||||
|
@ -80,12 +80,12 @@ bool Stats::getAttribute(int frameNumber, const std::string& attributeName, doub
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Stats::getAveragedAttribute(const std::string& attributeName, double& value) const
|
bool Stats::getAveragedAttribute(const std::string& attributeName, double& value, bool averageInInverseSpace) const
|
||||||
{
|
{
|
||||||
return getAveragedAttribute(getEarliestFrameNumber(), getLatestFrameNumber(), attributeName, value);
|
return getAveragedAttribute(getEarliestFrameNumber(), getLatestFrameNumber(), attributeName, value, averageInInverseSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Stats::getAveragedAttribute(int startFrameNumber, int endFrameNumber, const std::string& attributeName, double& value) const
|
bool Stats::getAveragedAttribute(int startFrameNumber, int endFrameNumber, const std::string& attributeName, double& value, bool averageInInverseSpace) const
|
||||||
{
|
{
|
||||||
if (endFrameNumber<startFrameNumber)
|
if (endFrameNumber<startFrameNumber)
|
||||||
{
|
{
|
||||||
@ -99,13 +99,15 @@ bool Stats::getAveragedAttribute(int startFrameNumber, int endFrameNumber, const
|
|||||||
double v = 0.0;
|
double v = 0.0;
|
||||||
if (getAttribute(i,attributeName,v))
|
if (getAttribute(i,attributeName,v))
|
||||||
{
|
{
|
||||||
total += v;
|
if (averageInInverseSpace) total += 1.0/v;
|
||||||
|
else total += v;
|
||||||
numValidSamples += 1.0;
|
numValidSamples += 1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (numValidSamples>0.0)
|
if (numValidSamples>0.0)
|
||||||
{
|
{
|
||||||
value = total/numValidSamples;
|
if (averageInInverseSpace) value = numValidSamples/total;
|
||||||
|
else value = total/numValidSamples;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
|
@ -190,14 +190,14 @@ void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer)
|
|||||||
|
|
||||||
struct TextDrawCallback : public virtual osg::Drawable::DrawCallback
|
struct TextDrawCallback : public virtual osg::Drawable::DrawCallback
|
||||||
{
|
{
|
||||||
TextDrawCallback(osg::Stats* stats, const std::string& name, int frameDelta, double multiplier = 1.0):
|
TextDrawCallback(osg::Stats* stats, const std::string& name, int frameDelta, bool averageInInverseSpace, double multiplier):
|
||||||
_stats(stats),
|
_stats(stats),
|
||||||
_attributeName(name),
|
_attributeName(name),
|
||||||
_frameDelta(frameDelta),
|
_frameDelta(frameDelta),
|
||||||
|
_averageInInverseSpace(averageInInverseSpace),
|
||||||
_multiplier(multiplier),
|
_multiplier(multiplier),
|
||||||
_tickLastUpdated(0)
|
_tickLastUpdated(0)
|
||||||
{
|
{
|
||||||
_tickLastUpdated = osg::Timer::instance()->tick();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** do customized draw code.*/
|
/** do customized draw code.*/
|
||||||
@ -212,7 +212,7 @@ struct TextDrawCallback : public virtual osg::Drawable::DrawCallback
|
|||||||
{
|
{
|
||||||
_tickLastUpdated = tick;
|
_tickLastUpdated = tick;
|
||||||
double value;
|
double value;
|
||||||
if (_stats->getAveragedAttribute( _attributeName, value))
|
if (_stats->getAveragedAttribute( _attributeName, value, _averageInInverseSpace))
|
||||||
{
|
{
|
||||||
sprintf(_tmpText,"%4.2f",value * _multiplier);
|
sprintf(_tmpText,"%4.2f",value * _multiplier);
|
||||||
text->setText(_tmpText);
|
text->setText(_tmpText);
|
||||||
@ -229,6 +229,7 @@ struct TextDrawCallback : public virtual osg::Drawable::DrawCallback
|
|||||||
osg::Stats* _stats;
|
osg::Stats* _stats;
|
||||||
std::string _attributeName;
|
std::string _attributeName;
|
||||||
int _frameDelta;
|
int _frameDelta;
|
||||||
|
bool _averageInInverseSpace;
|
||||||
double _multiplier;
|
double _multiplier;
|
||||||
mutable char _tmpText[128];
|
mutable char _tmpText[128];
|
||||||
mutable osg::Timer_t _tickLastUpdated;
|
mutable osg::Timer_t _tickLastUpdated;
|
||||||
@ -502,7 +503,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
|||||||
frameRateValue->setPosition(pos);
|
frameRateValue->setPosition(pos);
|
||||||
frameRateValue->setText("0.0");
|
frameRateValue->setText("0.0");
|
||||||
|
|
||||||
frameRateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Frame rate",-1));
|
frameRateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0));
|
||||||
|
|
||||||
pos.y() -= characterSize*1.5f;
|
pos.y() -= characterSize*1.5f;
|
||||||
|
|
||||||
@ -543,7 +544,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
|||||||
eventValue->setPosition(pos);
|
eventValue->setPosition(pos);
|
||||||
eventValue->setText("0.0");
|
eventValue->setText("0.0");
|
||||||
|
|
||||||
eventValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, 1000.0));
|
eventValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0));
|
||||||
|
|
||||||
pos.x() = startBlocks;
|
pos.x() = startBlocks;
|
||||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
||||||
@ -576,7 +577,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
|||||||
updateValue->setPosition(pos);
|
updateValue->setPosition(pos);
|
||||||
updateValue->setText("0.0");
|
updateValue->setText("0.0");
|
||||||
|
|
||||||
updateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, 1000.0));
|
updateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0));
|
||||||
|
|
||||||
pos.x() = startBlocks;
|
pos.x() = startBlocks;
|
||||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
|
||||||
@ -684,7 +685,7 @@ osg::Node* StatsHandler::createCameraStats(const std::string& font, osg::Vec3& p
|
|||||||
cullValue->setPosition(pos);
|
cullValue->setPosition(pos);
|
||||||
cullValue->setText("0.0");
|
cullValue->setText("0.0");
|
||||||
|
|
||||||
cullValue->setDrawCallback(new TextDrawCallback(stats,"Cull traversal time taken",-1, 1000.0));
|
cullValue->setDrawCallback(new TextDrawCallback(stats,"Cull traversal time taken",-1, false, 1000.0));
|
||||||
|
|
||||||
pos.x() = startBlocks;
|
pos.x() = startBlocks;
|
||||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorCullAlpha, _numBlocks);
|
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorCullAlpha, _numBlocks);
|
||||||
@ -717,7 +718,7 @@ osg::Node* StatsHandler::createCameraStats(const std::string& font, osg::Vec3& p
|
|||||||
drawValue->setPosition(pos);
|
drawValue->setPosition(pos);
|
||||||
drawValue->setText("0.0");
|
drawValue->setText("0.0");
|
||||||
|
|
||||||
drawValue->setDrawCallback(new TextDrawCallback(stats,"Draw traversal time taken",-1, 1000.0));
|
drawValue->setDrawCallback(new TextDrawCallback(stats,"Draw traversal time taken",-1, false, 1000.0));
|
||||||
|
|
||||||
|
|
||||||
pos.x() = startBlocks;
|
pos.x() = startBlocks;
|
||||||
@ -752,7 +753,7 @@ osg::Node* StatsHandler::createCameraStats(const std::string& font, osg::Vec3& p
|
|||||||
gpuValue->setPosition(pos);
|
gpuValue->setPosition(pos);
|
||||||
gpuValue->setText("0.0");
|
gpuValue->setText("0.0");
|
||||||
|
|
||||||
gpuValue->setDrawCallback(new TextDrawCallback(stats,"GPU draw time taken",-1, 1000.0));
|
gpuValue->setDrawCallback(new TextDrawCallback(stats,"GPU draw time taken",-1, false, 1000.0));
|
||||||
|
|
||||||
pos.x() = startBlocks;
|
pos.x() = startBlocks;
|
||||||
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorGPUAlpha, _numBlocks);
|
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorGPUAlpha, _numBlocks);
|
||||||
|
Loading…
Reference in New Issue
Block a user