WebRtcVideoEngineTest: use simulated time.
Bug: chromium:1255737 Change-Id: I6036ae5af4b3f0e7bd04352b055935f501ecc52b Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/237341 Commit-Queue: Markus Handell <handellm@webrtc.org> Reviewed-by: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35316}
This commit is contained in:
parent
b4e96d48a2
commit
ee03431107
@ -595,6 +595,7 @@ if (rtc_include_tests) {
|
||||
"../api/test/video:function_video_factory",
|
||||
"../api/transport:field_trial_based_config",
|
||||
"../api/units:time_delta",
|
||||
"../api/units:timestamp",
|
||||
"../api/video:builtin_video_bitrate_allocator_factory",
|
||||
"../api/video:video_bitrate_allocation",
|
||||
"../api/video:video_codec_constants",
|
||||
@ -638,6 +639,7 @@ if (rtc_include_tests) {
|
||||
"../test:test_main",
|
||||
"../test:test_support",
|
||||
"../test:video_test_common",
|
||||
"../test/time_controller",
|
||||
]
|
||||
absl_deps = [
|
||||
"//third_party/abseil-cpp/absl/algorithm:container",
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
#include "api/test/video/function_video_decoder_factory.h"
|
||||
#include "api/transport/field_trial_based_config.h"
|
||||
#include "api/units/time_delta.h"
|
||||
#include "api/units/timestamp.h"
|
||||
#include "api/video/builtin_video_bitrate_allocator_factory.h"
|
||||
#include "api/video/i420_buffer.h"
|
||||
#include "api/video/video_bitrate_allocation.h"
|
||||
@ -64,6 +65,7 @@
|
||||
#include "test/field_trial.h"
|
||||
#include "test/frame_forwarder.h"
|
||||
#include "test/gmock.h"
|
||||
#include "test/time_controller/simulated_time_controller.h"
|
||||
|
||||
using ::testing::_;
|
||||
using ::testing::Contains;
|
||||
@ -242,12 +244,13 @@ class WebRtcVideoEngineTest : public ::testing::Test {
|
||||
public:
|
||||
WebRtcVideoEngineTest() : WebRtcVideoEngineTest("") {}
|
||||
explicit WebRtcVideoEngineTest(const std::string& field_trials)
|
||||
: override_field_trials_(
|
||||
: time_controller_(webrtc::Timestamp::Millis(4711)),
|
||||
override_field_trials_(
|
||||
field_trials.empty()
|
||||
? nullptr
|
||||
: std::make_unique<webrtc::test::ScopedFieldTrials>(
|
||||
field_trials)),
|
||||
task_queue_factory_(webrtc::CreateDefaultTaskQueueFactory()),
|
||||
task_queue_factory_(time_controller_.CreateTaskQueueFactory()),
|
||||
call_(webrtc::Call::Create([&] {
|
||||
webrtc::Call::Config call_config(&event_log_);
|
||||
call_config.task_queue_factory = task_queue_factory_.get();
|
||||
@ -262,11 +265,7 @@ class WebRtcVideoEngineTest : public ::testing::Test {
|
||||
encoder_factory_),
|
||||
std::unique_ptr<cricket::FakeWebRtcVideoDecoderFactory>(
|
||||
decoder_factory_),
|
||||
field_trials_) {
|
||||
// Ensure fake clock doesn't return 0, which will cause some initializations
|
||||
// fail inside RTP senders.
|
||||
fake_clock_.AdvanceTime(webrtc::TimeDelta::Micros(1));
|
||||
}
|
||||
field_trials_) {}
|
||||
|
||||
protected:
|
||||
void AssignDefaultAptRtxTypes();
|
||||
@ -287,9 +286,7 @@ class WebRtcVideoEngineTest : public ::testing::Test {
|
||||
|
||||
void ExpectRtpCapabilitySupport(const char* uri, bool supported) const;
|
||||
|
||||
// Has to be the first one, so it is initialized before the call or there is a
|
||||
// race condition in the clock access.
|
||||
rtc::ScopedFakeClock fake_clock_;
|
||||
webrtc::GlobalSimulatedTimeController time_controller_;
|
||||
std::unique_ptr<webrtc::test::ScopedFieldTrials> override_field_trials_;
|
||||
webrtc::FieldTrialBasedConfig field_trials_;
|
||||
webrtc::RtcEventLogNull event_log_;
|
||||
@ -560,6 +557,7 @@ TEST_F(WebRtcVideoEngineTest, UseFactoryForVp8WhenSupported) {
|
||||
rtc::kNumMicrosecsPerSec / 30);
|
||||
EXPECT_TRUE(channel->SetVideoSend(kSsrc, nullptr, &frame_forwarder));
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
// Sending one frame will have allocate the encoder.
|
||||
ASSERT_TRUE(encoder_factory_->WaitForCreatedVideoEncoders(1));
|
||||
EXPECT_TRUE_WAIT(encoder_factory_->encoders()[0]->GetNumEncodedFrames() > 0,
|
||||
@ -810,7 +808,7 @@ TEST_F(WebRtcVideoEngineTest, UsesSimulcastAdapterForVp8Factories) {
|
||||
rtc::kNumMicrosecsPerSec / 60);
|
||||
EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), nullptr, &frame_forwarder));
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
ASSERT_TRUE(encoder_factory_->WaitForCreatedVideoEncoders(2));
|
||||
|
||||
// Verify that encoders are configured for simulcast through adapter
|
||||
@ -852,6 +850,7 @@ TEST_F(WebRtcVideoEngineTest, ChannelWithH264CanChangeToVp8) {
|
||||
EXPECT_TRUE(channel->SetVideoSend(kSsrc, nullptr, &frame_forwarder));
|
||||
// Sending one frame will have allocate the encoder.
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
|
||||
ASSERT_EQ_WAIT(1u, encoder_factory_->encoders().size(), kTimeout);
|
||||
|
||||
@ -861,6 +860,7 @@ TEST_F(WebRtcVideoEngineTest, ChannelWithH264CanChangeToVp8) {
|
||||
|
||||
// Sending one frame will switch encoder.
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
|
||||
EXPECT_EQ_WAIT(1u, encoder_factory_->encoders().size(), kTimeout);
|
||||
}
|
||||
@ -890,6 +890,7 @@ TEST_F(WebRtcVideoEngineTest,
|
||||
rtc::kNumMicrosecsPerSec / 30);
|
||||
EXPECT_TRUE(channel->SetVideoSend(ssrcs.front(), nullptr, &frame_forwarder));
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
|
||||
ASSERT_TRUE(encoder_factory_->WaitForCreatedVideoEncoders(2));
|
||||
ASSERT_TRUE(encoder_factory_->encoders()[0]->WaitForInitEncode());
|
||||
@ -922,6 +923,7 @@ TEST_F(WebRtcVideoEngineTest,
|
||||
rtc::kNumMicrosecsPerSec / 30);
|
||||
EXPECT_TRUE(channel->SetVideoSend(kSsrc, nullptr, &frame_forwarder));
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
ASSERT_TRUE(encoder_factory_->WaitForCreatedVideoEncoders(1));
|
||||
ASSERT_EQ(1u, encoder_factory_->encoders().size());
|
||||
ASSERT_TRUE(encoder_factory_->encoders()[0]->WaitForInitEncode());
|
||||
@ -956,6 +958,7 @@ TEST_F(WebRtcVideoEngineTest, SimulcastEnabledForH264BehindFieldTrial) {
|
||||
rtc::kNumMicrosecsPerSec / 30);
|
||||
EXPECT_TRUE(channel->SetVideoSend(ssrcs[0], nullptr, &frame_forwarder));
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
|
||||
ASSERT_TRUE(encoder_factory_->WaitForCreatedVideoEncoders(1));
|
||||
ASSERT_EQ(1u, encoder_factory_->encoders().size());
|
||||
@ -1213,9 +1216,7 @@ TEST(WebRtcVideoEngineNewVideoCodecFactoryTest, Vp8) {
|
||||
const webrtc::SdpVideoFormat format("VP8");
|
||||
EXPECT_CALL(*encoder_factory, QueryVideoEncoder(format))
|
||||
.WillRepeatedly(Return(codec_info));
|
||||
rtc::Event encoder_created;
|
||||
EXPECT_CALL(*encoder_factory, CreateVideoEncoder(format)).WillOnce([&] {
|
||||
encoder_created.Set();
|
||||
return std::make_unique<FakeWebRtcVideoEncoder>(nullptr);
|
||||
});
|
||||
|
||||
@ -1226,7 +1227,9 @@ TEST(WebRtcVideoEngineNewVideoCodecFactoryTest, Vp8) {
|
||||
|
||||
// Create a call.
|
||||
webrtc::RtcEventLogNull event_log;
|
||||
auto task_queue_factory = webrtc::CreateDefaultTaskQueueFactory();
|
||||
webrtc::GlobalSimulatedTimeController time_controller(
|
||||
webrtc::Timestamp::Millis(4711));
|
||||
auto task_queue_factory = time_controller.CreateTaskQueueFactory();
|
||||
webrtc::Call::Config call_config(&event_log);
|
||||
webrtc::FieldTrialBasedConfig field_trials;
|
||||
call_config.trials = &field_trials;
|
||||
@ -1253,7 +1256,7 @@ TEST(WebRtcVideoEngineNewVideoCodecFactoryTest, Vp8) {
|
||||
EXPECT_TRUE(send_channel->SetVideoSend(send_ssrc, nullptr, &frame_forwarder));
|
||||
// Sending one frame will allocate the encoder.
|
||||
frame_forwarder.IncomingCapturedFrame(frame_source.GetFrame());
|
||||
encoder_created.Wait(kTimeout);
|
||||
time_controller.AdvanceTime(webrtc::TimeDelta::Zero());
|
||||
|
||||
// Create recv channel.
|
||||
const int recv_ssrc = 321;
|
||||
@ -2570,7 +2573,7 @@ class WebRtcVideoChannelTest : public WebRtcVideoEngineTest {
|
||||
int64_t packet_time_us) {
|
||||
channel_->OnPacketReceived(packet, packet_time_us);
|
||||
rtc::Thread::Current()->ProcessMessages(0);
|
||||
fake_clock_.AdvanceTime(
|
||||
time_controller_.AdvanceTime(
|
||||
webrtc::TimeDelta::Millis(kUnsignalledReceiveStreamCooldownMs));
|
||||
}
|
||||
|
||||
@ -4014,7 +4017,7 @@ TEST_F(WebRtcVideoChannelTest, EstimatesNtpStartTimeCorrectly) {
|
||||
// This timestamp is kInitialTimestamp (-1) + kFrameOffsetMs * 90, which
|
||||
// triggers a constant-overflow warning, hence we're calculating it explicitly
|
||||
// here.
|
||||
fake_clock_.AdvanceTime(webrtc::TimeDelta::Millis(kFrameOffsetMs));
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Millis(kFrameOffsetMs));
|
||||
video_frame.set_timestamp(kFrameOffsetMs * 90 - 1);
|
||||
video_frame.set_ntp_time_ms(kInitialNtpTimeMs + kFrameOffsetMs);
|
||||
stream->InjectFrame(video_frame);
|
||||
@ -6744,7 +6747,7 @@ TEST_F(WebRtcVideoChannelTest, UnsignalledSsrcHasACooldown) {
|
||||
channel_->OnPacketReceived(packet.Buffer(), /* packet_time_us */ -1);
|
||||
}
|
||||
rtc::Thread::Current()->ProcessMessages(0);
|
||||
fake_clock_.AdvanceTime(
|
||||
time_controller_.AdvanceTime(
|
||||
webrtc::TimeDelta::Millis(kUnsignalledReceiveStreamCooldownMs - 1));
|
||||
|
||||
// We now have an unsignalled receive stream for kSsrc1.
|
||||
@ -6768,7 +6771,7 @@ TEST_F(WebRtcVideoChannelTest, UnsignalledSsrcHasACooldown) {
|
||||
|
||||
// After 500 ms, kSsrc2 should trigger a new unsignalled receive stream that
|
||||
// replaces the old one.
|
||||
fake_clock_.AdvanceTime(webrtc::TimeDelta::Millis(1));
|
||||
time_controller_.AdvanceTime(webrtc::TimeDelta::Millis(1));
|
||||
{
|
||||
// Receive a packet for kSsrc2.
|
||||
RtpPacket packet;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user