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

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

Issue 2752233002: Split CongestionController into send- and receive-side classes. (Closed)
Patch Set: Use variable names receive_side_cc and send_side_cc. Created 3 years, 9 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/send_side_congestion_controller.cc
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc
similarity index 53%
copy from webrtc/modules/congestion_controller/congestion_controller.cc
copy to webrtc/modules/congestion_controller/send_side_congestion_controller.cc
index 6dc25d2b77ab8205d41fcb6fe11d8a83ff352b12..f3cbed96520e2c911621a13a22f26bf9a0253be3 100644
--- a/webrtc/modules/congestion_controller/congestion_controller.cc
+++ b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc
@@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "webrtc/modules/congestion_controller/include/congestion_controller.h"
+#include "webrtc/modules/congestion_controller/include/send_side_congestion_controller.h"
#include <algorithm>
#include <memory>
@@ -21,13 +21,10 @@
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
#include "webrtc/modules/congestion_controller/probe_controller.h"
#include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h"
-#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h"
-#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h"
namespace webrtc {
namespace {
-static const uint32_t kTimeOffsetSwitchThreshold = 30;
static const int64_t kRetransmitWindowSizeMs = 500;
// Makes sure that the bitrate and the min, max values are in valid range.
@@ -47,129 +44,32 @@ static void ClampBitrates(int* bitrate_bps,
} // namespace
-CongestionController::WrappingBitrateEstimator::WrappingBitrateEstimator(
- RemoteBitrateObserver* observer, const Clock* clock)
- : observer_(observer),
- clock_(clock),
- rbe_(new RemoteBitrateEstimatorSingleStream(observer_, clock_)),
- using_absolute_send_time_(false),
- packets_since_absolute_send_time_(0),
- min_bitrate_bps_(congestion_controller::GetMinBitrateBps()) {}
-
-void CongestionController::WrappingBitrateEstimator::IncomingPacket(
- int64_t arrival_time_ms,
- size_t payload_size,
- const RTPHeader& header) {
- rtc::CritScope cs(&crit_sect_);
- PickEstimatorFromHeader(header);
- rbe_->IncomingPacket(arrival_time_ms, payload_size, header);
-}
-
-void CongestionController::WrappingBitrateEstimator::Process() {
- rtc::CritScope cs(&crit_sect_);
- rbe_->Process();
-}
-
-int64_t CongestionController::WrappingBitrateEstimator::TimeUntilNextProcess() {
- rtc::CritScope cs(&crit_sect_);
- return rbe_->TimeUntilNextProcess();
-}
-
-void CongestionController::WrappingBitrateEstimator::OnRttUpdate(
- int64_t avg_rtt_ms, int64_t max_rtt_ms) {
- rtc::CritScope cs(&crit_sect_);
- rbe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
-}
-
-void CongestionController::WrappingBitrateEstimator::RemoveStream(
- unsigned int ssrc) {
- rtc::CritScope cs(&crit_sect_);
- rbe_->RemoveStream(ssrc);
-}
-
-bool CongestionController::WrappingBitrateEstimator::LatestEstimate(
- std::vector<unsigned int>* ssrcs,
- unsigned int* bitrate_bps) const {
- rtc::CritScope cs(&crit_sect_);
- return rbe_->LatestEstimate(ssrcs, bitrate_bps);
-}
-
-void CongestionController::WrappingBitrateEstimator::SetMinBitrate(
- int min_bitrate_bps) {
- rtc::CritScope cs(&crit_sect_);
- rbe_->SetMinBitrate(min_bitrate_bps);
- min_bitrate_bps_ = min_bitrate_bps;
-}
-
-void CongestionController::WrappingBitrateEstimator::PickEstimatorFromHeader(
- const RTPHeader& header) {
- if (header.extension.hasAbsoluteSendTime) {
- // If we see AST in header, switch RBE strategy immediately.
- if (!using_absolute_send_time_) {
- LOG(LS_INFO) <<
- "WrappingBitrateEstimator: Switching to absolute send time RBE.";
- using_absolute_send_time_ = true;
- PickEstimator();
- }
- packets_since_absolute_send_time_ = 0;
- } else {
- // When we don't see AST, wait for a few packets before going back to TOF.
- if (using_absolute_send_time_) {
- ++packets_since_absolute_send_time_;
- if (packets_since_absolute_send_time_ >= kTimeOffsetSwitchThreshold) {
- LOG(LS_INFO) << "WrappingBitrateEstimator: Switching to transmission "
- << "time offset RBE.";
- using_absolute_send_time_ = false;
- PickEstimator();
- }
- }
- }
-}
-
-// Instantiate RBE for Time Offset or Absolute Send Time extensions.
-void CongestionController::WrappingBitrateEstimator::PickEstimator() {
- if (using_absolute_send_time_) {
- rbe_.reset(new RemoteBitrateEstimatorAbsSendTime(observer_, clock_));
- } else {
- rbe_.reset(new RemoteBitrateEstimatorSingleStream(observer_, clock_));
- }
- rbe_->SetMinBitrate(min_bitrate_bps_);
-}
-
-CongestionController::CongestionController(
+SendSideCongestionController::SendSideCongestionController(
const Clock* clock,
Observer* observer,
- RemoteBitrateObserver* remote_bitrate_observer,
RtcEventLog* event_log,
PacketRouter* packet_router)
- : CongestionController(
+ : SendSideCongestionController(
clock,
observer,
- remote_bitrate_observer,
event_log,
- packet_router,
std::unique_ptr<PacedSender>(new PacedSender(clock, packet_router))) {
}
-CongestionController::CongestionController(
+SendSideCongestionController::SendSideCongestionController(
const Clock* clock,
Observer* observer,
- RemoteBitrateObserver* remote_bitrate_observer,
RtcEventLog* event_log,
- PacketRouter* packet_router,
std::unique_ptr<PacedSender> pacer)
: clock_(clock),
observer_(observer),
event_log_(event_log),
- packet_router_(packet_router),
pacer_(std::move(pacer)),
bitrate_controller_(
BitrateController::CreateBitrateController(clock_, event_log)),
probe_controller_(new ProbeController(pacer_.get(), clock_)),
retransmission_rate_limiter_(
new RateLimiter(clock, kRetransmitWindowSizeMs)),
- remote_bitrate_estimator_(remote_bitrate_observer, clock_),
- remote_estimator_proxy_(clock_, packet_router_),
transport_feedback_adapter_(clock_),
last_reported_bitrate_bps_(0),
last_reported_fraction_loss_(0),
@@ -181,34 +81,18 @@ CongestionController::CongestionController(
worker_thread_checker_.DetachFromThread();
}
-CongestionController::~CongestionController() {}
-
-void CongestionController::OnReceivedPacket(int64_t arrival_time_ms,
- size_t payload_size,
- const RTPHeader& header) {
- // Send-side BWE.
- if (header.extension.hasTransportSequenceNumber) {
- remote_estimator_proxy_.IncomingPacket(arrival_time_ms, payload_size,
- header);
- } else {
- // Receive-side BWE.
- remote_bitrate_estimator_.IncomingPacket(arrival_time_ms, payload_size,
- header);
- }
-}
+SendSideCongestionController::~SendSideCongestionController() {}
-void CongestionController::SetBweBitrates(int min_bitrate_bps,
- int start_bitrate_bps,
- int max_bitrate_bps) {
+void SendSideCongestionController::SetBweBitrates(int min_bitrate_bps,
+ int start_bitrate_bps,
+ int max_bitrate_bps) {
ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
- bitrate_controller_->SetBitrates(start_bitrate_bps,
- min_bitrate_bps,
+ bitrate_controller_->SetBitrates(start_bitrate_bps, min_bitrate_bps,
max_bitrate_bps);
probe_controller_->SetBitrates(min_bitrate_bps, start_bitrate_bps,
max_bitrate_bps);
- remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps);
{
rtc::CritScope cs(&bwe_lock_);
if (start_bitrate_bps > 0)
@@ -221,19 +105,16 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps,
// TODO(holmer): Split this up and use SetBweBitrates in combination with
// OnNetworkRouteChanged.
-void CongestionController::OnNetworkRouteChanged(
+void SendSideCongestionController::OnNetworkRouteChanged(
const rtc::NetworkRoute& network_route,
int bitrate_bps,
int min_bitrate_bps,
int max_bitrate_bps) {
ClampBitrates(&bitrate_bps, &min_bitrate_bps, &max_bitrate_bps);
// TODO(honghaiz): Recreate this object once the bitrate controller is
- // no longer exposed outside CongestionController.
+ // no longer exposed outside SendSideCongestionController.
bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps,
max_bitrate_bps);
- // TODO(honghaiz): Recreate this object once the remote bitrate estimator is
- // no longer exposed outside CongestionController.
- remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps);
transport_feedback_adapter_.SetNetworkIds(network_route.local_network_id,
network_route.remote_network_id);
@@ -242,7 +123,7 @@ void CongestionController::OnNetworkRouteChanged(
min_bitrate_bps_ = min_bitrate_bps;
delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
delay_based_bwe_->SetStartBitrate(bitrate_bps);
- delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
+ delay_based_bwe_->SetMinBitrate(min_bitrate_bps);
}
probe_controller_->Reset();
@@ -251,38 +132,29 @@ void CongestionController::OnNetworkRouteChanged(
MaybeTriggerOnNetworkChanged();
}
-BitrateController* CongestionController::GetBitrateController() const {
+BitrateController* SendSideCongestionController::GetBitrateController() const {
return bitrate_controller_.get();
}
-RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator(
- bool send_side_bwe) {
- if (send_side_bwe) {
- return &remote_estimator_proxy_;
- } else {
- return &remote_bitrate_estimator_;
- }
-}
-
-RateLimiter* CongestionController::GetRetransmissionRateLimiter() {
+RateLimiter* SendSideCongestionController::GetRetransmissionRateLimiter() {
return retransmission_rate_limiter_.get();
}
-void CongestionController::EnablePeriodicAlrProbing(bool enable) {
+void SendSideCongestionController::EnablePeriodicAlrProbing(bool enable) {
probe_controller_->EnablePeriodicAlrProbing(enable);
}
-void CongestionController::SetAllocatedSendBitrateLimits(
+void SendSideCongestionController::SetAllocatedSendBitrateLimits(
int min_send_bitrate_bps,
int max_padding_bitrate_bps) {
pacer_->SetSendBitrateLimits(min_send_bitrate_bps, max_padding_bitrate_bps);
}
-int64_t CongestionController::GetPacerQueuingDelayMs() const {
+int64_t SendSideCongestionController::GetPacerQueuingDelayMs() const {
return IsNetworkDown() ? 0 : pacer_->QueueInMs();
}
-void CongestionController::SignalNetworkState(NetworkState state) {
+void SendSideCongestionController::SignalNetworkState(NetworkState state) {
LOG(LS_INFO) << "SignalNetworkState "
<< (state == kNetworkUp ? "Up" : "Down");
if (state == kNetworkUp) {
@@ -298,13 +170,14 @@ void CongestionController::SignalNetworkState(NetworkState state) {
MaybeTriggerOnNetworkChanged();
}
-void CongestionController::SetTransportOverhead(
+void SendSideCongestionController::SetTransportOverhead(
size_t transport_overhead_bytes_per_packet) {
transport_feedback_adapter_.SetTransportOverhead(
transport_overhead_bytes_per_packet);
}
-void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) {
+void SendSideCongestionController::OnSentPacket(
+ const rtc::SentPacket& sent_packet) {
// We're not interested in packets without an id, which may be stun packets,
// etc, sent on the same transport.
if (sent_packet.packet_id == -1)
@@ -313,33 +186,30 @@ void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) {
sent_packet.send_time_ms);
}
-void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) {
- remote_bitrate_estimator_.OnRttUpdate(avg_rtt_ms, max_rtt_ms);
- {
- rtc::CritScope cs(&bwe_lock_);
- delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
- }
+void SendSideCongestionController::OnRttUpdate(int64_t avg_rtt_ms,
+ int64_t max_rtt_ms) {
+ rtc::CritScope cs(&bwe_lock_);
+ delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms);
}
-int64_t CongestionController::TimeUntilNextProcess() {
- return std::min(bitrate_controller_->TimeUntilNextProcess(),
- remote_bitrate_estimator_.TimeUntilNextProcess());
+int64_t SendSideCongestionController::TimeUntilNextProcess() {
+ return bitrate_controller_->TimeUntilNextProcess();
}
-void CongestionController::Process() {
+void SendSideCongestionController::Process() {
bitrate_controller_->Process();
- remote_bitrate_estimator_.Process();
probe_controller_->Process();
MaybeTriggerOnNetworkChanged();
}
-void CongestionController::AddPacket(uint16_t sequence_number,
- size_t length,
- const PacedPacketInfo& pacing_info) {
+void SendSideCongestionController::AddPacket(
+ uint16_t sequence_number,
+ size_t length,
+ const PacedPacketInfo& pacing_info) {
transport_feedback_adapter_.AddPacket(sequence_number, length, pacing_info);
}
-void CongestionController::OnTransportFeedback(
+void SendSideCongestionController::OnTransportFeedback(
const rtcp::TransportFeedback& feedback) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
transport_feedback_adapter_.OnTransportFeedback(feedback);
@@ -356,13 +226,13 @@ void CongestionController::OnTransportFeedback(
bitrate_controller_->OnDelayBasedBweResult(result);
}
-std::vector<PacketFeedback> CongestionController::GetTransportFeedbackVector()
- const {
+std::vector<PacketFeedback>
+SendSideCongestionController::GetTransportFeedbackVector() const {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
return transport_feedback_adapter_.GetTransportFeedbackVector();
}
-void CongestionController::MaybeTriggerOnNetworkChanged() {
+void SendSideCongestionController::MaybeTriggerOnNetworkChanged() {
// TODO(perkj): |observer_| can be nullptr if the ctor that accepts a
// BitrateObserver is used. Remove this check once the ctor is removed.
if (!observer_)
@@ -389,11 +259,10 @@ void CongestionController::MaybeTriggerOnNetworkChanged() {
}
observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt,
probing_interval_ms);
- remote_estimator_proxy_.OnBitrateChanged(bitrate_bps);
}
}
-bool CongestionController::HasNetworkParametersToReportChanged(
+bool SendSideCongestionController::HasNetworkParametersToReportChanged(
uint32_t bitrate_bps,
uint8_t fraction_loss,
int64_t rtt) {
@@ -412,11 +281,11 @@ bool CongestionController::HasNetworkParametersToReportChanged(
return changed;
}
-bool CongestionController::IsSendQueueFull() const {
+bool SendSideCongestionController::IsSendQueueFull() const {
return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs;
}
-bool CongestionController::IsNetworkDown() const {
+bool SendSideCongestionController::IsNetworkDown() const {
rtc::CritScope cs(&network_state_lock_);
return network_state_ == kNetworkDown;
}
« no previous file with comments | « webrtc/modules/congestion_controller/receive_side_congestion_controller.cc ('k') | webrtc/video/video_send_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698