Move some integration test functions to the .cc file
The integration_test_helpers.h file was too long and had too many
big functions inline.
This CL takes some of the largest and puts them in the .cc file.
Bug: None
Change-Id: Ibaaf9675ca8b5efa29878b4883b21f14104451a7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/349020
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42169}
diff --git a/pc/test/integration_test_helpers.cc b/pc/test/integration_test_helpers.cc
index 1f603ad..7ffe4db 100644
--- a/pc/test/integration_test_helpers.cc
+++ b/pc/test/integration_test_helpers.cc
@@ -93,4 +93,170 @@
return tick_period_;
}
+// Implementation of PeerConnectionIntegrationWrapper functions
+void PeerConnectionIntegrationWrapper::StartWatchingDelayStats() {
+ // Get the baseline numbers for audio_packets and audio_delay.
+ auto received_stats = NewGetStats();
+ auto rtp_stats =
+ received_stats->GetStatsOfType<RTCInboundRtpStreamStats>()[0];
+ ASSERT_TRUE(rtp_stats->relative_packet_arrival_delay.has_value());
+ ASSERT_TRUE(rtp_stats->packets_received.has_value());
+ rtp_stats_id_ = rtp_stats->id();
+ audio_packets_stat_ = *rtp_stats->packets_received;
+ audio_delay_stat_ = *rtp_stats->relative_packet_arrival_delay;
+ audio_samples_stat_ = *rtp_stats->total_samples_received;
+ audio_concealed_stat_ = *rtp_stats->concealed_samples;
+}
+
+void PeerConnectionIntegrationWrapper::UpdateDelayStats(std::string tag,
+ int desc_size) {
+ auto report = NewGetStats();
+ auto rtp_stats = report->GetAs<RTCInboundRtpStreamStats>(rtp_stats_id_);
+ ASSERT_TRUE(rtp_stats);
+ auto delta_packets = *rtp_stats->packets_received - audio_packets_stat_;
+ auto delta_rpad =
+ *rtp_stats->relative_packet_arrival_delay - audio_delay_stat_;
+ auto recent_delay = delta_packets > 0 ? delta_rpad / delta_packets : -1;
+ // The purpose of these checks is to sound the alarm early if we introduce
+ // serious regressions. The numbers are not acceptable for production, but
+ // occur on slow bots.
+ //
+ // An average relative packet arrival delay over the renegotiation of
+ // > 100 ms indicates that something is dramatically wrong, and will impact
+ // quality for sure.
+ // Worst bots:
+ // linux_x86_dbg at 0.206
+#if !defined(NDEBUG)
+ EXPECT_GT(0.25, recent_delay) << tag << " size " << desc_size;
+#else
+ EXPECT_GT(0.1, recent_delay) << tag << " size " << desc_size;
+#endif
+ auto delta_samples = *rtp_stats->total_samples_received - audio_samples_stat_;
+ auto delta_concealed = *rtp_stats->concealed_samples - audio_concealed_stat_;
+ // These limits should be adjusted down as we improve:
+ //
+ // Concealing more than 4000 samples during a renegotiation is unacceptable.
+ // But some bots are slow.
+
+ // Worst bots:
+ // linux_more_configs bot at conceal count 5184
+ // android_arm_rel at conceal count 9241
+ // linux_x86_dbg at 15174
+#if !defined(NDEBUG)
+ EXPECT_GT(18000U, delta_concealed) << "Concealed " << delta_concealed
+ << " of " << delta_samples << " samples";
+#else
+ EXPECT_GT(15000U, delta_concealed) << "Concealed " << delta_concealed
+ << " of " << delta_samples << " samples";
+#endif
+ // Concealing more than 20% of samples during a renegotiation is
+ // unacceptable.
+ // Worst bots:
+ // Nondebug: Linux32 Release at conceal rate 0.606597 (CI run)
+ // Debug: linux_x86_dbg bot at conceal rate 0.854
+ // internal bot at conceal rate 0.967 (b/294020344)
+ // TODO(https://crbug.com/webrtc/15393): Improve audio quality during
+ // renegotiation so that we can reduce these thresholds, 99% is not even
+ // close to the 20% deemed unacceptable above or the 0% that would be ideal.
+ if (delta_samples > 0) {
+#if !defined(NDEBUG)
+ EXPECT_LT(1.0 * delta_concealed / delta_samples, 0.99)
+ << "Concealed " << delta_concealed << " of " << delta_samples
+ << " samples";
+#else
+ EXPECT_LT(1.0 * delta_concealed / delta_samples, 0.7)
+ << "Concealed " << delta_concealed << " of " << delta_samples
+ << " samples";
+#endif
+ }
+ // Increment trailing counters
+ audio_packets_stat_ = *rtp_stats->packets_received;
+ audio_delay_stat_ = *rtp_stats->relative_packet_arrival_delay;
+ audio_samples_stat_ = *rtp_stats->total_samples_received;
+ audio_concealed_stat_ = *rtp_stats->concealed_samples;
+}
+
+bool PeerConnectionIntegrationWrapper::Init(
+ const PeerConnectionFactory::Options* options,
+ const PeerConnectionInterface::RTCConfiguration* config,
+ PeerConnectionDependencies dependencies,
+ rtc::SocketServer* socket_server,
+ rtc::Thread* network_thread,
+ rtc::Thread* worker_thread,
+ std::unique_ptr<FakeRtcEventLogFactory> event_log_factory,
+ bool reset_encoder_factory,
+ bool reset_decoder_factory,
+ bool create_media_engine) {
+ // There's an error in this test code if Init ends up being called twice.
+ RTC_DCHECK(!peer_connection_);
+ RTC_DCHECK(!peer_connection_factory_);
+
+ fake_network_manager_.reset(new rtc::FakeNetworkManager());
+ fake_network_manager_->AddInterface(kDefaultLocalAddress);
+
+ socket_factory_.reset(new rtc::BasicPacketSocketFactory(socket_server));
+
+ std::unique_ptr<cricket::PortAllocator> port_allocator(
+ new cricket::BasicPortAllocator(fake_network_manager_.get(),
+ socket_factory_.get()));
+ port_allocator_ = port_allocator.get();
+ fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
+ if (!fake_audio_capture_module_) {
+ return false;
+ }
+ rtc::Thread* const signaling_thread = rtc::Thread::Current();
+
+ PeerConnectionFactoryDependencies pc_factory_dependencies;
+ pc_factory_dependencies.network_thread = network_thread;
+ pc_factory_dependencies.worker_thread = worker_thread;
+ pc_factory_dependencies.signaling_thread = signaling_thread;
+ pc_factory_dependencies.task_queue_factory = CreateDefaultTaskQueueFactory();
+ pc_factory_dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
+ pc_factory_dependencies.decode_metronome =
+ std::make_unique<TaskQueueMetronome>(TimeDelta::Millis(8));
+
+ pc_factory_dependencies.adm = fake_audio_capture_module_;
+ if (create_media_engine) {
+ EnableMediaWithDefaults(pc_factory_dependencies);
+ }
+
+ if (reset_encoder_factory) {
+ pc_factory_dependencies.video_encoder_factory.reset();
+ }
+ if (reset_decoder_factory) {
+ pc_factory_dependencies.video_decoder_factory.reset();
+ }
+
+ if (!pc_factory_dependencies.audio_processing) {
+ // If the standard Creation method for APM returns a null pointer, instead
+ // use the builder for testing to create an APM object.
+ pc_factory_dependencies.audio_processing =
+ AudioProcessingBuilderForTesting().Create();
+ }
+
+ if (event_log_factory) {
+ event_log_factory_ = event_log_factory.get();
+ pc_factory_dependencies.event_log_factory = std::move(event_log_factory);
+ } else {
+ pc_factory_dependencies.event_log_factory =
+ std::make_unique<RtcEventLogFactory>();
+ }
+ peer_connection_factory_ =
+ CreateModularPeerConnectionFactory(std::move(pc_factory_dependencies));
+
+ if (!peer_connection_factory_) {
+ return false;
+ }
+ if (options) {
+ peer_connection_factory_->SetOptions(*options);
+ }
+ if (config) {
+ sdp_semantics_ = config->sdp_semantics;
+ }
+
+ dependencies.allocator = std::move(port_allocator);
+ peer_connection_ = CreatePeerConnection(config, std::move(dependencies));
+ return peer_connection_.get() != nullptr;
+}
+
} // namespace webrtc
diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h
index f1210fb..72ea286 100644
--- a/pc/test/integration_test_helpers.h
+++ b/pc/test/integration_test_helpers.h
@@ -645,88 +645,9 @@
}
// Functions for querying stats.
- void StartWatchingDelayStats() {
- // Get the baseline numbers for audio_packets and audio_delay.
- auto received_stats = NewGetStats();
- auto rtp_stats =
- received_stats->GetStatsOfType<RTCInboundRtpStreamStats>()[0];
- ASSERT_TRUE(rtp_stats->relative_packet_arrival_delay.has_value());
- ASSERT_TRUE(rtp_stats->packets_received.has_value());
- rtp_stats_id_ = rtp_stats->id();
- audio_packets_stat_ = *rtp_stats->packets_received;
- audio_delay_stat_ = *rtp_stats->relative_packet_arrival_delay;
- audio_samples_stat_ = *rtp_stats->total_samples_received;
- audio_concealed_stat_ = *rtp_stats->concealed_samples;
- }
+ void StartWatchingDelayStats();
- void UpdateDelayStats(std::string tag, int desc_size) {
- auto report = NewGetStats();
- auto rtp_stats = report->GetAs<RTCInboundRtpStreamStats>(rtp_stats_id_);
- ASSERT_TRUE(rtp_stats);
- auto delta_packets = *rtp_stats->packets_received - audio_packets_stat_;
- auto delta_rpad =
- *rtp_stats->relative_packet_arrival_delay - audio_delay_stat_;
- auto recent_delay = delta_packets > 0 ? delta_rpad / delta_packets : -1;
- // The purpose of these checks is to sound the alarm early if we introduce
- // serious regressions. The numbers are not acceptable for production, but
- // occur on slow bots.
- //
- // An average relative packet arrival delay over the renegotiation of
- // > 100 ms indicates that something is dramatically wrong, and will impact
- // quality for sure.
- // Worst bots:
- // linux_x86_dbg at 0.206
-#if !defined(NDEBUG)
- EXPECT_GT(0.25, recent_delay) << tag << " size " << desc_size;
-#else
- EXPECT_GT(0.1, recent_delay) << tag << " size " << desc_size;
-#endif
- auto delta_samples =
- *rtp_stats->total_samples_received - audio_samples_stat_;
- auto delta_concealed =
- *rtp_stats->concealed_samples - audio_concealed_stat_;
- // These limits should be adjusted down as we improve:
- //
- // Concealing more than 4000 samples during a renegotiation is unacceptable.
- // But some bots are slow.
-
- // Worst bots:
- // linux_more_configs bot at conceal count 5184
- // android_arm_rel at conceal count 9241
- // linux_x86_dbg at 15174
-#if !defined(NDEBUG)
- EXPECT_GT(18000U, delta_concealed) << "Concealed " << delta_concealed
- << " of " << delta_samples << " samples";
-#else
- EXPECT_GT(15000U, delta_concealed) << "Concealed " << delta_concealed
- << " of " << delta_samples << " samples";
-#endif
- // Concealing more than 20% of samples during a renegotiation is
- // unacceptable.
- // Worst bots:
- // Nondebug: Linux32 Release at conceal rate 0.606597 (CI run)
- // Debug: linux_x86_dbg bot at conceal rate 0.854
- // internal bot at conceal rate 0.967 (b/294020344)
- // TODO(https://crbug.com/webrtc/15393): Improve audio quality during
- // renegotiation so that we can reduce these thresholds, 99% is not even
- // close to the 20% deemed unacceptable above or the 0% that would be ideal.
- if (delta_samples > 0) {
-#if !defined(NDEBUG)
- EXPECT_LT(1.0 * delta_concealed / delta_samples, 0.99)
- << "Concealed " << delta_concealed << " of " << delta_samples
- << " samples";
-#else
- EXPECT_LT(1.0 * delta_concealed / delta_samples, 0.7)
- << "Concealed " << delta_concealed << " of " << delta_samples
- << " samples";
-#endif
- }
- // Increment trailing counters
- audio_packets_stat_ = *rtp_stats->packets_received;
- audio_delay_stat_ = *rtp_stats->relative_packet_arrival_delay;
- audio_samples_stat_ = *rtp_stats->total_samples_received;
- audio_concealed_stat_ = *rtp_stats->concealed_samples;
- }
+ void UpdateDelayStats(std::string tag, int desc_size);
// Sets number of candidates expected
void ExpectCandidates(int candidate_count) {
@@ -747,79 +668,7 @@
std::unique_ptr<FakeRtcEventLogFactory> event_log_factory,
bool reset_encoder_factory,
bool reset_decoder_factory,
- bool create_media_engine) {
- // There's an error in this test code if Init ends up being called twice.
- RTC_DCHECK(!peer_connection_);
- RTC_DCHECK(!peer_connection_factory_);
-
- fake_network_manager_.reset(new rtc::FakeNetworkManager());
- fake_network_manager_->AddInterface(kDefaultLocalAddress);
-
- socket_factory_.reset(new rtc::BasicPacketSocketFactory(socket_server));
-
- std::unique_ptr<cricket::PortAllocator> port_allocator(
- new cricket::BasicPortAllocator(fake_network_manager_.get(),
- socket_factory_.get()));
- port_allocator_ = port_allocator.get();
- fake_audio_capture_module_ = FakeAudioCaptureModule::Create();
- if (!fake_audio_capture_module_) {
- return false;
- }
- rtc::Thread* const signaling_thread = rtc::Thread::Current();
-
- PeerConnectionFactoryDependencies pc_factory_dependencies;
- pc_factory_dependencies.network_thread = network_thread;
- pc_factory_dependencies.worker_thread = worker_thread;
- pc_factory_dependencies.signaling_thread = signaling_thread;
- pc_factory_dependencies.task_queue_factory =
- CreateDefaultTaskQueueFactory();
- pc_factory_dependencies.trials = std::make_unique<FieldTrialBasedConfig>();
- pc_factory_dependencies.decode_metronome =
- std::make_unique<TaskQueueMetronome>(TimeDelta::Millis(8));
-
- pc_factory_dependencies.adm = fake_audio_capture_module_;
- if (create_media_engine) {
- EnableMediaWithDefaults(pc_factory_dependencies);
- }
-
- if (reset_encoder_factory) {
- pc_factory_dependencies.video_encoder_factory.reset();
- }
- if (reset_decoder_factory) {
- pc_factory_dependencies.video_decoder_factory.reset();
- }
-
- if (!pc_factory_dependencies.audio_processing) {
- // If the standard Creation method for APM returns a null pointer, instead
- // use the builder for testing to create an APM object.
- pc_factory_dependencies.audio_processing =
- AudioProcessingBuilderForTesting().Create();
- }
-
- if (event_log_factory) {
- event_log_factory_ = event_log_factory.get();
- pc_factory_dependencies.event_log_factory = std::move(event_log_factory);
- } else {
- pc_factory_dependencies.event_log_factory =
- std::make_unique<RtcEventLogFactory>();
- }
- peer_connection_factory_ =
- CreateModularPeerConnectionFactory(std::move(pc_factory_dependencies));
-
- if (!peer_connection_factory_) {
- return false;
- }
- if (options) {
- peer_connection_factory_->SetOptions(*options);
- }
- if (config) {
- sdp_semantics_ = config->sdp_semantics;
- }
-
- dependencies.allocator = std::move(port_allocator);
- peer_connection_ = CreatePeerConnection(config, std::move(dependencies));
- return peer_connection_.get() != nullptr;
- }
+ bool create_media_engine);
rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
const PeerConnectionInterface::RTCConfiguration* config,