From b357e54dd5b2730ebc3d26e67b721e1aa57e3a5f Mon Sep 17 00:00:00 2001 From: Christoffer Rodbro Date: Fri, 23 Nov 2018 11:19:32 +0100 Subject: [PATCH] Add field trial config to disable pacer emergency stops. Bug: none Change-Id: Ie92c4ef82e5ce3e222ec85df21acfb233b16b85d Reviewed-on: https://webrtc-review.googlesource.com/c/111883 Reviewed-by: Sebastian Jansson Commit-Queue: Christoffer Rodbro Cr-Commit-Position: refs/heads/master@{#25767} --- .../rtp/control_handler.cc | 20 ++++++++++++------- .../rtp/control_handler.h | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/modules/congestion_controller/rtp/control_handler.cc b/modules/congestion_controller/rtp/control_handler.cc index da22691f5c..e6cadb720e 100644 --- a/modules/congestion_controller/rtp/control_handler.cc +++ b/modules/congestion_controller/rtp/control_handler.cc @@ -20,18 +20,23 @@ namespace { // When PacerPushbackExperiment is enabled, build-up in the pacer due to // the congestion window and/or data spikes reduces encoder allocations. -const char kPacerPushbackExperiment[] = "WebRTC-PacerPushbackExperiment"; - bool IsPacerPushbackExperimentEnabled() { - return field_trial::IsEnabled(kPacerPushbackExperiment); + return field_trial::IsEnabled("WebRTC-PacerPushbackExperiment"); } + +// By default, pacer emergency stops encoder when buffer reaches a high level. +bool IsPacerEmergencyStopDisabled() { + return field_trial::IsEnabled("WebRTC-DisablePacerEmergencyStop"); +} + } // namespace CongestionControlHandler::CongestionControlHandler( NetworkChangedObserver* observer, PacedSender* pacer) : observer_(observer), pacer_(pacer), - pacer_pushback_experiment_(IsPacerPushbackExperimentEnabled()) { + pacer_pushback_experiment_(IsPacerPushbackExperimentEnabled()), + disable_pacer_emergency_stop_(IsPacerEmergencyStopDisabled()) { sequenced_checker_.Detach(); } @@ -109,9 +114,7 @@ void CongestionControlHandler::OnNetworkInvalidation() { if (!network_available_) { target_bitrate_bps = 0; - } else if (!pacer_pushback_experiment_) { - target_bitrate_bps = IsSendQueueFull() ? 0 : target_bitrate_bps; - } else { + } else if (pacer_pushback_experiment_) { int64_t queue_length_ms = pacer_expected_queue_ms_; if (queue_length_ms == 0) { @@ -124,7 +127,10 @@ void CongestionControlHandler::OnNetworkInvalidation() { target_bitrate_bps *= encoding_rate_ratio_; target_bitrate_bps = target_bitrate_bps < 50000 ? 0 : target_bitrate_bps; + } else if (!disable_pacer_emergency_stop_) { + target_bitrate_bps = IsSendQueueFull() ? 0 : target_bitrate_bps; } + if (HasNetworkParametersToReportChanged(target_bitrate_bps, fraction_loss, rtt_ms)) { observer_->OnNetworkChanged(target_bitrate_bps, fraction_loss, rtt_ms, diff --git a/modules/congestion_controller/rtp/control_handler.h b/modules/congestion_controller/rtp/control_handler.h index ff54ada22e..456c2a9e27 100644 --- a/modules/congestion_controller/rtp/control_handler.h +++ b/modules/congestion_controller/rtp/control_handler.h @@ -59,7 +59,8 @@ class CongestionControlHandler { int64_t last_reported_target_bitrate_bps_ = 0; uint8_t last_reported_fraction_loss_ = 0; int64_t last_reported_rtt_ms_ = 0; - const bool pacer_pushback_experiment_ = false; + const bool pacer_pushback_experiment_; + const bool disable_pacer_emergency_stop_; uint32_t min_pushback_target_bitrate_bps_; int64_t pacer_expected_queue_ms_ = 0; double encoding_rate_ratio_ = 1.0;