Adding task queue congestion control experiment.

This adds a field trial that allows for use of the new task queue based
send side congestion controller in the rtp transport controller send.

Bug: webrtc:8415
Change-Id: I93e0cefcbfd1c5724e87885cf828380a54c39538
Reviewed-on: https://webrtc-review.googlesource.com/58380
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22412}
This commit is contained in:
Sebastian Jansson 2018-03-13 19:07:46 +01:00 committed by Commit Bot
parent 22e623ad68
commit 19bea5135f
2 changed files with 38 additions and 11 deletions

View File

@ -97,10 +97,12 @@ rtc_source_set("rtp_sender") {
"..:webrtc_common",
"../modules/congestion_controller",
"../modules/congestion_controller/network_control",
"../modules/congestion_controller/rtp:congestion_controller",
"../modules/pacing",
"../modules/utility",
"../rtc_base:rtc_base",
"../rtc_base:rtc_base_approved",
"../system_wrappers:field_trial_api",
]
}

View File

@ -11,12 +11,42 @@
#include "call/rtp_transport_controller_send.h"
#include "modules/congestion_controller/include/send_side_congestion_controller.h"
#include "modules/congestion_controller/network_control/include/network_control.h"
#include "modules/congestion_controller/rtp/include/send_side_congestion_controller.h"
#include "rtc_base/location.h"
#include "rtc_base/logging.h"
#include "rtc_base/ptr_util.h"
#include "system_wrappers/include/field_trial.h"
namespace webrtc {
namespace {
const char kTaskQueueExperiment[] = "WebRTC-TaskQueueCongestionControl";
using TaskQueueController = webrtc::webrtc_cc::SendSideCongestionController;
bool TaskQueueExperimentEnabled() {
std::string trial = webrtc::field_trial::FindFullName(kTaskQueueExperiment);
return trial.find("Enable") == 0;
}
std::unique_ptr<SendSideCongestionControllerInterface> CreateController(
Clock* clock,
webrtc::RtcEventLog* event_log,
PacedSender* pacer,
const BitrateConstraints& bitrate_config,
bool task_queue_controller) {
if (task_queue_controller) {
return rtc::MakeUnique<webrtc::webrtc_cc::SendSideCongestionController>(
clock, event_log, pacer, bitrate_config.start_bitrate_bps,
bitrate_config.min_bitrate_bps, bitrate_config.max_bitrate_bps);
}
auto cc = rtc::MakeUnique<webrtc::SendSideCongestionController>(
clock, nullptr /* observer */, event_log, pacer);
cc->SignalNetworkState(kNetworkDown);
cc->SetBweBitrates(bitrate_config.min_bitrate_bps,
bitrate_config.start_bitrate_bps,
bitrate_config.max_bitrate_bps);
return std::move(cc);
}
} // namespace
RtpTransportControllerSend::RtpTransportControllerSend(
Clock* clock,
@ -24,19 +54,14 @@ RtpTransportControllerSend::RtpTransportControllerSend(
const BitrateConstraints& bitrate_config)
: clock_(clock),
pacer_(clock, &packet_router_, event_log),
send_side_cc_(
rtc::MakeUnique<SendSideCongestionController>(clock,
nullptr /* observer */,
event_log,
&pacer_)),
send_side_cc_(CreateController(clock,
event_log,
&pacer_,
bitrate_config,
TaskQueueExperimentEnabled())),
bitrate_configurator_(bitrate_config),
process_thread_(ProcessThread::Create("SendControllerThread")),
observer_(nullptr) {
send_side_cc_->SignalNetworkState(kNetworkDown);
send_side_cc_->SetBweBitrates(bitrate_config.min_bitrate_bps,
bitrate_config.start_bitrate_bps,
bitrate_config.max_bitrate_bps);
process_thread_->RegisterModule(&pacer_, RTC_FROM_HERE);
process_thread_->RegisterModule(send_side_cc_.get(), RTC_FROM_HERE);
process_thread_->Start();