Index: webrtc/call/call_perf_tests.cc |
diff --git a/webrtc/call/call_perf_tests.cc b/webrtc/call/call_perf_tests.cc |
index 3ee49d94271f6e8f875faea615416aed4e3b6ede..f4422f4433ea48326ebb5ab4d93e22ccdd99189f 100644 |
--- a/webrtc/call/call_perf_tests.cc |
+++ b/webrtc/call/call_perf_tests.cc |
@@ -26,6 +26,7 @@ |
#include "webrtc/system_wrappers/include/rtp_to_ntp.h" |
#include "webrtc/test/call_test.h" |
#include "webrtc/test/direct_transport.h" |
+#include "webrtc/test/drifting_clock.h" |
#include "webrtc/test/encoder_settings.h" |
#include "webrtc/test/fake_audio_device.h" |
#include "webrtc/test/fake_decoder.h" |
@@ -41,11 +42,18 @@ |
#include "webrtc/voice_engine/include/voe_rtp_rtcp.h" |
#include "webrtc/voice_engine/include/voe_video_sync.h" |
+using webrtc::test::DriftingClock; |
+using webrtc::test::FakeAudioDevice; |
+ |
namespace webrtc { |
class CallPerfTest : public test::CallTest { |
protected: |
- void TestAudioVideoSync(bool fec, bool create_audio_first); |
+ void TestAudioVideoSync(bool fec, |
+ bool create_audio_first, |
+ float video_ntp_speed, |
+ float video_rtp_speed, |
+ float audio_rtp_speed); |
void TestCpuOveruse(LoadObserver::Load tested_load, int encode_delay_ms); |
@@ -188,7 +196,11 @@ class VideoRtcpAndSyncObserver : public SyncRtcpObserver, public VideoRenderer { |
int64_t first_time_in_sync_; |
}; |
-void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
+void CallPerfTest::TestAudioVideoSync(bool fec, |
+ bool create_audio_first, |
+ float video_ntp_speed, |
+ float video_rtp_speed, |
+ float audio_rtp_speed) { |
const char* kSyncGroup = "av_sync"; |
const uint32_t kAudioSendSsrc = 1234; |
const uint32_t kAudioRecvSsrc = 5678; |
@@ -228,8 +240,8 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
const std::string audio_filename = |
test::ResourcePath("voice_engine/audio_long16", "pcm"); |
ASSERT_STRNE("", audio_filename.c_str()); |
- test::FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(), |
- audio_filename); |
+ FakeAudioDevice fake_audio_device(Clock::GetRealTimeClock(), audio_filename, |
+ audio_rtp_speed); |
EXPECT_EQ(0, voe_base->Init(&fake_audio_device, nullptr)); |
Config voe_config; |
voe_config.Set<VoicePacing>(new VoicePacing(true)); |
@@ -324,7 +336,8 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
receiver_call_->CreateAudioReceiveStream(audio_recv_config); |
} |
- CreateFrameGeneratorCapturer(); |
+ DriftingClock drifting_clock(clock_, video_ntp_speed); |
+ CreateFrameGeneratorCapturerWithDrift(&drifting_clock, video_rtp_speed); |
Start(); |
@@ -365,15 +378,49 @@ void CallPerfTest::TestAudioVideoSync(bool fec, bool create_audio_first) { |
} |
TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithAudioCreatedFirst) { |
- TestAudioVideoSync(false, true); |
+ TestAudioVideoSync(false, true, DriftingClock::kNoDrift, |
+ DriftingClock::kNoDrift, DriftingClock::kNoDrift); |
} |
TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithVideoCreatedFirst) { |
- TestAudioVideoSync(false, false); |
+ TestAudioVideoSync(false, false, DriftingClock::kNoDrift, |
+ DriftingClock::kNoDrift, DriftingClock::kNoDrift); |
} |
TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithFec) { |
- TestAudioVideoSync(true, false); |
+ TestAudioVideoSync(true, false, DriftingClock::kNoDrift, |
+ DriftingClock::kNoDrift, DriftingClock::kNoDrift); |
+} |
+ |
+// TODO(danilchap): Reenable after adding support for frame capture clock |
+// that is not in sync with local TickTime clock. |
+TEST_F(CallPerfTest, DISABLED_PlaysOutAudioAndVideoInSyncWithVideoNtpDrift) { |
+ TestAudioVideoSync(false, true, DriftingClock::PercentsFaster(10.0f), |
+ DriftingClock::kNoDrift, DriftingClock::kNoDrift); |
+} |
+ |
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithAudioRtpDrift) { |
+ TestAudioVideoSync(false, true, DriftingClock::kNoDrift, |
+ DriftingClock::kNoDrift, |
+ DriftingClock::PercentsFaster(30.0f)); |
+} |
+ |
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithVideoRtpDrift) { |
+ TestAudioVideoSync(false, true, DriftingClock::kNoDrift, |
+ DriftingClock::PercentsFaster(30.0f), |
+ DriftingClock::kNoDrift); |
+} |
+ |
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithAudioFasterThanVideoDrift) { |
+ TestAudioVideoSync(false, true, DriftingClock::kNoDrift, |
+ DriftingClock::PercentsSlower(30.0f), |
+ DriftingClock::PercentsFaster(30.0f)); |
+} |
+ |
+TEST_F(CallPerfTest, PlaysOutAudioAndVideoInSyncWithVideoFasterThanAudioDrift) { |
+ TestAudioVideoSync(false, true, DriftingClock::kNoDrift, |
+ DriftingClock::PercentsFaster(30.0f), |
+ DriftingClock::PercentsSlower(30.0f)); |
} |
void CallPerfTest::TestCaptureNtpTime(const FakeNetworkPipe::Config& net_config, |