in src/Transport/TcpTransport.cs [510:566]
public bool TryUpdateBufferSize(int bytes, out int bufferSize)
{
this.transferedBytes += Math.Max(bytes, this.unitSize);
bufferSize = 0;
int newLevel = 0;
bool levelChanged = false;
DateTime now = DateTime.UtcNow;
if (now.Ticks - this.firstOperation.Ticks >= durationTicks)
{
for (int i = thresholds.Length - 1; i >= 0; --i)
{
if (this.transferedBytes >= thresholds[i])
{
newLevel = i;
break;
}
}
if (newLevel > this.level)
{
if (this.direction > 0)
{
this.level++;
bufferSize = bufferSizes[this.level];
levelChanged = true;
}
else
{
this.direction = 1;
}
}
else if (newLevel < this.level)
{
if (this.direction < 0)
{
this.level--;
bufferSize = bufferSizes[this.level];
levelChanged = true;
}
else
{
this.direction = -1;
}
}
else
{
this.direction = 0;
}
this.transferedBytes = 0;
this.firstOperation = now;
}
return levelChanged;
}