Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Unified Diff: webrtc/modules/congestion_controller/delay_based_bwe.cc

Issue 2407143002: Remove GetFeedbackInterval in sender side BWE. (Closed)
Patch Set: Respond to comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/congestion_controller/delay_based_bwe.cc
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.cc b/webrtc/modules/congestion_controller/delay_based_bwe.cc
index c091cb9a81721acc7ba78eb892bc5a4578eadb7a..73120381cc665f8f26395fe0f25ead8ff31291b0 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.cc
@@ -153,7 +153,6 @@ DelayBasedBwe::DelayBasedBwe(RtcEventLog* event_log, const Clock* clock)
trendline_estimator_(),
detector_(),
receiver_incoming_bitrate_(),
- last_update_ms_(-1),
last_seen_packet_ms_(-1),
uma_recorded_(false),
probe_bitrate_estimator_(event_log),
@@ -189,27 +188,27 @@ DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedbackVector(
BweNames::kBweNamesMax);
uma_recorded_ = true;
}
- Result aggregated_result;
+ bool overusing = false;
bool delayed_feedback = true;
for (const auto& packet_feedback : sorted_packet_feedback_vector) {
if (packet_feedback.send_time_ms < 0)
continue;
delayed_feedback = false;
- Result result = IncomingPacketFeedback(packet_feedback);
- if (result.updated)
- aggregated_result = result;
+ IncomingPacketFeedback(packet_feedback);
+ overusing |= detector_.State() == BandwidthUsage::kBwOverusing;
}
if (delayed_feedback) {
++consecutive_delayed_feedbacks_;
+ if (consecutive_delayed_feedbacks_ >= kMaxConsecutiveFailedLookups) {
+ consecutive_delayed_feedbacks_ = 0;
+ return OnLongFeedbackDelay(
+ sorted_packet_feedback_vector.back().arrival_time_ms);
+ }
} else {
consecutive_delayed_feedbacks_ = 0;
+ return MaybeUpdateEstimate(overusing);
}
- if (consecutive_delayed_feedbacks_ >= kMaxConsecutiveFailedLookups) {
- aggregated_result = OnLongFeedbackDelay(
- sorted_packet_feedback_vector.back().arrival_time_ms);
- consecutive_delayed_feedbacks_ = 0;
- }
- return aggregated_result;
+ return Result();
}
DelayBasedBwe::Result DelayBasedBwe::OnLongFeedbackDelay(
@@ -229,7 +228,7 @@ DelayBasedBwe::Result DelayBasedBwe::OnLongFeedbackDelay(
return result;
}
-DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedback(
+void DelayBasedBwe::IncomingPacketFeedback(
const PacketFeedback& packet_feedback) {
int64_t now_ms = clock_->TimeInMilliseconds();
@@ -272,40 +271,36 @@ DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedback(
trendline_estimator_->num_of_deltas(),
packet_feedback.arrival_time_ms);
}
-
- int probing_bps = 0;
if (packet_feedback.pacing_info.probe_cluster_id !=
PacedPacketInfo::kNotAProbe) {
- probing_bps =
- probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(packet_feedback);
+ probe_bitrate_estimator_.HandleProbeAndEstimateBitrate(packet_feedback);
}
+}
+
+DelayBasedBwe::Result DelayBasedBwe::MaybeUpdateEstimate(bool overusing) {
+ Result result;
+ int64_t now_ms = clock_->TimeInMilliseconds();
+
rtc::Optional<uint32_t> acked_bitrate_bps =
receiver_incoming_bitrate_.bitrate_bps();
+ rtc::Optional<int> probe_bitrate_bps =
+ probe_bitrate_estimator_.FetchAndResetLastEstimatedBitrateBps();
// Currently overusing the bandwidth.
- if (detector_.State() == BandwidthUsage::kBwOverusing) {
+ if (overusing) {
if (acked_bitrate_bps &&
rate_control_.TimeToReduceFurther(now_ms, *acked_bitrate_bps)) {
- result.updated =
- UpdateEstimate(packet_feedback.arrival_time_ms, now_ms,
- acked_bitrate_bps, &result.target_bitrate_bps);
+ result.updated = UpdateEstimate(now_ms, acked_bitrate_bps, overusing,
+ &result.target_bitrate_bps);
}
- } else if (probing_bps > 0) {
- // No overuse, but probing measured a bitrate.
- rate_control_.SetEstimate(probing_bps, packet_feedback.arrival_time_ms);
- result.probe = true;
- result.updated =
- UpdateEstimate(packet_feedback.arrival_time_ms, now_ms,
- acked_bitrate_bps, &result.target_bitrate_bps);
- }
- if (!result.updated &&
- (last_update_ms_ == -1 ||
- now_ms - last_update_ms_ > rate_control_.GetFeedbackInterval())) {
- result.updated =
- UpdateEstimate(packet_feedback.arrival_time_ms, now_ms,
- acked_bitrate_bps, &result.target_bitrate_bps);
+ } else {
+ if (probe_bitrate_bps) {
+ rate_control_.SetEstimate(*probe_bitrate_bps, now_ms);
+ result.probe = true;
+ }
+ result.updated = UpdateEstimate(now_ms, acked_bitrate_bps, overusing,
+ &result.target_bitrate_bps);
}
if (result.updated) {
- last_update_ms_ = now_ms;
BWE_TEST_LOGGING_PLOT(1, "target_bitrate_bps", now_ms,
result.target_bitrate_bps);
if (event_log_ && (result.target_bitrate_bps != last_logged_bitrate_ ||
@@ -316,17 +311,18 @@ DelayBasedBwe::Result DelayBasedBwe::IncomingPacketFeedback(
last_logged_state_ = detector_.State();
}
}
-
return result;
}
-bool DelayBasedBwe::UpdateEstimate(int64_t arrival_time_ms,
- int64_t now_ms,
+bool DelayBasedBwe::UpdateEstimate(int64_t now_ms,
rtc::Optional<uint32_t> acked_bitrate_bps,
+ bool overusing,
uint32_t* target_bitrate_bps) {
// TODO(terelius): RateControlInput::noise_var is deprecated and will be
// removed. In the meantime, we set it to zero.
- const RateControlInput input(detector_.State(), acked_bitrate_bps, 0);
+ const RateControlInput input(
+ overusing ? BandwidthUsage::kBwOverusing : detector_.State(),
+ acked_bitrate_bps, 0);
*target_bitrate_bps = rate_control_.Update(&input, now_ms);
return rate_control_.ValidEstimate();
}

Powered by Google App Engine
This is Rietveld 408576698