diff options
Diffstat (limited to 'webrtc/call/bitrate_estimator_tests.cc')
-rw-r--r-- | webrtc/call/bitrate_estimator_tests.cc | 201 |
1 files changed, 94 insertions, 107 deletions
diff --git a/webrtc/call/bitrate_estimator_tests.cc b/webrtc/call/bitrate_estimator_tests.cc index 685f3fd665..4b24bbd5ef 100644 --- a/webrtc/call/bitrate_estimator_tests.cc +++ b/webrtc/call/bitrate_estimator_tests.cc @@ -13,66 +13,54 @@ #include "testing/gtest/include/gtest/gtest.h" +#include "webrtc/audio_state.h" #include "webrtc/base/checks.h" +#include "webrtc/base/event.h" +#include "webrtc/base/logging.h" #include "webrtc/base/scoped_ptr.h" #include "webrtc/base/thread_annotations.h" #include "webrtc/call.h" #include "webrtc/system_wrappers/include/critical_section_wrapper.h" -#include "webrtc/system_wrappers/include/event_wrapper.h" #include "webrtc/system_wrappers/include/trace.h" #include "webrtc/test/call_test.h" #include "webrtc/test/direct_transport.h" #include "webrtc/test/encoder_settings.h" #include "webrtc/test/fake_decoder.h" #include "webrtc/test/fake_encoder.h" -#include "webrtc/test/fake_voice_engine.h" +#include "webrtc/test/mock_voice_engine.h" #include "webrtc/test/frame_generator_capturer.h" namespace webrtc { namespace { // Note: If you consider to re-use this class, think twice and instead consider -// writing tests that don't depend on the trace system. -class TraceObserver { +// writing tests that don't depend on the logging system. +class LogObserver { public: - TraceObserver() { - Trace::set_level_filter(kTraceTerseInfo); - - Trace::CreateTrace(); - Trace::SetTraceCallback(&callback_); - - // Call webrtc trace to initialize the tracer that would otherwise trigger a - // data-race if left to be initialized by multiple threads (i.e. threads - // spawned by test::DirectTransport members in BitrateEstimatorTest). - WEBRTC_TRACE(kTraceStateInfo, - kTraceUtility, - -1, - "Instantiate without data races."); - } + LogObserver() { rtc::LogMessage::AddLogToStream(&callback_, rtc::LS_INFO); } - ~TraceObserver() { - Trace::SetTraceCallback(nullptr); - Trace::ReturnTrace(); - } + ~LogObserver() { rtc::LogMessage::RemoveLogToStream(&callback_); } void PushExpectedLogLine(const std::string& expected_log_line) { callback_.PushExpectedLogLine(expected_log_line); } - EventTypeWrapper Wait() { - return callback_.Wait(); - } + bool Wait() { return callback_.Wait(); } private: - class Callback : public TraceCallback { + class Callback : public rtc::LogSink { public: - Callback() : done_(EventWrapper::Create()) {} + Callback() : done_(false, false) {} - void Print(TraceLevel level, const char* message, int length) override { + void OnLogMessage(const std::string& message) override { rtc::CritScope lock(&crit_sect_); - std::string msg(message); - if (msg.find("BitrateEstimator") != std::string::npos) { - received_log_lines_.push_back(msg); + // Ignore log lines that are due to missing AST extensions, these are + // logged when we switch back from AST to TOF until the wrapping bitrate + // estimator gives up on using AST. + if (message.find("BitrateEstimator") != std::string::npos && + message.find("packet is missing") == std::string::npos) { + received_log_lines_.push_back(message); } + int num_popped = 0; while (!received_log_lines_.empty() && !expected_log_lines_.empty()) { std::string a = received_log_lines_.front(); @@ -80,19 +68,17 @@ class TraceObserver { received_log_lines_.pop_front(); expected_log_lines_.pop_front(); num_popped++; - EXPECT_TRUE(a.find(b) != std::string::npos); + EXPECT_TRUE(a.find(b) != std::string::npos) << a << " != " << b; } if (expected_log_lines_.size() <= 0) { if (num_popped > 0) { - done_->Set(); + done_.Set(); } return; } } - EventTypeWrapper Wait() { - return done_->Wait(test::CallTest::kDefaultTimeoutMs); - } + bool Wait() { return done_.Wait(test::CallTest::kDefaultTimeoutMs); } void PushExpectedLogLine(const std::string& expected_log_line) { rtc::CritScope lock(&crit_sect_); @@ -104,7 +90,7 @@ class TraceObserver { rtc::CriticalSection crit_sect_; Strings received_log_lines_ GUARDED_BY(crit_sect_); Strings expected_log_lines_ GUARDED_BY(crit_sect_); - rtc::scoped_ptr<EventWrapper> done_; + rtc::Event done_; }; Callback callback_; @@ -118,13 +104,13 @@ class BitrateEstimatorTest : public test::CallTest { public: BitrateEstimatorTest() : receive_config_(nullptr) {} - virtual ~BitrateEstimatorTest() { - EXPECT_TRUE(streams_.empty()); - } + virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } virtual void SetUp() { + AudioState::Config audio_state_config; + audio_state_config.voice_engine = &mock_voice_engine_; Call::Config config; - config.voice_engine = &fake_voice_engine_; + config.audio_state = AudioState::Create(audio_state_config); receiver_call_.reset(Call::Create(config)); sender_call_.reset(Call::Create(config)); @@ -133,18 +119,19 @@ class BitrateEstimatorTest : public test::CallTest { receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); receive_transport_->SetReceiver(sender_call_->Receiver()); - send_config_ = VideoSendStream::Config(send_transport_.get()); - send_config_.rtp.ssrcs.push_back(kSendSsrcs[0]); + video_send_config_ = VideoSendStream::Config(send_transport_.get()); + video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); // Encoders will be set separately per stream. - send_config_.encoder_settings.encoder = nullptr; - send_config_.encoder_settings.payload_name = "FAKE"; - send_config_.encoder_settings.payload_type = kFakeSendPayloadType; - encoder_config_.streams = test::CreateVideoStreams(1); + video_send_config_.encoder_settings.encoder = nullptr; + video_send_config_.encoder_settings.payload_name = "FAKE"; + video_send_config_.encoder_settings.payload_type = + kFakeVideoSendPayloadType; + video_encoder_config_.streams = test::CreateVideoStreams(1); receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); // receive_config_.decoders will be set by every stream separately. - receive_config_.rtp.remote_ssrc = send_config_.rtp.ssrcs[0]; - receive_config_.rtp.local_ssrc = kReceiverLocalSsrc; + receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; + receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc; receive_config_.rtp.remb = true; receive_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); @@ -154,7 +141,7 @@ class BitrateEstimatorTest : public test::CallTest { virtual void TearDown() { std::for_each(streams_.begin(), streams_.end(), - std::mem_fun(&Stream::StopSending)); + std::mem_fun(&Stream::StopSending)); send_transport_->StopSending(); receive_transport_->StopSending(); @@ -165,6 +152,7 @@ class BitrateEstimatorTest : public test::CallTest { } receiver_call_.reset(); + sender_call_.reset(); } protected: @@ -181,23 +169,21 @@ class BitrateEstimatorTest : public test::CallTest { frame_generator_capturer_(), fake_encoder_(Clock::GetRealTimeClock()), fake_decoder_() { - test_->send_config_.rtp.ssrcs[0]++; - test_->send_config_.encoder_settings.encoder = &fake_encoder_; + test_->video_send_config_.rtp.ssrcs[0]++; + test_->video_send_config_.encoder_settings.encoder = &fake_encoder_; send_stream_ = test_->sender_call_->CreateVideoSendStream( - test_->send_config_, test_->encoder_config_); - RTC_DCHECK_EQ(1u, test_->encoder_config_.streams.size()); + test_->video_send_config_, test_->video_encoder_config_); + RTC_DCHECK_EQ(1u, test_->video_encoder_config_.streams.size()); frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( - send_stream_->Input(), - test_->encoder_config_.streams[0].width, - test_->encoder_config_.streams[0].height, - 30, + send_stream_->Input(), test_->video_encoder_config_.streams[0].width, + test_->video_encoder_config_.streams[0].height, 30, Clock::GetRealTimeClock())); send_stream_->Start(); frame_generator_capturer_->Start(); if (receive_audio) { AudioReceiveStream::Config receive_config; - receive_config.rtp.remote_ssrc = test_->send_config_.rtp.ssrcs[0]; + receive_config.rtp.remote_ssrc = test_->video_send_config_.rtp.ssrcs[0]; // Bogus non-default id to prevent hitting a RTC_DCHECK when creating // the AudioReceiveStream. Every receive stream has to correspond to // an underlying channel id. @@ -211,12 +197,13 @@ class BitrateEstimatorTest : public test::CallTest { VideoReceiveStream::Decoder decoder; decoder.decoder = &fake_decoder_; decoder.payload_type = - test_->send_config_.encoder_settings.payload_type; + test_->video_send_config_.encoder_settings.payload_type; decoder.payload_name = - test_->send_config_.encoder_settings.payload_name; + test_->video_send_config_.encoder_settings.payload_name; + test_->receive_config_.decoders.clear(); test_->receive_config_.decoders.push_back(decoder); test_->receive_config_.rtp.remote_ssrc = - test_->send_config_.rtp.ssrcs[0]; + test_->video_send_config_.rtp.ssrcs[0]; test_->receive_config_.rtp.local_ssrc++; video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream( test_->receive_config_); @@ -262,8 +249,8 @@ class BitrateEstimatorTest : public test::CallTest { test::FakeDecoder fake_decoder_; }; - test::FakeVoiceEngine fake_voice_engine_; - TraceObserver receiver_trace_; + testing::NiceMock<test::MockVoiceEngine> mock_voice_engine_; + LogObserver receiver_log_; rtc::scoped_ptr<test::DirectTransport> send_transport_; rtc::scoped_ptr<test::DirectTransport> receive_transport_; rtc::scoped_ptr<Call> sender_call_; @@ -278,89 +265,89 @@ static const char* kSingleStreamLog = "RemoteBitrateEstimatorSingleStream: Instantiating."; TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); - receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); + receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); streams_.push_back(new Stream(this, true)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); - receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); + receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); streams_.push_back(new Stream(this, true)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); - receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); - receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); + receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); + receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); streams_.push_back(new Stream(this, true)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); - send_config_.rtp.extensions[0] = + video_send_config_.rtp.extensions[0] = RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); - receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); - receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); + receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); + receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { - send_config_.rtp.extensions.push_back( + video_send_config_.rtp.extensions.push_back( RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); - send_config_.rtp.extensions[0] = + video_send_config_.rtp.extensions[0] = RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); - receiver_trace_.PushExpectedLogLine("Switching to absolute send time RBE."); - receiver_trace_.PushExpectedLogLine(kAbsSendTimeLog); + receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); + receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); streams_.push_back(new Stream(this, false)); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); - send_config_.rtp.extensions[0] = + video_send_config_.rtp.extensions[0] = RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); - receiver_trace_.PushExpectedLogLine( + receiver_log_.PushExpectedLogLine( "WrappingBitrateEstimator: Switching to transmission time offset RBE."); - receiver_trace_.PushExpectedLogLine(kSingleStreamLog); + receiver_log_.PushExpectedLogLine(kSingleStreamLog); streams_.push_back(new Stream(this, false)); streams_[0]->StopSending(); streams_[1]->StopSending(); - EXPECT_EQ(kEventSignaled, receiver_trace_.Wait()); + EXPECT_TRUE(receiver_log_.Wait()); } } // namespace webrtc |