mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-08-16 15:30:52 +02:00
send time point with packet sent signal
This commit is contained in:
parent
75d4b156f1
commit
ecbba3d4cd
7 changed files with 29 additions and 14 deletions
|
@ -43,9 +43,10 @@ public:
|
|||
virtual void onACK(SequenceNumber ackNum) {}
|
||||
virtual void onLoss(SequenceNumber rangeStart, SequenceNumber rangeEnd) {}
|
||||
virtual void onTimeout() {}
|
||||
virtual void onPacketSent(int packetSize, SequenceNumber seqNum) {}
|
||||
|
||||
virtual bool shouldNAK() { return true; }
|
||||
|
||||
virtual void onPacketSent(int packetSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint) {}
|
||||
protected:
|
||||
void setAckInterval(int ackInterval) { _ackInterval = ackInterval; }
|
||||
void setRTO(int rto) { _userDefinedRTO = true; _rto = rto; }
|
||||
|
|
|
@ -262,16 +262,17 @@ void Connection::sync() {
|
|||
}
|
||||
}
|
||||
|
||||
void Connection::recordSentPackets(int dataSize, int payloadSize, SequenceNumber seqNum) {
|
||||
void Connection::recordSentPackets(int dataSize, int payloadSize,
|
||||
SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint) {
|
||||
_stats.recordSentPackets(payloadSize, dataSize);
|
||||
|
||||
_congestionControl->onPacketSent(dataSize, seqNum);
|
||||
_congestionControl->onPacketSent(dataSize, seqNum, timePoint);
|
||||
}
|
||||
|
||||
void Connection::recordRetransmission(int packetSize, SequenceNumber seqNum) {
|
||||
void Connection::recordRetransmission(int packetSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint) {
|
||||
_stats.record(ConnectionStats::Stats::Retransmission);
|
||||
|
||||
_congestionControl->onPacketSent(packetSize, seqNum);
|
||||
_congestionControl->onPacketSent(packetSize, seqNum, timePoint);
|
||||
}
|
||||
|
||||
void Connection::sendACK(bool wasCausedBySyncTimeout) {
|
||||
|
|
|
@ -87,8 +87,8 @@ signals:
|
|||
void receiverHandshakeRequestComplete(const HifiSockAddr& sockAddr);
|
||||
|
||||
private slots:
|
||||
void recordSentPackets(int dataSize, int payloadSize, SequenceNumber seqNum);
|
||||
void recordRetransmission(int packetSize, SequenceNumber sequenceNumber);
|
||||
void recordSentPackets(int dataSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint);
|
||||
void recordRetransmission(int packetSize, SequenceNumber sequenceNumber, p_high_resolution_clock::time_point timePoint);
|
||||
void queueInactive();
|
||||
void queueTimeout();
|
||||
void queueShortCircuitLoss(quint32 sequenceNumber);
|
||||
|
|
|
@ -256,7 +256,7 @@ bool SendQueue::sendNewPacketAndAddToSentList(std::unique_ptr<Packet> newPacket,
|
|||
}
|
||||
Q_ASSERT_X(!newPacket, "SendQueue::sendNewPacketAndAddToSentList()", "Overriden packet in sent list");
|
||||
|
||||
emit packetSent(packetSize, payloadSize, sequenceNumber);
|
||||
emit packetSent(packetSize, payloadSize, sequenceNumber, p_high_resolution_clock::now());
|
||||
|
||||
if (bytesWritten < 0) {
|
||||
// this is a short-circuit loss - we failed to put this packet on the wire
|
||||
|
@ -492,7 +492,7 @@ bool SendQueue::maybeResendPacket() {
|
|||
sentLocker.unlock();
|
||||
}
|
||||
|
||||
emit packetRetransmitted(resendPacket.getWireSize(), it->first);
|
||||
emit packetRetransmitted(resendPacket.getWireSize(), it->first, p_high_resolution_clock::now());
|
||||
|
||||
// Signal that we did resend a packet
|
||||
return true;
|
||||
|
|
|
@ -74,8 +74,8 @@ public slots:
|
|||
void handshakeACK(SequenceNumber initialSequenceNumber);
|
||||
|
||||
signals:
|
||||
void packetSent(int dataSize, int payloadSize, SequenceNumber seqNum);
|
||||
void packetRetransmitted(int dataSize, SequenceNumber seqNum);
|
||||
void packetSent(int dataSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint);
|
||||
void packetRetransmitted(int dataSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint);
|
||||
|
||||
void queueInactive();
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include "TCPVegasCC.h"
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QtGlobal>
|
||||
|
||||
using namespace udt;
|
||||
|
@ -65,6 +66,10 @@ void TCPVegasCC::performCongestionAvoidance(udt::SequenceNumber ack, int numAcke
|
|||
static const int VEGAS_BETA_SEGMENTS = 4;
|
||||
static const int VEGAS_GAMMA_SEGMENTS = 1;
|
||||
|
||||
qDebug() << "============";
|
||||
qDebug() << "PCA" << _numRTT;
|
||||
qDebug() << "CWS:" << _congestionWindowSize << "SS:" << _sendSlowStartThreshold;
|
||||
|
||||
if (_numRTT < VEGAS_MIN_RTT_FOR_CALC) {
|
||||
// Vegas calculations are only done if there are enough RTT samples to be
|
||||
// pretty sure that at least one sample did not come from a delayed ACK.
|
||||
|
@ -83,6 +88,10 @@ void TCPVegasCC::performCongestionAvoidance(udt::SequenceNumber ack, int numAcke
|
|||
int expectedWindowSize = _congestionWindowSize * _baseRTT / rtt;
|
||||
int diff = _congestionWindowSize * (rtt - _baseRTT) / _baseRTT;
|
||||
|
||||
qDebug() << "BRTT:" << _baseRTT << "CRTT:" << _currentMinRTT;
|
||||
qDebug() << "EWS" << expectedWindowSize;
|
||||
qDebug() << "D:" << diff;
|
||||
|
||||
bool inWindowReduction = false;
|
||||
|
||||
if (diff > VEGAS_GAMMA_SEGMENTS && isInSlowStart()) {
|
||||
|
@ -130,10 +139,13 @@ void TCPVegasCC::performCongestionAvoidance(udt::SequenceNumber ack, int numAcke
|
|||
_currentMinRTT = std::numeric_limits<int>::max();
|
||||
_numRTT = 0;
|
||||
}
|
||||
|
||||
qDebug() << "CW:" << _congestionWindowSize << "SS:" << _sendSlowStartThreshold;
|
||||
qDebug() << "============";
|
||||
}
|
||||
|
||||
|
||||
void TCPVegasCC::onPacketSent(int packetSize, SequenceNumber seqNum) {
|
||||
_sentPacketTimes[seqNum] = { p_high_resolution_clock::now(), packetSize };
|
||||
void TCPVegasCC::onPacketSent(int packetSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint) {
|
||||
_sentPacketTimes[seqNum] = { timePoint, packetSize };
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,10 @@ public:
|
|||
virtual void onACK(SequenceNumber ackNum) override;
|
||||
virtual void onLoss(SequenceNumber rangeStart, SequenceNumber rangeEnd) override {};
|
||||
virtual void onTimeout() override {};
|
||||
virtual void onPacketSent(int packetSize, SequenceNumber seqNum) override;
|
||||
|
||||
virtual bool shouldNAK() { return false; }
|
||||
|
||||
virtual void onPacketSent(int packetSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint) override;
|
||||
|
||||
protected:
|
||||
virtual void performCongestionAvoidance(SequenceNumber ack, int numAcked) override;
|
||||
|
|
Loading…
Reference in a new issue