From 6bdaa05351fb123cd491a8cfad3b001e6171d764 Mon Sep 17 00:00:00 2001 From: ehofman Date: Mon, 30 Jan 2006 10:50:28 +0000 Subject: [PATCH] =?utf8?q?Mathias=20Fr=F6hlich:?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Main/main.cxx b/src/Main/main.cxx index e1f6a291e..f972a59ac 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -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. { -- 2.39.5