]> git.mxchange.org Git - flightgear.git/commitdiff
New property reporting worst-case frame latency.
authorThorstenB <brehmt@gmail.com>
Sun, 27 Mar 2011 22:16:27 +0000 (00:16 +0200)
committerThorstenB <brehmt@gmail.com>
Sun, 27 Mar 2011 22:16:27 +0000 (00:16 +0200)
Shows maximum latency of any frame within the last second.

src/Time/TimeManager.cxx
src/Time/TimeManager.hxx

index 2e23896955163a0e2dca671757c16e00292c535c..7d4ed5607ff88661a0100f6f5521cb8096e2f25d 100644 (file)
@@ -88,9 +88,11 @@ void TimeManager::init()
                _warp->getIntValue());
   globals->set_time_params(_impl);
     
-// frame/update-rate counters
+  // frame-rate / worst-case delay / update-rate counters
   _frameRate = fgGetNode("/sim/frame-rate", true);
+  _frameDelayMax = fgGetNode("/sim/frame-delay-max-ms", true);
   _lastFrameTime = 0;
+  _wcFrameDelayMax = 0.0;
   _frameCount = 0;
 }
 
@@ -160,7 +162,9 @@ void TimeManager::computeTimeDeltas(double& simDt, double& realDt)
   SGTimeStamp currentStamp;
   currentStamp.stamp();
   double dt = (currentStamp - _lastStamp).toSecs();
-  
+  if (dt > _wcFrameDelayMax)
+      _wcFrameDelayMax = dt;
+
 // Limit the time we need to spend in simulation loops
 // That means, if the /sim/max-simtime-per-frame value is strictly positive
 // you can limit the maximum amount of time you will do simulations for
@@ -251,7 +255,9 @@ void TimeManager::computeFrameRate()
   // Calculate frame rate average
   if ((_impl->get_cur_time() != _lastFrameTime)) {
     _frameRate->setIntValue(_frameCount);
+    _frameDelayMax->setDoubleValue(_wcFrameDelayMax*1000);
     _frameCount = 0;
+    _wcFrameDelayMax = 0.0;
   }
   
   _lastFrameTime = _impl->get_cur_time();
index 59aa036167dd81bfb2eb6fe0e9d8e97e78ef8e0a..edf4980135cf2fe1ba9e6f75d8179f1b14e8e39e 100644 (file)
@@ -78,9 +78,11 @@ private:
   SGPropertyNode_ptr _longitudeDeg;
   SGPropertyNode_ptr _latitudeDeg;
   
-// frame-rate / update-rate counters  
+  // frame-rate / worst-case delay / update-rate counters
   SGPropertyNode_ptr _frameRate;
+  SGPropertyNode_ptr _frameDelayMax;
   time_t _lastFrameTime;
+  double _wcFrameDelayMax;
   int _frameCount;
 };