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:
parent
4389b4d96b
commit
19f51434e8
@ -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
|
||||
|
||||
@ -176,6 +176,8 @@ class FakeNetworkPipe {
|
||||
|
||||
int64_t last_log_time_;
|
||||
|
||||
int64_t capacity_delay_error_bytes_ = 0;
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(FakeNetworkPipe);
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user