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);
|
= fgGetNode("/sim/freeze/clock", true);
|
||||||
static const SGPropertyNode *cur_time_override
|
static const SGPropertyNode *cur_time_override
|
||||||
= fgGetNode("/sim/time/cur-time-override", true);
|
= 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");
|
SGCloudLayer::enable_bump_mapping = fgGetBool("/sim/rendering/bump-mapping");
|
||||||
|
|
||||||
|
@ -292,6 +294,20 @@ static void fgMainLoop( void ) {
|
||||||
|
|
||||||
real_delta_time_sec
|
real_delta_time_sec
|
||||||
= double(current_time_stamp - last_time_stamp) / 1000000.0;
|
= 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.
|
// round the real time down to a multiple of 1/model-hz.
|
||||||
// this way all systems are updated the _same_ amount of dt.
|
// this way all systems are updated the _same_ amount of dt.
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue