Correct average render / packet time calculations.

We need to reset the avgrenderframetime and avgpacketframetime variables
when we recalculate the average times spend rendering frame and / or
processing package frames. Otherwise the result will be much too high,
leading to lost frames down below. I wonder why nobody complained about
this until now.

While at it lower the security margin from 2% to just 1%. On the one
hand we need a small security margin, because Quake II is not that
precise and out average times spend may be too low. On the other hand
the margin must not be too large, because the bigger the margin is the
bigger is the risk of missing frames... Both 2% and 1% is very small,
in fact often they don't even make a difference because of float ->
int conversations. For example 16 * 0,02 = 0,32 -> cut to 0. But there
are some extrem cases were it matters and my empirical testing showed
that 1% is slighty better then 2%. At least on my system. An it's
better to f*ck up the timing for a small number of frames than missing
a frame. A broken timing is hard to recognize, a missed frame is much
more annoying.
This commit is contained in:
Yamagi Burmeister 2018-10-23 18:37:25 +02:00
parent 861cf25ddf
commit 60c12228c9

View file

@ -532,12 +532,13 @@ Qcommon_Frame(int msec)
scenes complexity. Take the last 60 pure render scenes complexity. Take the last 60 pure render
frames (frames that are only render frames and frames (frames that are only render frames and
nothing else) into account and add a security nothing else) into account and add a security
margin of 2%. */ margin of 1%. */
if (last_was_renderframe && !last_was_packetframe) if (last_was_renderframe && !last_was_packetframe)
{ {
int measuredframes = 0; int measuredframes = 0;
static int renderframenum; static int renderframenum;
avgrenderframetime = 0;
renderframetimes[renderframenum] = msec; renderframetimes[renderframenum] = msec;
for (int i = 0; i < 60; i++) for (int i = 0; i < 60; i++)
@ -550,7 +551,7 @@ Qcommon_Frame(int msec)
} }
avgrenderframetime /= measuredframes; avgrenderframetime /= measuredframes;
avgrenderframetime += (avgrenderframetime * 0.02f); avgrenderframetime += (avgrenderframetime * 0.01f);
renderframenum++; renderframenum++;
@ -567,12 +568,13 @@ Qcommon_Frame(int msec)
speed and the network delay. Take the last 60 pure speed and the network delay. Take the last 60 pure
packet frames (frames that are only packet frames ans packet frames (frames that are only packet frames ans
nothing else) into account and add a security margin nothing else) into account and add a security margin
of 2%. */ of 1%. */
if (last_was_packetframe && last_was_renderframe) if (last_was_packetframe && last_was_renderframe)
{ {
int measuredframes = 0; int measuredframes = 0;
static int packetframenum; static int packetframenum;
avgpacketframetime = 0;
packetframetimes[packetframenum] = msec; packetframetimes[packetframenum] = msec;
for (int i = 0; i < 60; i++) for (int i = 0; i < 60; i++)
@ -585,7 +587,7 @@ Qcommon_Frame(int msec)
} }
avgpacketframetime /= measuredframes; avgpacketframetime /= measuredframes;
avgpacketframetime += (avgpacketframetime * 0.02f); avgpacketframetime += (avgpacketframetime * 0.01f);
packetframenum++; packetframenum++;