Revert of Start probes only after network is connected. (patchset #9 id:240001 of https://codereview.webrtc.org/2458863002/ )
Reason for revert:
It broke downstream test.
Original issue's description:
> Start probes only after network is connected.
>
> Previously ProbeController was starting probing as soon as SetBitrates()
> is called. As result these probes would often timeout while connection
> is being established. Now ProbeController receives notifications about
> network route changes. This allows to start probing only when transport
> is connected. This also makes it possible to restart probing whenever
> transport route changes (will be done in a separate change).
>
> BUG=webrtc:6332
>
> Committed: https://crrev.com/5c99c76255ee7bface3c742c25fb5617748ac86e
> Cr-Commit-Position: refs/heads/master@{#15094}
TBR=philipel@webrtc.org,stefan@webrtc.org,sergeyu@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6332
Review-Url: https://codereview.webrtc.org/2504783002
Cr-Commit-Position: refs/heads/master@{#15098}
diff --git a/webrtc/call/bitrate_allocator.cc b/webrtc/call/bitrate_allocator.cc
index 2c5ba6d..645ee3c 100644
--- a/webrtc/call/bitrate_allocator.cc
+++ b/webrtc/call/bitrate_allocator.cc
@@ -48,7 +48,7 @@
BitrateAllocator::BitrateAllocator(LimitObserver* limit_observer)
: limit_observer_(limit_observer),
bitrate_observer_configs_(),
- last_bitrate_bps_(0),
+ last_bitrate_bps_(kDefaultBitrateBps),
last_non_zero_bitrate_bps_(kDefaultBitrateBps),
last_fraction_loss_(0),
last_rtt_(0),
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index 7fe353a..2f69cf4 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -252,8 +252,8 @@
call_stats_(new CallStats(clock_)),
bitrate_allocator_(new BitrateAllocator(this)),
config_(config),
- audio_network_state_(kNetworkDown),
- video_network_state_(kNetworkDown),
+ audio_network_state_(kNetworkUp),
+ video_network_state_(kNetworkUp),
receive_crit_(RWLockWrapper::CreateRWLock()),
send_crit_(RWLockWrapper::CreateRWLock()),
event_log_(config.event_log),
@@ -284,7 +284,6 @@
Trace::CreateTrace();
call_stats_->RegisterStatsObserver(congestion_controller_.get());
- congestion_controller_->SignalNetworkState(kNetworkDown);
congestion_controller_->SetBweBitrates(
config_.bitrate_config.min_bitrate_bps,
config_.bitrate_config.start_bitrate_bps,
diff --git a/webrtc/media/base/videoengine_unittest.h b/webrtc/media/base/videoengine_unittest.h
index e307d9f..024ae5d 100644
--- a/webrtc/media/base/videoengine_unittest.h
+++ b/webrtc/media/base/videoengine_unittest.h
@@ -84,7 +84,6 @@
engine_.Init();
channel_.reset(engine_.CreateChannel(call_.get(), cricket::MediaConfig(),
cricket::VideoOptions()));
- channel_->OnReadyToSend(true);
EXPECT_TRUE(channel_.get() != NULL);
network_interface_.SetDestination(channel_.get());
channel_->SetInterface(&network_interface_);
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
index 4c8c871..7fab75d 100644
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
@@ -341,7 +341,6 @@
std::unique_ptr<VideoMediaChannel> channel(
SetUpForExternalEncoderFactory(&encoder_factory, parameters.codecs));
- channel->OnReadyToSend(true);
EXPECT_TRUE(
channel->AddSendStream(cricket::StreamParams::CreateLegacy(kSsrc)));
@@ -869,7 +868,6 @@
engine_.Init();
channel_.reset(
engine_.CreateChannel(fake_call_.get(), MediaConfig(), VideoOptions()));
- channel_->OnReadyToSend(true);
last_ssrc_ = 123;
send_parameters_.codecs = engine_.codecs();
recv_parameters_.codecs = engine_.codecs();
@@ -1685,7 +1683,6 @@
channel_.reset(
engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
- channel_->OnReadyToSend(true);
channel_->SetSendParameters(send_parameters_);
@@ -1695,7 +1692,6 @@
media_config.video.suspend_below_min_bitrate = false;
channel_.reset(
engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
- channel_->OnReadyToSend(true);
channel_->SetSendParameters(send_parameters_);
@@ -1980,7 +1976,6 @@
MediaConfig media_config = MediaConfig();
channel_.reset(
engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
- channel_->OnReadyToSend(true);
ASSERT_TRUE(channel_->SetSendParameters(parameters));
AddSendStream();
@@ -2055,7 +2050,6 @@
MediaConfig media_config = MediaConfig();
channel_.reset(
engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
- channel_->OnReadyToSend(true);
ASSERT_TRUE(channel_->SetSendParameters(parameters));
AddSendStream();
@@ -2123,7 +2117,6 @@
}
channel_.reset(
engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
- channel_->OnReadyToSend(true);
EXPECT_TRUE(channel_->SetSendParameters(parameters));
@@ -3620,7 +3613,6 @@
engine_.Init();
channel_.reset(
engine_.CreateChannel(&fake_call_, MediaConfig(), VideoOptions()));
- channel_->OnReadyToSend(true);
last_ssrc_ = 123;
}
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc
index accc141..0dafdf6 100644
--- a/webrtc/modules/congestion_controller/congestion_controller.cc
+++ b/webrtc/modules/congestion_controller/congestion_controller.cc
@@ -297,7 +297,6 @@
rtc::CritScope cs(&critsect_);
network_state_ = state;
}
- probe_controller_->OnNetworkStateChanged(state);
MaybeTriggerOnNetworkChanged();
}
diff --git a/webrtc/modules/congestion_controller/probe_controller.cc b/webrtc/modules/congestion_controller/probe_controller.cc
index 272c1eb..7e1d936 100644
--- a/webrtc/modules/congestion_controller/probe_controller.cc
+++ b/webrtc/modules/congestion_controller/probe_controller.cc
@@ -46,12 +46,10 @@
ProbeController::ProbeController(PacedSender* pacer, Clock* clock)
: pacer_(pacer),
clock_(clock),
- network_state_(kNetworkUp),
state_(State::kInit),
min_bitrate_to_probe_further_bps_(kExponentialProbingDisabled),
time_last_probing_initiated_ms_(0),
estimated_bitrate_bps_(0),
- start_bitrate_bps_(0),
max_bitrate_bps_(0),
last_alr_probing_time_(clock_->TimeInMilliseconds()) {}
@@ -59,51 +57,30 @@
int start_bitrate_bps,
int max_bitrate_bps) {
rtc::CritScope cs(&critsect_);
-
- start_bitrate_bps_ =
- start_bitrate_bps > 0 ? start_bitrate_bps : min_bitrate_bps;
+ if (state_ == State::kInit) {
+ // When probing at 1.8 Mbps ( 6x 300), this represents a threshold of
+ // 1.2 Mbps to continue probing.
+ InitiateProbing({3 * start_bitrate_bps, 6 * start_bitrate_bps},
+ 4 * start_bitrate_bps);
+ }
int old_max_bitrate_bps = max_bitrate_bps_;
max_bitrate_bps_ = max_bitrate_bps;
- switch (state_) {
- case State::kInit:
- if (network_state_ == kNetworkUp)
- InitiateExponentialProbing();
- break;
-
- case State::kWaitingForProbingResult:
- break;
-
- case State::kProbingComplete:
- // Initiate probing when |max_bitrate_| was increased mid-call.
- if (estimated_bitrate_bps_ != 0 &&
- estimated_bitrate_bps_ < old_max_bitrate_bps &&
- max_bitrate_bps_ > old_max_bitrate_bps) {
- InitiateProbing({max_bitrate_bps}, kExponentialProbingDisabled);
- }
- break;
+ // Only do probing if:
+ // we are mid-call, which we consider to be if
+ // exponential probing is not active and
+ // |estimated_bitrate_bps_| is valid (> 0) and
+ // the current bitrate is lower than the new |max_bitrate_bps|, and
+ // |max_bitrate_bps_| was increased.
+ if (state_ != State::kWaitingForProbingResult &&
+ estimated_bitrate_bps_ != 0 &&
+ estimated_bitrate_bps_ < old_max_bitrate_bps &&
+ max_bitrate_bps_ > old_max_bitrate_bps) {
+ InitiateProbing({max_bitrate_bps}, kExponentialProbingDisabled);
}
}
-void ProbeController::OnNetworkStateChanged(NetworkState network_state) {
- rtc::CritScope cs(&critsect_);
- network_state_ = network_state;
- if (network_state_ == kNetworkUp && state_ == State::kInit)
- InitiateExponentialProbing();
-}
-
-void ProbeController::InitiateExponentialProbing() {
- RTC_DCHECK(network_state_ == kNetworkUp);
- RTC_DCHECK(state_ == State::kInit);
- RTC_DCHECK_GT(start_bitrate_bps_, 0);
-
- // When probing at 1.8 Mbps ( 6x 300), this represents a threshold of
- // 1.2 Mbps to continue probing.
- InitiateProbing({3 * start_bitrate_bps_, 6 * start_bitrate_bps_},
- 4 * start_bitrate_bps_);
-}
-
void ProbeController::SetEstimatedBitrate(int bitrate_bps) {
rtc::CritScope cs(&critsect_);
if (state_ == State::kWaitingForProbingResult) {
diff --git a/webrtc/modules/congestion_controller/probe_controller.h b/webrtc/modules/congestion_controller/probe_controller.h
index e60a007..efcc2a1 100644
--- a/webrtc/modules/congestion_controller/probe_controller.h
+++ b/webrtc/modules/congestion_controller/probe_controller.h
@@ -31,12 +31,12 @@
void SetBitrates(int min_bitrate_bps,
int start_bitrate_bps,
int max_bitrate_bps);
-
- void OnNetworkStateChanged(NetworkState state);
-
void SetEstimatedBitrate(int bitrate_bps);
private:
+ void InitiateProbing(std::initializer_list<int> bitrates_to_probe,
+ int min_bitrate_to_probe_further_bps)
+ EXCLUSIVE_LOCKS_REQUIRED(critsect_);
enum class State {
// Initial state where no probing has been triggered yet.
kInit,
@@ -45,21 +45,13 @@
// Probing is complete.
kProbingComplete,
};
-
- void InitiateExponentialProbing() EXCLUSIVE_LOCKS_REQUIRED(critsect_);
- void InitiateProbing(std::initializer_list<int> bitrates_to_probe,
- int min_bitrate_to_probe_further_bps)
- EXCLUSIVE_LOCKS_REQUIRED(critsect_);
-
rtc::CriticalSection critsect_;
PacedSender* const pacer_;
Clock* const clock_;
- NetworkState network_state_ GUARDED_BY(critsect_);
State state_ GUARDED_BY(critsect_);
int min_bitrate_to_probe_further_bps_ GUARDED_BY(critsect_);
int64_t time_last_probing_initiated_ms_ GUARDED_BY(critsect_);
int estimated_bitrate_bps_ GUARDED_BY(critsect_);
- int start_bitrate_bps_ GUARDED_BY(critsect_);
int max_bitrate_bps_ GUARDED_BY(critsect_);
int64_t last_alr_probing_time_ GUARDED_BY(critsect_);
diff --git a/webrtc/modules/congestion_controller/probe_controller_unittest.cc b/webrtc/modules/congestion_controller/probe_controller_unittest.cc
index 3842ded..98e1166 100644
--- a/webrtc/modules/congestion_controller/probe_controller_unittest.cc
+++ b/webrtc/modules/congestion_controller/probe_controller_unittest.cc
@@ -51,17 +51,6 @@
kMaxBitrateBps);
}
-TEST_F(ProbeControllerTest, ProbeOnlyWhenNetworkIsUp) {
- probe_controller_->OnNetworkStateChanged(kNetworkDown);
- EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(0);
- probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
- kMaxBitrateBps);
-
- testing::Mock::VerifyAndClearExpectations(&pacer_);
- EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(AtLeast(2));
- probe_controller_->OnNetworkStateChanged(kNetworkUp);
-}
-
TEST_F(ProbeControllerTest, InitiatesProbingOnMaxBitrateIncrease) {
EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(AtLeast(2));
probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc
index 8edaab5..ddff552 100644
--- a/webrtc/test/call_test.cc
+++ b/webrtc/test/call_test.cc
@@ -71,10 +71,6 @@
if (test->ShouldCreateReceivers()) {
send_transport_->SetReceiver(receiver_call_->Receiver());
receive_transport_->SetReceiver(sender_call_->Receiver());
- if (num_video_streams_ > 0)
- receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
- if (num_audio_streams_ > 0)
- receiver_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
} else {
// Sender-only call delivers to itself.
send_transport_->SetReceiver(sender_call_->Receiver());
diff --git a/webrtc/test/direct_transport.cc b/webrtc/test/direct_transport.cc
index b26aadd..18d3ee6 100644
--- a/webrtc/test/direct_transport.cc
+++ b/webrtc/test/direct_transport.cc
@@ -28,10 +28,6 @@
shutting_down_(false),
fake_network_(clock_, config) {
thread_.Start();
- if (send_call_) {
- send_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
- send_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
- }
}
DirectTransport::~DirectTransport() { StopSending(); }
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index ea1ecc2..52ff43e 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -122,11 +122,11 @@
void TestRtpStatePreservation(bool use_rtx, bool provoke_rtcpsr_before_rtp);
void VerifyHistogramStats(bool use_rtx, bool use_red, bool screenshare);
void VerifyNewVideoSendStreamsRespectNetworkState(
- MediaType network_to_bring_up,
+ MediaType network_to_bring_down,
VideoEncoder* encoder,
Transport* transport);
void VerifyNewVideoReceiveStreamsRespectNetworkState(
- MediaType network_to_bring_up,
+ MediaType network_to_bring_down,
Transport* transport);
};
@@ -3587,11 +3587,11 @@
}
void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState(
- MediaType network_to_bring_up,
+ MediaType network_to_bring_down,
VideoEncoder* encoder,
Transport* transport) {
CreateSenderCall(Call::Config(&event_log_));
- sender_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
+ sender_call_->SignalChannelNetworkState(network_to_bring_down, kNetworkDown);
CreateSendConfig(1, 0, 0, transport);
video_send_config_.encoder_settings.encoder = encoder;
@@ -3607,11 +3607,12 @@
}
void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
- MediaType network_to_bring_up,
+ MediaType network_to_bring_down,
Transport* transport) {
Call::Config config(&event_log_);
CreateCalls(config, config);
- receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
+ receiver_call_->SignalChannelNetworkState(network_to_bring_down,
+ kNetworkDown);
test::DirectTransport sender_transport(sender_call_.get());
sender_transport.SetReceiver(receiver_call_->Receiver());
@@ -3653,7 +3654,7 @@
UnusedEncoder unused_encoder;
UnusedTransport unused_transport;
VerifyNewVideoSendStreamsRespectNetworkState(
- MediaType::AUDIO, &unused_encoder, &unused_transport);
+ MediaType::VIDEO, &unused_encoder, &unused_transport);
}
TEST_F(EndToEndTest, NewVideoSendStreamsIgnoreAudioNetworkDown) {
@@ -3681,17 +3682,17 @@
RequiredTransport required_transport(true /*rtp*/, false /*rtcp*/);
RequiredEncoder required_encoder;
VerifyNewVideoSendStreamsRespectNetworkState(
- MediaType::VIDEO, &required_encoder, &required_transport);
+ MediaType::AUDIO, &required_encoder, &required_transport);
}
TEST_F(EndToEndTest, NewVideoReceiveStreamsRespectVideoNetworkDown) {
UnusedTransport transport;
- VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport);
+ VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport);
}
TEST_F(EndToEndTest, NewVideoReceiveStreamsIgnoreAudioNetworkDown) {
RequiredTransport transport(false /*rtp*/, true /*rtcp*/);
- VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::VIDEO, &transport);
+ VerifyNewVideoReceiveStreamsRespectNetworkState(MediaType::AUDIO, &transport);
}
void VerifyEmptyNackConfig(const NackConfig& config) {
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
index 7b1f0b8..f6112f9 100644
--- a/webrtc/video/video_send_stream_tests.cc
+++ b/webrtc/video/video_send_stream_tests.cc
@@ -1657,8 +1657,6 @@
test::NullTransport transport;
CreateSendConfig(1, 0, 0, &transport);
- sender_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
-
StartStopBitrateObserver encoder;
video_send_config_.encoder_settings.encoder = &encoder;
video_send_config_.encoder_settings.internal_source = true;