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:
parent
aec1d580c2
commit
6bdaa05351
1 changed files with 16 additions and 0 deletions
|
@ -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.
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue