]> git.mxchange.org Git - flightgear.git/commitdiff
Mathias Fröhlich:
authorehofman <ehofman>
Mon, 30 Jan 2006 10:50:28 +0000 (10:50 +0000)
committerehofman <ehofman>
Mon, 30 Jan 2006 10:50:28 +0000 (10:50 +0000)
This patch limits the maximum simtime we do simulation computations for.
That is highly sensible if you run flightgear in valgrind or some realy slow
debug build. In such a case it is possible that flightgear gets totally
unresponsible, because simulation time might increase slower than real time.
That patch introduces a maximum simulation time per rendered frame to limit
that effect.

If the property /sim/max-simtime-per-frame is set to something strictly
positive, the simulation time is limited to that value.
The default is unchanged - no limit.

Anyway, from the point of view of gui responsiveness and responsiveness to
realtime controls like joystick inputs it might be a good idea to limit that
by default to say 1 second. If you have less than 1fps, flightgear is
unplayable anyway and I believe we do not longer need to care for realtime
correctness for that case ...

src/Main/main.cxx

index e1f6a291ef5695d5e3c55d4e8e166816e6d2d706..f972a59ac3c81f72a2004c3b49868f1d52b29a55 100644 (file)
@@ -220,6 +220,8 @@ static void fgMainLoop( void ) {
         = fgGetNode("/sim/freeze/clock", true);
     static const SGPropertyNode *cur_time_override
         = fgGetNode("/sim/time/cur-time-override", true);
+    static const SGPropertyNode *max_simtime_per_frame
+        = fgGetNode("/sim/max-simtime-per-frame", true);
 
     SGCloudLayer::enable_bump_mapping = fgGetBool("/sim/rendering/bump-mapping");
 
@@ -292,6 +294,20 @@ static void fgMainLoop( void ) {
 
     real_delta_time_sec
         = double(current_time_stamp - last_time_stamp) / 1000000.0;
+
+    // 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
+    // one frame to display. The cpu time spent in simulations code is roughtly
+    // at least O(real_delta_time_sec). If this is (due to running debug
+    // builds or valgrind or something different blowing up execution times)
+    // larger than the real time you will no more get any response
+    // from flightgear. This limits that effect. Just set to property from
+    // your .fgfsrc or commandline ...
+    double dtMax = max_simtime_per_frame->getDoubleValue();
+    if (0 < dtMax && dtMax < real_delta_time_sec)
+      real_delta_time_sec = dtMax;
+
     // round the real time down to a multiple of 1/model-hz.
     // this way all systems are updated the _same_ amount of dt.
     {