For test peer start/stop AEC dump using peer connection factory api

Instead of using AudioProcessing API directly
With AudioProcessing constructing move into the PeerConnectionFactory it is possible TestPeer doesn't have direct access to audio_processing, yet it is not null.

Bug: webrtc:369904700
Change-Id: I5a4a9453ea3a0c735da8953c9ae5d9046d4e3916
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/365585
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43240}
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 01ae598..d728237 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -67,6 +67,11 @@
         "../../../api:frame_generator_api",
         "../../../api:function_view",
         "../../../api:libjingle_peerconnection_api",
+        "../../../api:make_ref_counted",
+        "../../../api:media_stream_interface",
+        "../../../api:rtc_error",
+        "../../../api:rtc_stats_api",
+        "../../../api:rtp_parameters",
         "../../../api:scoped_refptr",
         "../../../api:sequence_checker",
         "../../../api/audio:audio_processing",
@@ -74,9 +79,13 @@
         "../../../api/test/pclf:media_configuration",
         "../../../api/test/pclf:media_quality_test_params",
         "../../../api/test/pclf:peer_configurer",
+        "../../../pc:pc_test_utils",
         "../../../pc:peerconnection_wrapper",
+        "../../../rtc_base:checks",
         "../../../rtc_base:logging",
+        "../../../rtc_base:macromagic",
         "../../../rtc_base:refcount",
+        "../../../rtc_base:threading",
         "../../../rtc_base/synchronization:mutex",
         "//third_party/abseil-cpp/absl/memory",
         "//third_party/abseil-cpp/absl/strings:string_view",
@@ -95,7 +104,10 @@
         "../..:copy_to_file_audio_capturer",
         "../../../api:create_time_controller",
         "../../../api:enable_media_with_defaults",
+        "../../../api:libjingle_peerconnection_api",
+        "../../../api:scoped_refptr",
         "../../../api:time_controller",
+        "../../../api/audio:audio_device",
         "../../../api/rtc_event_log:rtc_event_log_factory",
         "../../../api/task_queue",
         "../../../api/task_queue:default_task_queue_factory",
@@ -105,13 +117,18 @@
         "../../../api/transport:field_trial_based_config",
         "../../../api/video_codecs:builtin_video_decoder_factory",
         "../../../api/video_codecs:builtin_video_encoder_factory",
+        "../../../api/video_codecs:video_codecs_api",
         "../../../modules/audio_device:test_audio_device_module",
         "../../../modules/audio_processing/aec_dump",
         "../../../p2p:basic_port_allocator",
         "../../../p2p:rtc_p2p",
+        "../../../pc:pc_test_utils",
+        "../../../rtc_base:checks",
         "../../../rtc_base:threading",
+        "../../../rtc_base/system:file_wrapper",
         "analyzer/video:quality_analyzing_video_encoder",
         "analyzer/video:video_quality_analyzer_injection_helper",
+        "//third_party/abseil-cpp/absl/base:core_headers",
         "//third_party/abseil-cpp/absl/memory",
         "//third_party/abseil-cpp/absl/strings:string_view",
       ]
@@ -218,19 +235,26 @@
         ":peer_params_preprocessor",
         ":sdp_changer",
         ":stats_poller",
+        ":stats_provider",
         ":test_activities_executor",
         ":test_peer",
         ":test_peer_factory",
+        ":test_video_capturer_video_track_source",
         "../..:field_trial",
         "../..:fileutils",
         "../..:perf_test",
         "../..:test_flags",
+        "../..:test_support",
         "../../../api:audio_quality_analyzer_api",
         "../../../api:libjingle_peerconnection_api",
         "../../../api:media_stream_interface",
         "../../../api:peer_connection_quality_test_fixture_api",
+        "../../../api:rtc_error",
         "../../../api:rtc_event_log_output_file",
+        "../../../api:rtp_parameters",
+        "../../../api:rtp_transceiver_direction",
         "../../../api:scoped_refptr",
+        "../../../api:stats_observer_interface",
         "../../../api:time_controller",
         "../../../api:video_quality_analyzer_api",
         "../../../api/rtc_event_log",
@@ -242,15 +266,20 @@
         "../../../api/test/pclf:peer_configurer",
         "../../../api/units:time_delta",
         "../../../api/units:timestamp",
+        "../../../api/video:video_frame",
+        "../../../media:media_constants",
         "../../../pc:pc_test_utils",
         "../../../pc:sdp_utils",
+        "../../../rtc_base:checks",
         "../../../rtc_base:gunit_helpers",
+        "../../../rtc_base:logging",
         "../../../rtc_base:macromagic",
         "../../../rtc_base:safe_conversions",
         "../../../rtc_base:stringutils",
         "../../../rtc_base:task_queue_for_test",
         "../../../rtc_base:threading",
         "../../../rtc_base/synchronization:mutex",
+        "../../../rtc_base/task_utils:repeating_task",
         "../../../system_wrappers",
         "../../../system_wrappers:field_trial",
         "analyzer/video:default_video_quality_analyzer",
diff --git a/test/pc/e2e/peer_connection_quality_test.cc b/test/pc/e2e/peer_connection_quality_test.cc
index fac96e2..8fa9982 100644
--- a/test/pc/e2e/peer_connection_quality_test.cc
+++ b/test/pc/e2e/peer_connection_quality_test.cc
@@ -10,40 +10,72 @@
 #include "test/pc/e2e/peer_connection_quality_test.h"
 
 #include <algorithm>
+#include <cstddef>
+#include <cstdio>
+#include <functional>
+#include <map>
 #include <memory>
-#include <set>
+#include <optional>
+#include <string>
 #include <utility>
+#include <vector>
 
 #include "absl/flags/flag.h"
 #include "absl/strings/string_view.h"
 #include "api/jsep.h"
 #include "api/media_stream_interface.h"
+#include "api/media_types.h"
 #include "api/peer_connection_interface.h"
+#include "api/rtc_error.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/rtc_event_log_output_file.h"
+#include "api/rtp_parameters.h"
+#include "api/rtp_transceiver_direction.h"
+#include "api/rtp_transceiver_interface.h"
 #include "api/scoped_refptr.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "api/test/audio_quality_analyzer_interface.h"
 #include "api/test/metrics/metric.h"
+#include "api/test/metrics/metrics_logger.h"
 #include "api/test/pclf/media_configuration.h"
+#include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
+#include "api/test/stats_observer_interface.h"
 #include "api/test/time_controller.h"
 #include "api/test/video_quality_analyzer_interface.h"
-#include "pc/sdp_utils.h"
+#include "api/units/time_delta.h"
+#include "api/units/timestamp.h"
+#include "api/video/video_frame.h"
+#include "api/video/video_sink_interface.h"
+#include "api/video/video_source_interface.h"
+#include "media/base/media_constants.h"
 #include "pc/test/mock_peer_connection_observers.h"
-#include "rtc_base/gunit.h"
-#include "rtc_base/numerics/safe_conversions.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/logging.h"
 #include "rtc_base/strings/string_builder.h"
+#include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/task_utils/repeating_task.h"
 #include "system_wrappers/include/cpu_info.h"
 #include "system_wrappers/include/field_trial.h"
 #include "test/field_trial.h"
+#include "test/gtest.h"
 #include "test/pc/e2e/analyzer/audio/default_audio_quality_analyzer.h"
 #include "test/pc/e2e/analyzer/video/default_video_quality_analyzer.h"
+#include "test/pc/e2e/analyzer/video/single_process_encoded_image_data_injector.h"
 #include "test/pc/e2e/analyzer/video/video_frame_tracking_id_injector.h"
+#include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h"
 #include "test/pc/e2e/analyzer/video/video_quality_metrics_reporter.h"
 #include "test/pc/e2e/cross_media_metrics_reporter.h"
+#include "test/pc/e2e/media/media_helper.h"
+#include "test/pc/e2e/media/test_video_capturer_video_track_source.h"
 #include "test/pc/e2e/metric_metadata_keys.h"
 #include "test/pc/e2e/peer_params_preprocessor.h"
+#include "test/pc/e2e/sdp/sdp_changer.h"
 #include "test/pc/e2e/stats_poller.h"
+#include "test/pc/e2e/stats_provider.h"
+#include "test/pc/e2e/test_activities_executor.h"
+#include "test/pc/e2e/test_peer.h"
 #include "test/pc/e2e/test_peer_factory.h"
 #include "test/test_flags.h"
 #include "test/testsupport/file_utils.h"
@@ -275,7 +307,7 @@
 
   TestPeerFactory test_peer_factory(
       signaling_thread.get(), time_controller_,
-      video_quality_analyzer_injection_helper_.get(), task_queue_->Get());
+      video_quality_analyzer_injection_helper_.get());
   alice_ = test_peer_factory.CreateTestPeer(
       std::move(alice_configurer),
       std::make_unique<FixturePeerConnectionObserver>(
diff --git a/test/pc/e2e/test_peer.cc b/test/pc/e2e/test_peer.cc
index d1f4534..6c5f7d1 100644
--- a/test/pc/e2e/test_peer.cc
+++ b/test/pc/e2e/test_peer.cc
@@ -9,15 +9,29 @@
  */
 #include "test/pc/e2e/test_peer.h"
 
+#include <memory>
 #include <string>
 #include <utility>
+#include <vector>
 
-#include "absl/memory/memory.h"
 #include "absl/strings/string_view.h"
-#include "api/audio/audio_processing.h"
+#include "api/jsep.h"
+#include "api/make_ref_counted.h"
+#include "api/peer_connection_interface.h"
+#include "api/rtc_error.h"
 #include "api/scoped_refptr.h"
+#include "api/set_remote_description_observer_interface.h"
+#include "api/stats/rtc_stats_collector_callback.h"
+#include "api/task_queue/pending_task_safety_flag.h"
 #include "api/test/pclf/media_configuration.h"
+#include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
+#include "pc/peer_connection_wrapper.h"
+#include "pc/test/mock_peer_connection_observers.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread.h"
 
 namespace webrtc {
 namespace webrtc_pc_e2e {
@@ -121,7 +135,6 @@
   signaling_thread_task_safety_->SetNotAlive();
   wrapper_->pc()->Close();
   remote_ice_candidates_.clear();
-  audio_processing_ = nullptr;
   video_sources_.clear();
   wrapper_ = nullptr;
   worker_thread_ = nullptr;
@@ -134,7 +147,6 @@
     Params params,
     ConfigurableParams configurable_params,
     std::vector<PeerConfigurer::VideoSource> video_sources,
-    rtc::scoped_refptr<AudioProcessing> audio_processing,
     std::unique_ptr<rtc::Thread> worker_thread)
     : params_(std::move(params)),
       configurable_params_(std::move(configurable_params)),
@@ -142,8 +154,7 @@
       wrapper_(std::make_unique<PeerConnectionWrapper>(std::move(pc_factory),
                                                        std::move(pc),
                                                        std::move(observer))),
-      video_sources_(std::move(video_sources)),
-      audio_processing_(audio_processing) {
+      video_sources_(std::move(video_sources)) {
   signaling_thread_task_safety_ = PendingTaskSafetyFlag::CreateDetached();
 }
 
diff --git a/test/pc/e2e/test_peer.h b/test/pc/e2e/test_peer.h
index 0956e05..96a376b 100644
--- a/test/pc/e2e/test_peer.h
+++ b/test/pc/e2e/test_peer.h
@@ -11,24 +11,34 @@
 #ifndef TEST_PC_E2E_TEST_PEER_H_
 #define TEST_PC_E2E_TEST_PEER_H_
 
+#include <cstddef>
 #include <memory>
 #include <optional>
+#include <string>
+#include <utility>
 #include <vector>
 
-#include "absl/memory/memory.h"
 #include "absl/strings/string_view.h"
-#include "api/function_view.h"
+#include "api/data_channel_interface.h"
+#include "api/jsep.h"
+#include "api/media_stream_interface.h"
+#include "api/media_types.h"
+#include "api/peer_connection_interface.h"
+#include "api/rtp_sender_interface.h"
+#include "api/rtp_transceiver_interface.h"
 #include "api/scoped_refptr.h"
-#include "api/sequence_checker.h"
-#include "api/set_remote_description_observer_interface.h"
+#include "api/stats/rtc_stats_collector_callback.h"
+#include "api/stats/rtc_stats_report.h"
 #include "api/task_queue/pending_task_safety_flag.h"
-#include "api/test/frame_generator_interface.h"
 #include "api/test/pclf/media_configuration.h"
 #include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
 #include "pc/peer_connection_wrapper.h"
-#include "rtc_base/logging.h"
+#include "pc/test/mock_peer_connection_observers.h"
+#include "rtc_base/checks.h"
 #include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread.h"
+#include "rtc_base/thread_annotations.h"
 #include "test/pc/e2e/stats_provider.h"
 
 namespace webrtc {
@@ -138,9 +148,7 @@
 
   void DetachAecDump() {
     RTC_CHECK(wrapper_) << "TestPeer is already closed";
-    if (audio_processing_) {
-      audio_processing_->DetachAecDump();
-    }
+    wrapper_->pc_factory()->StopAecDump();
   }
 
   // Adds provided `candidates` to the owned peer connection.
@@ -159,7 +167,6 @@
            Params params,
            ConfigurableParams configurable_params,
            std::vector<PeerConfigurer::VideoSource> video_sources,
-           rtc::scoped_refptr<AudioProcessing> audio_processing,
            std::unique_ptr<rtc::Thread> worker_thread);
 
  private:
@@ -179,7 +186,6 @@
   std::unique_ptr<rtc::Thread> worker_thread_;
   std::unique_ptr<PeerConnectionWrapper> wrapper_;
   std::vector<PeerConfigurer::VideoSource> video_sources_;
-  rtc::scoped_refptr<AudioProcessing> audio_processing_;
 
   std::vector<std::unique_ptr<IceCandidateInterface>> remote_ice_candidates_;
 };
diff --git a/test/pc/e2e/test_peer_factory.cc b/test/pc/e2e/test_peer_factory.cc
index f0ffe9f..a744b95 100644
--- a/test/pc/e2e/test_peer_factory.cc
+++ b/test/pc/e2e/test_peer_factory.cc
@@ -9,24 +9,40 @@
  */
 #include "test/pc/e2e/test_peer_factory.h"
 
+#include <cstdint>
+#include <memory>
+#include <optional>
 #include <utility>
+#include <vector>
 
 #include "absl/memory/memory.h"
 #include "absl/strings/string_view.h"
-#include "api/enable_media_with_defaults.h"
-#include "api/task_queue/default_task_queue_factory.h"
+#include "api/audio/audio_device.h"
+#include "api/peer_connection_interface.h"
+#include "api/rtc_event_log/rtc_event_log_factory.h"
+#include "api/scoped_refptr.h"
+#include "api/task_queue/task_queue_factory.h"
 #include "api/test/create_time_controller.h"
 #include "api/test/pclf/media_configuration.h"
+#include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
 #include "api/test/time_controller.h"
 #include "api/transport/field_trial_based_config.h"
 #include "api/video_codecs/builtin_video_decoder_factory.h"
 #include "api/video_codecs/builtin_video_encoder_factory.h"
-#include "modules/audio_processing/aec_dump/aec_dump_factory.h"
+#include "api/video_codecs/video_decoder_factory.h"
+#include "api/video_codecs/video_encoder_factory.h"
+#include "modules/audio_device/include/test_audio_device.h"
+#include "p2p/base/port_allocator.h"
 #include "p2p/client/basic_port_allocator.h"
+#include "pc/test/mock_peer_connection_observers.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/system/file_wrapper.h"
 #include "rtc_base/thread.h"
 #include "test/pc/e2e/analyzer/video/quality_analyzing_video_encoder.h"
+#include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h"
 #include "test/pc/e2e/echo/echo_emulation.h"
+#include "test/pc/e2e/test_peer.h"
 #include "test/testsupport/copy_to_file_audio_capturer.h"
 
 namespace webrtc {
@@ -288,14 +304,6 @@
   params->rtc_configuration.sdp_semantics = SdpSemantics::kUnifiedPlan;
 
   // Create peer connection factory.
-  if (components->pcf_dependencies->audio_processing == nullptr) {
-    components->pcf_dependencies->audio_processing =
-        webrtc::AudioProcessingBuilder().Create();
-  }
-  if (params->aec_dump_path) {
-    components->pcf_dependencies->audio_processing->CreateAndAttachAecDump(
-        *params->aec_dump_path, -1, task_queue_);
-  }
   rtc::scoped_refptr<AudioDeviceModule> audio_device_module =
       CreateAudioDeviceModule(params->audio_config, remote_audio_config,
                               echo_emulation_config,
@@ -317,10 +325,6 @@
     components->worker_thread = owned_worker_thread.get();
   }
 
-  // Store `webrtc::AudioProcessing` into local variable before move of
-  // `components->pcf_dependencies`
-  rtc::scoped_refptr<webrtc::AudioProcessing> audio_processing =
-      components->pcf_dependencies->audio_processing;
   PeerConnectionFactoryDependencies pcf_deps = CreatePCFDependencies(
       std::move(components->pcf_dependencies), time_controller_,
       std::move(audio_device_module), signaling_thread_,
@@ -328,6 +332,10 @@
   rtc::scoped_refptr<PeerConnectionFactoryInterface> peer_connection_factory =
       CreateModularPeerConnectionFactory(std::move(pcf_deps));
   peer_connection_factory->SetOptions(params->peer_connection_factory_options);
+  if (params->aec_dump_path) {
+    peer_connection_factory->StartAecDump(
+        FileWrapper::OpenWriteOnly(*params->aec_dump_path).Release(), -1);
+  }
 
   // Create peer connection.
   PeerConnectionDependencies pc_deps =
@@ -340,11 +348,10 @@
           .MoveValue();
   peer_connection->SetBitrate(params->bitrate_settings);
 
-  return absl::WrapUnique(
-      new TestPeer(peer_connection_factory, peer_connection,
-                   std::move(observer), std::move(*params),
-                   std::move(*configurable_params), std::move(video_sources),
-                   audio_processing, std::move(owned_worker_thread)));
+  return absl::WrapUnique(new TestPeer(
+      peer_connection_factory, peer_connection, std::move(observer),
+      std::move(*params), std::move(*configurable_params),
+      std::move(video_sources), std::move(owned_worker_thread)));
 }
 
 }  // namespace webrtc_pc_e2e
diff --git a/test/pc/e2e/test_peer_factory.h b/test/pc/e2e/test_peer_factory.h
index 34462c1..aa42f98 100644
--- a/test/pc/e2e/test_peer_factory.h
+++ b/test/pc/e2e/test_peer_factory.h
@@ -11,19 +11,17 @@
 #ifndef TEST_PC_E2E_TEST_PEER_FACTORY_H_
 #define TEST_PC_E2E_TEST_PEER_FACTORY_H_
 
-#include <map>
 #include <memory>
+#include <optional>
 #include <string>
-#include <vector>
 
-#include "absl/strings/string_view.h"
-#include "api/rtc_event_log/rtc_event_log_factory.h"
+#include "absl/base/macros.h"
 #include "api/task_queue/task_queue_base.h"
 #include "api/test/pclf/media_configuration.h"
-#include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
 #include "api/test/time_controller.h"
-#include "modules/audio_device/include/test_audio_device.h"
+#include "pc/test/mock_peer_connection_observers.h"
+#include "rtc_base/thread.h"
 #include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h"
 #include "test/pc/e2e/test_peer.h"
 
@@ -51,15 +49,21 @@
   // factories and call factory.
   // `video_analyzer_helper` will be used to setup video quality analysis for
   // created peers.
-  // `task_queue` will be used for AEC dump if it is requested.
+  TestPeerFactory(rtc::Thread* signaling_thread,
+                  TimeController& time_controller,
+                  VideoQualityAnalyzerInjectionHelper* video_analyzer_helper)
+      : signaling_thread_(signaling_thread),
+        time_controller_(time_controller),
+        video_analyzer_helper_(video_analyzer_helper) {}
+
+  ABSL_DEPRECATE_AND_INLINE()
   TestPeerFactory(rtc::Thread* signaling_thread,
                   TimeController& time_controller,
                   VideoQualityAnalyzerInjectionHelper* video_analyzer_helper,
-                  TaskQueueBase* task_queue)
-      : signaling_thread_(signaling_thread),
-        time_controller_(time_controller),
-        video_analyzer_helper_(video_analyzer_helper),
-        task_queue_(task_queue) {}
+                  TaskQueueBase* /*task_queue*/)
+      : TestPeerFactory(signaling_thread,
+                        time_controller,
+                        video_analyzer_helper) {}
 
   // Setups all components, that should be provided to WebRTC
   // PeerConnectionFactory and PeerConnection creation methods,
@@ -75,7 +79,6 @@
   rtc::Thread* signaling_thread_;
   TimeController& time_controller_;
   VideoQualityAnalyzerInjectionHelper* video_analyzer_helper_;
-  TaskQueueBase* const task_queue_;
 };
 
 }  // namespace webrtc_pc_e2e