1
0
Fork 0

Mathias Frhlich:

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 ...
This commit is contained in:
ehofman 2006-01-30 10:50:28 +00:00
parent aec1d580c2
commit 6bdaa05351

View 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.
{