Index: webrtc/video/video_send_stream_tests.cc |
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc |
index 0d5ba7d325d66a078a9d7479fa25adc5021dd525..c61eeaf9fdc19681fc3f96ffb24e132a6be893bc 100644 |
--- a/webrtc/video/video_send_stream_tests.cc |
+++ b/webrtc/video/video_send_stream_tests.cc |
@@ -66,6 +66,8 @@ class VideoSendStreamTest : public test::CallTest { |
void TestRequestSourceRotateVideo(bool support_orientation_ext); |
}; |
+// TODO(eladalon): !!! Doesn't look like this file should really work... |
+ |
TEST_F(VideoSendStreamTest, CanStartStartedStream) { |
CreateSenderCall(Call::Config(event_log_.get())); |
@@ -480,7 +482,9 @@ class UlpfecObserver : public test::EndToEndTest { |
return SEND_PACKET; |
} |
- test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
+ test::PacketTransport* CreateSendTransport( |
+ test::SingleThreadedTaskQueue* task_queue, |
+ Call* sender_call) override { |
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
// Configure some network delay. |
const int kNetworkDelayMs = 100; |
@@ -488,7 +492,7 @@ class UlpfecObserver : public test::EndToEndTest { |
config.loss_percent = 5; |
config.queue_delay_ms = kNetworkDelayMs; |
return new test::PacketTransport( |
- sender_call, this, test::PacketTransport::kSender, |
+ task_queue, sender_call, this, test::PacketTransport::kSender, |
VideoSendStreamTest::payload_type_map_, config); |
} |
@@ -636,7 +640,9 @@ class FlexfecObserver : public test::EndToEndTest { |
return SEND_PACKET; |
} |
- test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
+ test::PacketTransport* CreateSendTransport( |
+ test::SingleThreadedTaskQueue* task_queue, |
+ Call* sender_call) override { |
// At low RTT (< kLowRttNackMs) -> NACK only, no FEC. |
// Therefore we need some network delay. |
const int kNetworkDelayMs = 100; |
@@ -644,7 +650,7 @@ class FlexfecObserver : public test::EndToEndTest { |
config.loss_percent = 5; |
config.queue_delay_ms = kNetworkDelayMs; |
return new test::PacketTransport( |
- sender_call, this, test::PacketTransport::kSender, |
+ task_queue, sender_call, this, test::PacketTransport::kSender, |
VideoSendStreamTest::payload_type_map_, config); |
} |
@@ -1337,13 +1343,15 @@ TEST_F(VideoSendStreamTest, PaddingIsPrimarilyRetransmissions) { |
return SEND_PACKET; |
} |
- test::PacketTransport* CreateSendTransport(Call* sender_call) override { |
+ test::PacketTransport* CreateSendTransport( |
+ test::SingleThreadedTaskQueue* task_queue, |
+ Call* sender_call) override { |
const int kNetworkDelayMs = 50; |
FakeNetworkPipe::Config config; |
config.loss_percent = 10; |
config.link_capacity_kbps = kCapacityKbps; |
config.queue_delay_ms = kNetworkDelayMs; |
- return new test::PacketTransport(sender_call, this, |
+ return new test::PacketTransport(task_queue, sender_call, this, |
test::PacketTransport::kSender, |
payload_type_map_, config); |
} |
@@ -1476,8 +1484,10 @@ TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
static const uint8_t kExtensionId = test::kTransportSequenceNumberExtensionId; |
class ChangingNetworkRouteTest : public test::EndToEndTest { |
public: |
- ChangingNetworkRouteTest() |
- : EndToEndTest(test::CallTest::kDefaultTimeoutMs), call_(nullptr) { |
+ explicit ChangingNetworkRouteTest(test::SingleThreadedTaskQueue* task_queue) |
+ : EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
+ task_queue_(task_queue), |
+ call_(nullptr) { |
EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
kRtpExtensionTransportSequenceNumber, kExtensionId)); |
} |
@@ -1518,26 +1528,33 @@ TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
void PerformTest() override { |
rtc::NetworkRoute new_route(true, 10, 20, -1); |
- call_->OnNetworkRouteChanged("transport", new_route); |
Call::Config::BitrateConfig bitrate_config; |
- bitrate_config.start_bitrate_bps = kStartBitrateBps; |
- call_->SetBitrateConfig(bitrate_config); |
+ |
+ task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
+ call_->OnNetworkRouteChanged("transport", new_route); |
+ bitrate_config.start_bitrate_bps = kStartBitrateBps; |
+ call_->SetBitrateConfig(bitrate_config); |
+ }); |
+ |
EXPECT_TRUE(Wait()) |
<< "Timed out while waiting for start bitrate to be exceeded."; |
- bitrate_config.start_bitrate_bps = -1; |
- bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; |
- call_->SetBitrateConfig(bitrate_config); |
- // TODO(holmer): We should set the last sent packet id here and verify |
- // that we correctly ignore any packet loss reported prior to that id. |
- ++new_route.local_network_id; |
- call_->OnNetworkRouteChanged("transport", new_route); |
- EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); |
+ task_queue_->SendTask([this, &new_route, &bitrate_config]() { |
+ bitrate_config.start_bitrate_bps = -1; |
+ bitrate_config.max_bitrate_bps = kNewMaxBitrateBps; |
+ call_->SetBitrateConfig(bitrate_config); |
+ // TODO(holmer): We should set the last sent packet id here and verify |
+ // that we correctly ignore any packet loss reported prior to that id. |
+ ++new_route.local_network_id; |
+ call_->OnNetworkRouteChanged("transport", new_route); |
+ EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps); |
+ }); |
} |
private: |
+ test::SingleThreadedTaskQueue* const task_queue_; |
Call* call_; |
- } test; |
+ } test(&task_queue_); |
RunBaseTest(&test); |
} |
@@ -1545,8 +1562,10 @@ TEST_F(VideoSendStreamTest, ChangingNetworkRoute) { |
TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { |
class ChangingTransportOverheadTest : public test::EndToEndTest { |
public: |
- ChangingTransportOverheadTest() |
+ explicit ChangingTransportOverheadTest( |
+ test::SingleThreadedTaskQueue* task_queue) |
: EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
+ task_queue_(task_queue), |
call_(nullptr), |
packets_sent_(0), |
transport_overhead_(0) {} |
@@ -1572,27 +1591,36 @@ TEST_F(VideoSendStreamTest, ChangingTransportOverhead) { |
} |
void PerformTest() override { |
- transport_overhead_ = 100; |
- call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
- transport_overhead_); |
+ task_queue_->SendTask([this]() { |
+ transport_overhead_ = 100; |
+ call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
+ transport_overhead_); |
+ }); |
+ |
EXPECT_TRUE(Wait()); |
+ |
{ |
rtc::CritScope cs(&lock_); |
packets_sent_ = 0; |
} |
- transport_overhead_ = 500; |
- call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
- transport_overhead_); |
+ |
+ task_queue_->SendTask([this]() { |
+ transport_overhead_ = 500; |
+ call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, |
+ transport_overhead_); |
+ }); |
+ |
EXPECT_TRUE(Wait()); |
} |
private: |
+ test::SingleThreadedTaskQueue* const task_queue_; |
Call* call_; |
rtc::CriticalSection lock_; |
int packets_sent_ GUARDED_BY(lock_); |
int transport_overhead_; |
const size_t kMaxRtpPacketSize = 1000; |
- } test; |
+ } test(&task_queue_); |
RunBaseTest(&test); |
} |
@@ -1716,16 +1744,18 @@ TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { |
// Function for removing and recreating the send stream with a new config. |
auto reset_fun = [this](const VideoSendStream::Config& send_stream_config, |
const VideoEncoderConfig& encoder_config) { |
- Stop(); |
- sender_call_->DestroyVideoSendStream(video_send_stream_); |
- video_send_config_ = send_stream_config.Copy(); |
- video_encoder_config_ = encoder_config.Copy(); |
- video_send_stream_ = sender_call_->CreateVideoSendStream( |
- video_send_config_.Copy(), video_encoder_config_.Copy()); |
- video_send_stream_->SetSource( |
- frame_generator_capturer_.get(), |
- VideoSendStream::DegradationPreference::kMaintainResolution); |
- Start(); |
+ task_queue_.SendTask([this, &send_stream_config, &encoder_config]() { |
+ Stop(); |
+ sender_call_->DestroyVideoSendStream(video_send_stream_); |
+ video_send_config_ = send_stream_config.Copy(); |
+ video_encoder_config_ = encoder_config.Copy(); |
+ video_send_stream_ = sender_call_->CreateVideoSendStream( |
+ video_send_config_.Copy(), video_encoder_config_.Copy()); |
+ video_send_stream_->SetSource( |
+ frame_generator_capturer_.get(), |
+ VideoSendStream::DegradationPreference::kMaintainResolution); |
+ Start(); |
+ }); |
}; |
MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun); |
RunBaseTest(&test); |
@@ -2060,8 +2090,9 @@ VideoFrame CreateVideoFrame(int width, int height, uint8_t data) { |
TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
class EncoderStateObserver : public test::SendTest, public VideoEncoder { |
public: |
- EncoderStateObserver() |
+ explicit EncoderStateObserver(test::SingleThreadedTaskQueue* task_queue) |
: SendTest(kDefaultTimeoutMs), |
+ task_queue_(task_queue), |
stream_(nullptr), |
initialized_(false), |
callback_registered_(false), |
@@ -2148,18 +2179,23 @@ TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
void PerformTest() override { |
EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
- EXPECT_EQ(0u, num_releases()); |
- stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
- EXPECT_EQ(0u, num_releases()); |
- stream_->Stop(); |
- // Encoder should not be released before destroying the VideoSendStream. |
- EXPECT_FALSE(IsReleased()); |
- EXPECT_TRUE(IsReadyForEncode()); |
- stream_->Start(); |
+ |
+ task_queue_->SendTask([this]() { |
+ EXPECT_EQ(0u, num_releases()); |
+ stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); |
+ EXPECT_EQ(0u, num_releases()); |
+ stream_->Stop(); |
+ // Encoder should not be released before destroying the VideoSendStream. |
+ EXPECT_FALSE(IsReleased()); |
+ EXPECT_TRUE(IsReadyForEncode()); |
+ stream_->Start(); |
+ }); |
+ |
// Sanity check, make sure we still encode frames with this encoder. |
EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
} |
+ test::SingleThreadedTaskQueue* const task_queue_; |
rtc::CriticalSection crit_; |
VideoSendStream* stream_; |
bool initialized_ GUARDED_BY(crit_); |
@@ -2167,7 +2203,7 @@ TEST_F(VideoSendStreamTest, EncoderIsProperlyInitializedAndDestroyed) { |
size_t num_releases_ GUARDED_BY(crit_); |
bool released_ GUARDED_BY(crit_); |
VideoEncoderConfig encoder_config_; |
- } test_encoder; |
+ } test_encoder(&task_queue_); |
RunBaseTest(&test_encoder); |
@@ -2553,9 +2589,11 @@ TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
class EncoderBitrateThresholdObserver : public test::SendTest, |
public test::FakeEncoder { |
public: |
- EncoderBitrateThresholdObserver() |
+ explicit EncoderBitrateThresholdObserver( |
+ test::SingleThreadedTaskQueue* task_queue) |
: SendTest(kDefaultTimeoutMs), |
FakeEncoder(Clock::GetRealTimeClock()), |
+ task_queue_(task_queue), |
init_encode_event_(false, false), |
bitrate_changed_event_(false, false), |
target_bitrate_(0), |
@@ -2680,7 +2718,9 @@ TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
Call::Config::BitrateConfig bitrate_config; |
bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
- call_->SetBitrateConfig(bitrate_config); |
+ task_queue_->SendTask([this, &bitrate_config]() { |
+ call_->SetBitrateConfig(bitrate_config); |
+ }); |
// Encoder rate is capped by EncoderConfig max_bitrate_bps. |
WaitForSetRates(kMaxBitrateKbps); |
encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
@@ -2702,6 +2742,7 @@ TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
WaitForSetRates(kIncreasedStartBitrateKbps); |
} |
+ test::SingleThreadedTaskQueue* const task_queue_; |
rtc::Event init_encode_event_; |
rtc::Event bitrate_changed_event_; |
rtc::CriticalSection crit_; |
@@ -2711,7 +2752,7 @@ TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
webrtc::Call* call_; |
webrtc::VideoSendStream* send_stream_; |
webrtc::VideoEncoderConfig encoder_config_; |
- } test; |
+ } test(&task_queue_); |
RunBaseTest(&test); |
} |
@@ -3302,9 +3343,11 @@ TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, |
public test::FakeEncoder { |
public: |
- RemoveOverheadFromBandwidthTest() |
+ explicit RemoveOverheadFromBandwidthTest( |
+ test::SingleThreadedTaskQueue* task_queue) |
: EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
FakeEncoder(Clock::GetRealTimeClock()), |
+ task_queue_(task_queue), |
call_(nullptr), |
max_bitrate_bps_(0), |
first_packet_sent_(false), |
@@ -3349,8 +3392,10 @@ TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
bitrate_config.start_bitrate_bps = kStartBitrateBps; |
bitrate_config.max_bitrate_bps = kMaxBitrateBps; |
bitrate_config.min_bitrate_bps = kMinBitrateBps; |
- call_->SetBitrateConfig(bitrate_config); |
- call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); |
+ task_queue_->SendTask([this, &bitrate_config]() { |
+ call_->SetBitrateConfig(bitrate_config); |
+ call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 40); |
+ }); |
// At a bitrate of 60kbps with a packet size of 1200B video and an |
// overhead of 40B per packet video produces 2240bps overhead. |
@@ -3363,13 +3408,13 @@ TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
} |
private: |
+ test::SingleThreadedTaskQueue* const task_queue_; |
Call* call_; |
rtc::CriticalSection crit_; |
uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); |
bool first_packet_sent_ GUARDED_BY(&crit_); |
rtc::Event bitrate_changed_event_; |
- } test; |
- |
+ } test(&task_queue_); |
RunBaseTest(&test); |
} |