Potential race-condition resolution in CongestionController::min_bitrate_bps_

BUG=None

Review-Url: https://codereview.webrtc.org/2752353003
Cr-Commit-Position: refs/heads/master@{#17294}
This commit is contained in:
elad.alon 2017-03-17 07:37:48 -07:00 committed by Commit bot
parent 40ba3addc7
commit 17ca2883e3
2 changed files with 5 additions and 9 deletions

View File

@ -171,12 +171,11 @@ CongestionController::CongestionController(
remote_bitrate_estimator_(remote_bitrate_observer, clock_), remote_bitrate_estimator_(remote_bitrate_observer, clock_),
remote_estimator_proxy_(clock_, packet_router_), remote_estimator_proxy_(clock_, packet_router_),
transport_feedback_adapter_(clock_), transport_feedback_adapter_(clock_),
min_bitrate_bps_(congestion_controller::GetMinBitrateBps()),
max_bitrate_bps_(0),
last_reported_bitrate_bps_(0), last_reported_bitrate_bps_(0),
last_reported_fraction_loss_(0), last_reported_fraction_loss_(0),
last_reported_rtt_(0), last_reported_rtt_(0),
network_state_(kNetworkUp), network_state_(kNetworkUp),
min_bitrate_bps_(congestion_controller::GetMinBitrateBps()),
delay_based_bwe_(new DelayBasedBwe(event_log_, clock_)) { delay_based_bwe_(new DelayBasedBwe(event_log_, clock_)) {
delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
worker_thread_checker_.DetachFromThread(); worker_thread_checker_.DetachFromThread();
@ -208,14 +207,13 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps,
probe_controller_->SetBitrates(min_bitrate_bps, start_bitrate_bps, probe_controller_->SetBitrates(min_bitrate_bps, start_bitrate_bps,
max_bitrate_bps); max_bitrate_bps);
max_bitrate_bps_ = max_bitrate_bps;
remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps);
min_bitrate_bps_ = min_bitrate_bps;
{ {
rtc::CritScope cs(&bwe_lock_); rtc::CritScope cs(&bwe_lock_);
if (start_bitrate_bps > 0) if (start_bitrate_bps > 0)
delay_based_bwe_->SetStartBitrate(start_bitrate_bps); delay_based_bwe_->SetStartBitrate(start_bitrate_bps);
min_bitrate_bps_ = min_bitrate_bps;
delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
} }
MaybeTriggerOnNetworkChanged(); MaybeTriggerOnNetworkChanged();
@ -233,8 +231,6 @@ void CongestionController::OnNetworkRouteChanged(
// no longer exposed outside CongestionController. // no longer exposed outside CongestionController.
bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps, bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps,
max_bitrate_bps); max_bitrate_bps);
min_bitrate_bps_ = min_bitrate_bps;
max_bitrate_bps_ = max_bitrate_bps;
// TODO(honghaiz): Recreate this object once the remote bitrate estimator is // TODO(honghaiz): Recreate this object once the remote bitrate estimator is
// no longer exposed outside CongestionController. // no longer exposed outside CongestionController.
remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps);
@ -243,9 +239,10 @@ void CongestionController::OnNetworkRouteChanged(
network_route.remote_network_id); network_route.remote_network_id);
{ {
rtc::CritScope cs(&bwe_lock_); rtc::CritScope cs(&bwe_lock_);
min_bitrate_bps_ = min_bitrate_bps;
delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_));
delay_based_bwe_->SetStartBitrate(bitrate_bps); delay_based_bwe_->SetStartBitrate(bitrate_bps);
delay_based_bwe_->SetMinBitrate(min_bitrate_bps); delay_based_bwe_->SetMinBitrate(min_bitrate_bps_);
} }
probe_controller_->Reset(); probe_controller_->Reset();

View File

@ -189,14 +189,13 @@ class CongestionController : public CallStatsObserver,
WrappingBitrateEstimator remote_bitrate_estimator_; WrappingBitrateEstimator remote_bitrate_estimator_;
RemoteEstimatorProxy remote_estimator_proxy_; RemoteEstimatorProxy remote_estimator_proxy_;
TransportFeedbackAdapter transport_feedback_adapter_; TransportFeedbackAdapter transport_feedback_adapter_;
int min_bitrate_bps_;
int max_bitrate_bps_;
rtc::CriticalSection network_state_lock_; rtc::CriticalSection network_state_lock_;
uint32_t last_reported_bitrate_bps_ GUARDED_BY(network_state_lock_); uint32_t last_reported_bitrate_bps_ GUARDED_BY(network_state_lock_);
uint8_t last_reported_fraction_loss_ GUARDED_BY(network_state_lock_); uint8_t last_reported_fraction_loss_ GUARDED_BY(network_state_lock_);
int64_t last_reported_rtt_ GUARDED_BY(network_state_lock_); int64_t last_reported_rtt_ GUARDED_BY(network_state_lock_);
NetworkState network_state_ GUARDED_BY(network_state_lock_); NetworkState network_state_ GUARDED_BY(network_state_lock_);
rtc::CriticalSection bwe_lock_; rtc::CriticalSection bwe_lock_;
int min_bitrate_bps_ GUARDED_BY(bwe_lock_);
std::unique_ptr<DelayBasedBwe> delay_based_bwe_ GUARDED_BY(bwe_lock_); std::unique_ptr<DelayBasedBwe> delay_based_bwe_ GUARDED_BY(bwe_lock_);
rtc::ThreadChecker worker_thread_checker_; rtc::ThreadChecker worker_thread_checker_;