Add methods to register congestion controller observer after construction.

The point of this change is to make it possible to create the congestion
controller as part of creating RtpTransportController, later pass it to the
constructor of Call, and then let Call register itself as an observer.

BUG=webrtc:7135

Review-Url: https://codereview.webrtc.org/2795643002
Cr-Commit-Position: refs/heads/master@{#17504}
This commit is contained in:
nisse 2017-04-03 04:54:25 -07:00 committed by Commit bot
parent d197cd9ad9
commit 23425f9068
2 changed files with 27 additions and 8 deletions

View File

@ -57,6 +57,7 @@ class SendSideCongestionController : public CallStatsObserver,
protected:
virtual ~Observer() {}
};
// TODO(nisse): Consider deleting the |observer| argument to constructors.
SendSideCongestionController(const Clock* clock,
Observer* observer,
RtcEventLog* event_log,
@ -70,6 +71,10 @@ class SendSideCongestionController : public CallStatsObserver,
void RegisterPacketFeedbackObserver(PacketFeedbackObserver* observer);
void DeRegisterPacketFeedbackObserver(PacketFeedbackObserver* observer);
// Currently, there can be at most one observer.
void RegisterNetworkObserver(Observer* observer);
void DeRegisterNetworkObserver(Observer* observer);
virtual void SetBweBitrates(int min_bitrate_bps,
int start_bitrate_bps,
int max_bitrate_bps);
@ -130,7 +135,8 @@ class SendSideCongestionController : public CallStatsObserver,
uint8_t fraction_loss,
int64_t rtt);
const Clock* const clock_;
Observer* const observer_;
rtc::CriticalSection observer_lock_;
Observer* observer_ GUARDED_BY(observer_lock_);
RtcEventLog* const event_log_;
const std::unique_ptr<PacedSender> pacer_;
const std::unique_ptr<BitrateController> bitrate_controller_;

View File

@ -93,6 +93,19 @@ void SendSideCongestionController::DeRegisterPacketFeedbackObserver(
transport_feedback_adapter_.DeRegisterPacketFeedbackObserver(observer);
}
void SendSideCongestionController::RegisterNetworkObserver(Observer* observer) {
rtc::CritScope cs(&observer_lock_);
RTC_DCHECK(observer_ == nullptr);
observer_ = observer;
}
void SendSideCongestionController::DeRegisterNetworkObserver(
Observer* observer) {
rtc::CritScope cs(&observer_lock_);
RTC_DCHECK_EQ(observer_, observer);
observer_ = nullptr;
}
void SendSideCongestionController::SetBweBitrates(int min_bitrate_bps,
int start_bitrate_bps,
int max_bitrate_bps) {
@ -245,11 +258,6 @@ SendSideCongestionController::GetTransportFeedbackVector() const {
}
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_)
return;
uint32_t bitrate_bps;
uint8_t fraction_loss;
int64_t rtt;
@ -269,8 +277,13 @@ void SendSideCongestionController::MaybeTriggerOnNetworkChanged() {
rtc::CritScope cs(&bwe_lock_);
probing_interval_ms = delay_based_bwe_->GetProbingIntervalMs();
}
observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt,
probing_interval_ms);
{
rtc::CritScope cs(&observer_lock_);
if (observer_) {
observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt,
probing_interval_ms);
}
}
}
}