]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/main.cxx
Improve timing statistics
[flightgear.git] / src / Main / main.cxx
index 74e0ee9da5d23e59cb5c13a10ae52fd5a282ef5b..33bb062bbe081950e78252babb3120cfcf214111 100644 (file)
@@ -63,9 +63,7 @@
 #include <Sound/beacon.hxx>
 #include <Sound/morse.hxx>
 #include <Sound/fg_fx.hxx>
-#if ENABLE_ATCDCL
 #include <ATCDCL/ATCmgr.hxx>
-#endif
 #include <Time/TimeManager.hxx>
 #include <Environment/environment_mgr.hxx>
 #include <Environment/ephemeris.hxx>
@@ -123,6 +121,15 @@ static void fgMainLoop( void ) {
     static SGPropertyNode_ptr frame_signal
         = fgGetNode("/sim/signals/frame", true);
 
+    static SGPropertyNode_ptr _statisticsFlag
+        = fgGetNode("/sim/timing-statistics/enabled", true);
+    static SGPropertyNode_ptr _statisticsInterval
+        = fgGetNode("/sim/timing-statistics/interval-s", true);
+    static SGPropertyNode_ptr _statiticsMinJitter
+        = fgGetNode("/sim/timing-statistics/min-jitter-ms", true);
+    static SGPropertyNode_ptr _statiticsMinTime
+        = fgGetNode("/sim/timing-statistics/min-time-ms", true);
+
     frame_signal->fireValueChanged();
     SGCloudLayer::enable_bump_mapping = fgGetBool("/sim/rendering/bump-mapping");
     
@@ -145,11 +152,8 @@ static void fgMainLoop( void ) {
                                 altitude->getDoubleValue() * SG_FEET_TO_METER,
                                 globals->get_time_params()->getJD() );
 
-#if ENABLE_ATCDCL  
     // Run ATC subsystem
-    if (fgGetBool("/sim/atc/enabled"))
-        globals->get_ATC_mgr()->update(sim_dt);
-#endif  
+    globals->get_ATC_mgr()->update(sim_dt);
     
     globals->get_subsystem_mgr()->update(sim_dt);
 
@@ -211,6 +215,28 @@ static void fgMainLoop( void ) {
             simgear::sleepForMSec(500);
         }
     }
+
+    // print timing statistics
+    static bool _lastStatisticsFlag = false;
+    if (_lastStatisticsFlag != _statisticsFlag->getBoolValue())
+    {
+        // flag has changed, update subsystem manager
+        _lastStatisticsFlag = _statisticsFlag->getBoolValue();
+        globals->get_subsystem_mgr()->collectDebugTiming(_lastStatisticsFlag);
+    }
+    if (_lastStatisticsFlag)
+    {
+        static double elapsed = 0;
+        elapsed += real_dt;
+        if (elapsed >= _statisticsInterval->getDoubleValue())
+        {
+            // print and reset timing statistics
+            globals->get_subsystem_mgr()->printTimingStatistics(_statiticsMinTime->getDoubleValue(),
+                                                                _statiticsMinJitter->getDoubleValue());
+            elapsed = 0;
+        }
+    }
+
     simgear::AtomicChangeListener::fireChangeListeners();
 
     SG_LOG( SG_ALL, SG_DEBUG, "" );