Index: webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc |
diff --git a/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc b/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc |
index 247361df47da56c71eec5ec9e6bce838b802213c..10deb28e1b57da47ceb42fa6baf248580655fbf4 100644 |
--- a/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc |
+++ b/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc |
@@ -27,6 +27,7 @@ const int kLimitNumPackets = 20; |
const int kAvgPacketSizeBytes = 1000; |
const int kDefaultMinBitrateBps = 10000; |
const int kDefaultMaxBitrateBps = 1000000000; |
+const int64_t kLowBitrateLogPeriodMs = 10000; |
struct UmaRampUpMetric { |
const char* metric_name; |
@@ -71,6 +72,7 @@ SendSideBandwidthEstimation::SendSideBandwidthEstimation() |
bitrate_(0), |
min_bitrate_configured_(kDefaultMinBitrateBps), |
max_bitrate_configured_(kDefaultMaxBitrateBps), |
+ last_low_bitrate_log_ms_(-1), |
time_last_receiver_block_ms_(0), |
last_fraction_loss_(0), |
last_round_trip_time_ms_(0), |
@@ -118,9 +120,10 @@ void SendSideBandwidthEstimation::CurrentEstimate(int* bitrate, |
*rtt = last_round_trip_time_ms_; |
} |
-void SendSideBandwidthEstimation::UpdateReceiverEstimate(uint32_t bandwidth) { |
+void SendSideBandwidthEstimation::UpdateReceiverEstimate( |
+ int64_t now_ms, uint32_t bandwidth) { |
bwe_incoming_ = bandwidth; |
- bitrate_ = CapBitrateToThresholds(bitrate_); |
+ bitrate_ = CapBitrateToThresholds(now_ms, bitrate_); |
} |
void SendSideBandwidthEstimation::UpdateReceiverBlock(uint8_t fraction_loss, |
@@ -200,7 +203,7 @@ void SendSideBandwidthEstimation::UpdateEstimate(int64_t now_ms) { |
// packet loss reported, to allow startup bitrate probing. |
if (last_fraction_loss_ == 0 && IsInStartPhase(now_ms) && |
bwe_incoming_ > bitrate_) { |
- bitrate_ = CapBitrateToThresholds(bwe_incoming_); |
+ bitrate_ = CapBitrateToThresholds(now_ms, bwe_incoming_); |
min_bitrate_history_.clear(); |
min_bitrate_history_.push_back(std::make_pair(now_ms, bitrate_)); |
return; |
@@ -251,7 +254,7 @@ void SendSideBandwidthEstimation::UpdateEstimate(int64_t now_ms) { |
} |
} |
} |
- bitrate_ = CapBitrateToThresholds(bitrate_); |
+ bitrate_ = CapBitrateToThresholds(now_ms, bitrate_); |
} |
bool SendSideBandwidthEstimation::IsInStartPhase(int64_t now_ms) const { |
@@ -279,7 +282,8 @@ void SendSideBandwidthEstimation::UpdateMinHistory(int64_t now_ms) { |
min_bitrate_history_.push_back(std::make_pair(now_ms, bitrate_)); |
} |
-uint32_t SendSideBandwidthEstimation::CapBitrateToThresholds(uint32_t bitrate) { |
+uint32_t SendSideBandwidthEstimation::CapBitrateToThresholds( |
+ int64_t now_ms, uint32_t bitrate) { |
if (bwe_incoming_ > 0 && bitrate > bwe_incoming_) { |
bitrate = bwe_incoming_; |
} |
@@ -287,9 +291,13 @@ uint32_t SendSideBandwidthEstimation::CapBitrateToThresholds(uint32_t bitrate) { |
bitrate = max_bitrate_configured_; |
} |
if (bitrate < min_bitrate_configured_) { |
- LOG(LS_WARNING) << "Estimated available bandwidth " << bitrate / 1000 |
- << " kbps is below configured min bitrate " |
- << min_bitrate_configured_ / 1000 << " kbps."; |
+ if (last_low_bitrate_log_ms_ == -1 || |
+ now_ms - last_low_bitrate_log_ms_ > kLowBitrateLogPeriodMs) { |
+ LOG(LS_WARNING) << "Estimated available bandwidth " << bitrate / 1000 |
+ << " kbps is below configured min bitrate " |
+ << min_bitrate_configured_ / 1000 << " kbps."; |
+ last_low_bitrate_log_ms_ = now_ms; |
+ } |
bitrate = min_bitrate_configured_; |
} |
return bitrate; |