Browse Source

revert failed throttle changes

Lee Salzman 5 years ago
parent
commit
54dac7af81
3 changed files with 24 additions and 30 deletions
  1. 1 2
      include/enet/enet.h
  2. 2 4
      peer.c
  3. 21 24
      protocol.c

+ 1 - 2
include/enet/enet.h

@@ -316,8 +316,7 @@ typedef struct _ENetPeer
    ENetList      outgoingCommands;
    ENetList      dispatchedCommands;
    enet_uint16   flags;
-   enet_uint8    roundTripTimeRemainder;
-   enet_uint8    roundTripTimeVarianceRemainder;
+   enet_uint16   reserved;
    enet_uint16   incomingUnsequencedGroup;
    enet_uint16   outgoingUnsequencedGroup;
    enet_uint32   unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32]; 

+ 2 - 4
peer.c

@@ -66,7 +66,7 @@ enet_peer_throttle (ENetPeer * peer, enet_uint32 rtt)
         peer -> packetThrottle = peer -> packetThrottleLimit;
     }
     else
-    if (rtt <= peer -> lastRoundTripTime + (peer -> lastRoundTripTimeVariance + 1) / 2)
+    if (rtt <= peer -> lastRoundTripTime)
     {
         peer -> packetThrottle += peer -> packetThrottleAcceleration;
 
@@ -76,7 +76,7 @@ enet_peer_throttle (ENetPeer * peer, enet_uint32 rtt)
         return 1;
     }
     else
-    if (rtt >= peer -> lastRoundTripTime + 2 * peer -> lastRoundTripTimeVariance)
+    if (rtt > peer -> lastRoundTripTime + 2 * peer -> lastRoundTripTimeVariance)
     {
         if (peer -> packetThrottle > peer -> packetThrottleDeceleration)
           peer -> packetThrottle -= peer -> packetThrottleDeceleration;
@@ -421,8 +421,6 @@ enet_peer_reset (ENetPeer * peer)
     peer -> eventData = 0;
     peer -> totalWaitingData = 0;
     peer -> flags = 0;
-    peer -> roundTripTimeRemainder = 0;
-    peer -> roundTripTimeVarianceRemainder = 0;
 
     memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow));
     

+ 21 - 24
protocol.c

@@ -838,7 +838,6 @@ static int
 enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command)
 {
     enet_uint32 roundTripTime,
-           roundTripTimeVariance,
            receivedSentTime,
            receivedReliableSequenceNumber;
     ENetProtocolCommand commandNumber;
@@ -859,44 +858,42 @@ enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer *
 
     if (peer -> lastReceiveTime > 0)
     {
-       enet_uint32 accumRoundTripTime = (peer -> roundTripTime << 8) + peer -> roundTripTimeRemainder;
-       enet_uint32 accumRoundTripTimeVariance = (peer -> roundTripTimeVariance << 8) + peer -> roundTripTimeVarianceRemainder;
-
        enet_peer_throttle (peer, roundTripTime);
 
-       roundTripTime <<= 8;
-       accumRoundTripTimeVariance = (accumRoundTripTimeVariance * 3 + ENET_DIFFERENCE (roundTripTime, accumRoundTripTime)) / 4;
-       accumRoundTripTime = (accumRoundTripTime * 7 + roundTripTime) / 8;
-
-       peer -> roundTripTime = accumRoundTripTime >> 8;
-       peer -> roundTripTimeRemainder = accumRoundTripTime & 0xFF;
-       peer -> roundTripTimeVariance = accumRoundTripTimeVariance >> 8;
-       peer -> roundTripTimeVarianceRemainder = accumRoundTripTimeVariance & 0xFF;
+       peer -> roundTripTimeVariance -= peer -> roundTripTimeVariance / 4;
 
-       roundTripTime = (accumRoundTripTime + 128) >> 8;
-       roundTripTimeVariance = (accumRoundTripTimeVariance + 255) >> 8;
+       if (roundTripTime >= peer -> roundTripTime)
+       {
+          enet_uint32 diff = roundTripTime - peer -> roundTripTime;
+          peer -> roundTripTimeVariance += diff / 4;
+          peer -> roundTripTime += diff / 8;
+       }
+       else
+       {
+          enet_uint32 diff = peer -> roundTripTime - roundTripTime;
+          peer -> roundTripTimeVariance += diff / 4;
+          peer -> roundTripTime -= diff / 8;
+       }
     }
     else
     {
-       roundTripTimeVariance = (roundTripTime + 1) / 2;
-
        peer -> roundTripTime = roundTripTime;
-       peer -> roundTripTimeVariance = roundTripTimeVariance;
+       peer -> roundTripTimeVariance = (roundTripTime + 1) / 2;
     }
 
-    if (roundTripTime < peer -> lowestRoundTripTime)
-      peer -> lowestRoundTripTime = roundTripTime;
+    if (peer -> roundTripTime < peer -> lowestRoundTripTime)
+      peer -> lowestRoundTripTime = peer -> roundTripTime;
 
-    if (roundTripTimeVariance > peer -> highestRoundTripTimeVariance) 
-      peer -> highestRoundTripTimeVariance = roundTripTimeVariance;
+    if (peer -> roundTripTimeVariance > peer -> highestRoundTripTimeVariance)
+      peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance;
 
     if (peer -> packetThrottleEpoch == 0 ||
         ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> packetThrottleEpoch) >= peer -> packetThrottleInterval)
     {
         peer -> lastRoundTripTime = peer -> lowestRoundTripTime;
-        peer -> lastRoundTripTimeVariance = ENET_MAX (peer -> highestRoundTripTimeVariance, (peer -> lowestRoundTripTime + 15) / 16);
-        peer -> lowestRoundTripTime = roundTripTime;
-        peer -> highestRoundTripTimeVariance = ENET_MAX (roundTripTimeVariance, 3);
+        peer -> lastRoundTripTimeVariance = ENET_MAX (peer -> highestRoundTripTimeVariance, 1);
+        peer -> lowestRoundTripTime = peer -> roundTripTime;
+        peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance;
         peer -> packetThrottleEpoch = host -> serviceTime;
     }