diff --git a/libraries/metavoxels/src/DatagramSequencer.cpp b/libraries/metavoxels/src/DatagramSequencer.cpp index 5c5aee49c2..65d548ba1c 100644 --- a/libraries/metavoxels/src/DatagramSequencer.cpp +++ b/libraries/metavoxels/src/DatagramSequencer.cpp @@ -19,7 +19,7 @@ #include "MetavoxelMessages.h" // in sequencer parlance, a "packet" may consist of multiple datagrams. clarify when we refer to actual datagrams -const int MAX_DATAGRAM_SIZE = 1450; +const int MAX_DATAGRAM_SIZE = MAX_PACKET_SIZE; const int DEFAULT_MAX_PACKET_SIZE = 3000; @@ -45,7 +45,8 @@ DatagramSequencer::DatagramSequencer(const QByteArray& datagramHeader, QObject* _packetsToWrite(0.0f), _slowStartThreshold(DEFAULT_SLOW_START_THRESHOLD), _packetRateIncreasePacketNumber(0), - _packetRateDecreasePacketNumber(0) { + _packetRateDecreasePacketNumber(0), + _packetDropCount(0) { _outgoingPacketStream.setByteOrder(QDataStream::LittleEndian); _incomingDatagramStream.setByteOrder(QDataStream::LittleEndian); @@ -348,11 +349,18 @@ void DatagramSequencer::sendRecordLost(const SendRecord& record) { } } - // halve the rate and remember as threshold - if (record.packetNumber >= _packetRateDecreasePacketNumber) { - _packetsPerGroup = qMax(_packetsPerGroup * 0.5f, 1.0f); - _slowStartThreshold = _packetsPerGroup; - _packetRateDecreasePacketNumber = _outgoingPacketNumber + 1; + // if we've lost three in a row, halve the rate and remember as threshold + if (_packetDropCount == 0 || record.packetNumber == _lastPacketDropped + 1) { + _packetDropCount++; + _lastPacketDropped = record.packetNumber; + const int CONSECUTIVE_DROPS_BEFORE_REDUCTION = 3; + if (_packetDropCount >= CONSECUTIVE_DROPS_BEFORE_REDUCTION && record.packetNumber >= _packetRateDecreasePacketNumber) { + _packetsPerGroup = qMax(_packetsPerGroup * 0.5f, 1.0f); + _slowStartThreshold = _packetsPerGroup; + _packetRateDecreasePacketNumber = _outgoingPacketNumber + 1; + } + } else { + _packetDropCount = 0; } } diff --git a/libraries/metavoxels/src/DatagramSequencer.h b/libraries/metavoxels/src/DatagramSequencer.h index 02fbd0f365..d3d37f2621 100644 --- a/libraries/metavoxels/src/DatagramSequencer.h +++ b/libraries/metavoxels/src/DatagramSequencer.h @@ -238,6 +238,8 @@ private: float _slowStartThreshold; int _packetRateIncreasePacketNumber; int _packetRateDecreasePacketNumber; + int _packetDropCount; + int _lastPacketDropped; QHash _reliableOutputChannels; QHash _reliableInputChannels; diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index 2fc8751e3f..f367cb93ce 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -31,7 +31,7 @@ #include "DomainHandler.h" #include "Node.h" -const int MAX_PACKET_SIZE = 1500; +const int MAX_PACKET_SIZE = 1450; const quint64 NODE_SILENCE_THRESHOLD_MSECS = 2 * 1000;