Keep track of the capacity delay error in the FakeNetworkPipe.

The FakeNetworkPipe use millisecond precision to calculate the delay induced by
the size of the packet being sent. The problem is that it rounds the delay down
to the closest millisecond which can cause a significant error in the actual
throughput. We keep track of that error to compensate the delay cause by
subsequent packets.

BUG=None

Review-Url: https://codereview.webrtc.org/3010653002
Cr-Commit-Position: refs/heads/master@{#19732}
This commit is contained in:
philipel 2017-09-07 09:08:50 -07:00 committed by Commit Bot
parent 4389b4d96b
commit 19f51434e8
2 changed files with 12 additions and 2 deletions

View File

@ -132,8 +132,16 @@ void FakeNetworkPipe::SendPacket(const uint8_t* data, size_t data_length) {
// Delay introduced by the link capacity.
int64_t capacity_delay_ms = 0;
if (config_.link_capacity_kbps > 0)
capacity_delay_ms = data_length / (config_.link_capacity_kbps / 8);
if (config_.link_capacity_kbps > 0) {
const int bytes_per_millisecond = config_.link_capacity_kbps / 8;
// To round to the closest millisecond we add half a milliseconds worth of
// bytes to the delay calculation.
capacity_delay_ms = (data_length + capacity_delay_error_bytes_ +
bytes_per_millisecond / 2) /
bytes_per_millisecond;
capacity_delay_error_bytes_ +=
data_length - capacity_delay_ms * bytes_per_millisecond;
}
int64_t network_start_time = time_now;
// Check if there already are packets on the link and change network start

View File

@ -176,6 +176,8 @@ class FakeNetworkPipe {
int64_t last_log_time_;
int64_t capacity_delay_error_bytes_ = 0;
RTC_DISALLOW_COPY_AND_ASSIGN(FakeNetworkPipe);
};