This makes it safer to reason about the common case where send time information is available. We don't have to either assume that it's available, or check it everywhere the PacketResult struct is used. To achieve this, a new field is added to TransportPacketsFeedback and a new interface is introduced to clearly separate which field is used. A possible followup would be to introduce a separate struct. That would complicate the signature of ProcessTransportFeedback. Bug: webrtc:9934 Change-Id: I2b319e4df2b557fbd4de66b812744bca7d91ca15 Reviewed-on: https://webrtc-review.googlesource.com/c/107080 Commit-Queue: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Björn Terelius <terelius@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25465}
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include <algorithm>
|
|
|
|
#include "modules/congestion_controller/pcc/rtt_tracker.h"
|
|
|
|
namespace webrtc {
|
|
namespace pcc {
|
|
|
|
RttTracker::RttTracker(TimeDelta initial_rtt, double alpha)
|
|
: rtt_estimate_(initial_rtt), alpha_(alpha) {}
|
|
|
|
void RttTracker::OnPacketsFeedback(
|
|
const std::vector<PacketResult>& packet_feedbacks,
|
|
Timestamp feedback_received_time) {
|
|
TimeDelta packet_rtt = TimeDelta::MinusInfinity();
|
|
for (const PacketResult& packet_result : packet_feedbacks) {
|
|
if (packet_result.receive_time.IsInfinite())
|
|
continue;
|
|
packet_rtt = std::max<TimeDelta>(
|
|
packet_rtt,
|
|
feedback_received_time - packet_result.sent_packet.send_time);
|
|
}
|
|
if (packet_rtt.IsFinite())
|
|
rtt_estimate_ = (1 - alpha_) * rtt_estimate_ + alpha_ * packet_rtt;
|
|
}
|
|
|
|
TimeDelta RttTracker::GetRtt() const {
|
|
return rtt_estimate_;
|
|
}
|
|
|
|
} // namespace pcc
|
|
} // namespace webrtc
|