Chromium Code Reviews

Side by Side Diff: webrtc/modules/congestion_controller/send_side_congestion_controller.cc

Issue 2986563002: Add probing to recover faster from large bitrate drops. (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 265 matching lines...)
276 void SendSideCongestionController::OnTransportFeedback( 276 void SendSideCongestionController::OnTransportFeedback(
277 const rtcp::TransportFeedback& feedback) { 277 const rtcp::TransportFeedback& feedback) {
278 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_); 278 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
279 transport_feedback_adapter_.OnTransportFeedback(feedback); 279 transport_feedback_adapter_.OnTransportFeedback(feedback);
280 std::vector<PacketFeedback> feedback_vector = ReceivedPacketFeedbackVector( 280 std::vector<PacketFeedback> feedback_vector = ReceivedPacketFeedbackVector(
281 transport_feedback_adapter_.GetTransportFeedbackVector()); 281 transport_feedback_adapter_.GetTransportFeedbackVector());
282 SortPacketFeedbackVector(&feedback_vector); 282 SortPacketFeedbackVector(&feedback_vector);
283 283
284 bool currently_in_alr = 284 bool currently_in_alr =
285 pacer_->GetApplicationLimitedRegionStartTime().has_value(); 285 pacer_->GetApplicationLimitedRegionStartTime().has_value();
286 if (!currently_in_alr && was_in_alr_) { 286 if (was_in_alr_ && !currently_in_alr) {
287 acknowledged_bitrate_estimator_->SetAlrEndedTimeMs(rtc::TimeMillis()); 287 int64_t now_ms = rtc::TimeMillis();
288 acknowledged_bitrate_estimator_->SetAlrEndedTimeMs(now_ms);
289 probe_controller_->SetAlrEndedTimeMs(now_ms);
288 } 290 }
289 was_in_alr_ = currently_in_alr; 291 was_in_alr_ = currently_in_alr;
290 292
291 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector( 293 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector(
292 feedback_vector); 294 feedback_vector);
293 DelayBasedBwe::Result result; 295 DelayBasedBwe::Result result;
294 { 296 {
295 rtc::CritScope cs(&bwe_lock_); 297 rtc::CritScope cs(&bwe_lock_);
296 result = delay_based_bwe_->IncomingPacketFeedbackVector( 298 result = delay_based_bwe_->IncomingPacketFeedbackVector(
297 feedback_vector, acknowledged_bitrate_estimator_->bitrate_bps()); 299 feedback_vector, acknowledged_bitrate_estimator_->bitrate_bps());
298 } 300 }
299 if (result.updated) 301 if (result.updated)
300 bitrate_controller_->OnDelayBasedBweResult(result); 302 bitrate_controller_->OnDelayBasedBweResult(result);
303 if (result.suggested_probe_bps) {
304 probe_controller_->RequestProbe(*result.suggested_probe_bps);
305 }
301 } 306 }
302 307
303 std::vector<PacketFeedback> 308 std::vector<PacketFeedback>
304 SendSideCongestionController::GetTransportFeedbackVector() const { 309 SendSideCongestionController::GetTransportFeedbackVector() const {
305 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_); 310 RTC_DCHECK_RUNS_SERIALIZED(&worker_race_);
306 return transport_feedback_adapter_.GetTransportFeedbackVector(); 311 return transport_feedback_adapter_.GetTransportFeedbackVector();
307 } 312 }
308 313
309 void SendSideCongestionController::MaybeTriggerOnNetworkChanged() { 314 void SendSideCongestionController::MaybeTriggerOnNetworkChanged() {
310 uint32_t bitrate_bps; 315 uint32_t bitrate_bps;
(...skipping 47 matching lines...)
358 bool SendSideCongestionController::IsSendQueueFull() const { 363 bool SendSideCongestionController::IsSendQueueFull() const {
359 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; 364 return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
360 } 365 }
361 366
362 bool SendSideCongestionController::IsNetworkDown() const { 367 bool SendSideCongestionController::IsNetworkDown() const {
363 rtc::CritScope cs(&network_state_lock_); 368 rtc::CritScope cs(&network_state_lock_);
364 return network_state_ == kNetworkDown; 369 return network_state_ == kNetworkDown;
365 } 370 }
366 371
367 } // namespace webrtc 372 } // namespace webrtc
OLDNEW

Powered by Google App Engine