As a stress test, I am using this:
- minimal startup profile as detailed on the wiki
- KSFO@28R, ufo
- basic weather
- all draw masks set to false to disable all rendering
- used the route manager to create a flight plan
- replaying the flight via the replay system using accelerated time (8x), 300 kts groundspeed
- running fgcommand("profiler-start") and fgcommand("profiler-stop") for each test flight
- all ND layers enabled, range 50nm, shown in a native canvas window only
- 10 independent instances of the same ND running
(considering to turn this into a scripted benchmark...)
Currently getting 30 fps, and ~80-110ms avg frame spacing
The point of the exercise being that these settings should be a good stress test to test various parts of the "pipeline": 1) NavDisplay, 2) MapStructure, 3) Canvas/Nasal, 4) Canvas/SimGear 5)OSG/ShivaVG, to hopefully learn some new lessons, and enable aircraft developers to really use the simulator (complex aircraft/scenery & features) with little impact on performance.
- Code: Select all
Total: 77084 samples
1808 14.8% 14.8% 2698 22.0% _nv037glcore
1449 11.8% 26.6% 3018 24.6% _nv019glcore
1080 8.8% 35.4% 1515 12.4% shStrokePath
879 7.2% 42.6% 4664 38.1% simgear::canvas::Group::update
472 3.9% 46.4% 472 3.9% __strlen_sse2
435 3.6% 50.0% 435 3.6% shVector2ArrayPushBackP
334 2.7% 52.7% 694 5.7% SGPropertyNode::set_double
263 2.1% 54.9% 4408 36.0% simgear::canvas::Map::update
220 1.8% 56.7% 455 3.7% SGPropertyNode::getChildImpl
201 1.6% 58.3% 365 3.0% SGPropertyNode::getChild@10b1500
195 1.6% 59.9% 309 2.5% *__GI_____strtod_l_internal
186 1.5% 61.4% 1357 11.1% simgear::canvas::Element::update
169 1.4% 62.8% 5252 42.9% vgDrawPath
162 1.3% 64.1% 174 1.4% osg::Object::getUserData
147 1.2% 65.3% 149 1.2% SGPropertyNode::getDoubleValue@10b2720
143 1.2% 66.5% 1171 9.6% simgear::canvas::Element::getMatrix
138 1.1% 67.6% 7075 57.8% simgear::canvas::Path::PathDrawable::drawImplementation
115 0.9% 68.5% 115 0.9% shPaintArrayFind
96 0.8% 69.3% 138 1.1% osg::Node::dirtyBound
88 0.7% 70.1% 366 3.0% std::_Rb_tree::_M_lower_bound
86 0.7% 70.8% 86 0.7% memcpy
79 0.6% 71.4% 79 0.6% SGPropertyNode::getStringValue@10b3040
79 0.6% 72.0% 233 1.9% simgear::canvas::Map::valueChanged
78 0.6% 72.7% 210 1.7% _nv005glcore
77 0.6% 73.3% 77 0.6% std::vector::size
72 0.6% 73.9% 581 4.7% SGPropertyNode* find_node
68 0.6% 74.5% 471 3.8% SGPropertyNode* find_node_aux
68 0.6% 75.0% 68 0.6% std::basic_string::basic_string@a8dd0
66 0.5% 75.5% 91 0.7% *__GI___libc_free
66 0.5% 76.1% 113 0.9% *__GI___libc_malloc
66 0.5% 76.6% 66 0.5% shPathArrayFind
65 0.5% 77.2% 120 1.0% _nv014glcore
63 0.5% 77.7% 126 1.0% simgear::canvas::Element::valueChanged
The interesting thing here is that this is what the profile looks like even when the aircraft is still stationary, not moving - i.e. property updates are triggering redraws/updates obviously.
feedback & ideas welcome