Prepare for migration of TestPeer and TestPeerFactory on TimeController

Bug: webrtc:11743
Change-Id: I99a9746830a1c6abae753d33cf61890f7a372608
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178605
Reviewed-by: Andrey Logvin <landrey@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31622}
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 6ac07ad..dd5e8d7 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -261,6 +261,7 @@
         ":video_quality_analyzer_injection_helper",
         "../..:copy_to_file_audio_capturer",
         "../../../api:peer_connection_quality_test_fixture_api",
+        "../../../api:time_controller",
         "../../../api/rtc_event_log:rtc_event_log_factory",
         "../../../api/task_queue:default_task_queue_factory",
         "../../../api/video_codecs:builtin_video_decoder_factory",
diff --git a/test/pc/e2e/peer_connection_quality_test.cc b/test/pc/e2e/peer_connection_quality_test.cc
index 3b3da67..aa7e855 100644
--- a/test/pc/e2e/peer_connection_quality_test.cc
+++ b/test/pc/e2e/peer_connection_quality_test.cc
@@ -216,7 +216,10 @@
       bob_configurer->params()->video_configs;
   std::string bob_name = bob_configurer->params()->name.value();
 
-  alice_ = TestPeerFactory::CreateTestPeer(
+  TestPeerFactory test_peer_factory(
+      signaling_thread.get(), video_quality_analyzer_injection_helper_.get(),
+      task_queue_.get());
+  alice_ = test_peer_factory.CreateTestPeer(
       std::move(alice_configurer),
       std::make_unique<FixturePeerConnectionObserver>(
           [this, bob_video_configs, alice_name](
@@ -224,10 +227,9 @@
             OnTrackCallback(alice_name, transceiver, bob_video_configs);
           },
           [this]() { StartVideo(alice_video_sources_); }),
-      video_quality_analyzer_injection_helper_.get(), signaling_thread.get(),
       alice_remote_audio_config, run_params.video_encoder_bitrate_multiplier,
-      run_params.echo_emulation_config, task_queue_.get());
-  bob_ = TestPeerFactory::CreateTestPeer(
+      run_params.echo_emulation_config);
+  bob_ = test_peer_factory.CreateTestPeer(
       std::move(bob_configurer),
       std::make_unique<FixturePeerConnectionObserver>(
           [this, alice_video_configs,
@@ -235,9 +237,8 @@
             OnTrackCallback(bob_name, transceiver, alice_video_configs);
           },
           [this]() { StartVideo(bob_video_sources_); }),
-      video_quality_analyzer_injection_helper_.get(), signaling_thread.get(),
       bob_remote_audio_config, run_params.video_encoder_bitrate_multiplier,
-      run_params.echo_emulation_config, task_queue_.get());
+      run_params.echo_emulation_config);
 
   int num_cores = CpuInfo::DetectNumberOfCores();
   RTC_DCHECK_GE(num_cores, 1);
diff --git a/test/pc/e2e/test_peer_factory.cc b/test/pc/e2e/test_peer_factory.cc
index f700f1c..134e441 100644
--- a/test/pc/e2e/test_peer_factory.cc
+++ b/test/pc/e2e/test_peer_factory.cc
@@ -280,16 +280,20 @@
 }
 
 std::unique_ptr<TestPeer> TestPeerFactory::CreateTestPeer(
-    std::unique_ptr<InjectableComponents> components,
-    std::unique_ptr<Params> params,
-    std::vector<PeerConfigurerImpl::VideoSource> video_sources,
+    std::unique_ptr<PeerConfigurerImpl> configurer,
     std::unique_ptr<MockPeerConnectionObserver> observer,
     VideoQualityAnalyzerInjectionHelper* video_analyzer_helper,
     rtc::Thread* signaling_thread,
     absl::optional<RemotePeerAudioConfig> remote_audio_config,
     double bitrate_multiplier,
-    absl::optional<EchoEmulationConfig> echo_emulation_config,
+    absl::optional<PeerConnectionE2EQualityTestFixture::EchoEmulationConfig>
+        echo_emulation_config,
     rtc::TaskQueue* task_queue) {
+  std::unique_ptr<InjectableComponents> components =
+      configurer->ReleaseComponents();
+  std::unique_ptr<Params> params = configurer->ReleaseParams();
+  std::vector<PeerConfigurerImpl::VideoSource> video_sources =
+      configurer->ReleaseVideoSources();
   RTC_DCHECK(components);
   RTC_DCHECK(params);
   RTC_DCHECK_EQ(params->video_configs.size(), video_sources.size());
@@ -339,18 +343,14 @@
 std::unique_ptr<TestPeer> TestPeerFactory::CreateTestPeer(
     std::unique_ptr<PeerConfigurerImpl> configurer,
     std::unique_ptr<MockPeerConnectionObserver> observer,
-    VideoQualityAnalyzerInjectionHelper* video_analyzer_helper,
-    rtc::Thread* signaling_thread,
     absl::optional<RemotePeerAudioConfig> remote_audio_config,
     double bitrate_multiplier,
     absl::optional<PeerConnectionE2EQualityTestFixture::EchoEmulationConfig>
-        echo_emulation_config,
-    rtc::TaskQueue* task_queue) {
-  return CreateTestPeer(
-      configurer->ReleaseComponents(), configurer->ReleaseParams(),
-      configurer->ReleaseVideoSources(), std::move(observer),
-      video_analyzer_helper, signaling_thread, remote_audio_config,
-      bitrate_multiplier, echo_emulation_config, task_queue);
+        echo_emulation_config) {
+  return CreateTestPeer(std::move(configurer), std::move(observer),
+                        video_analyzer_helper_, signaling_thread_,
+                        remote_audio_config, bitrate_multiplier,
+                        echo_emulation_config, task_queue_);
 }
 
 }  // namespace webrtc_pc_e2e
diff --git a/test/pc/e2e/test_peer_factory.h b/test/pc/e2e/test_peer_factory.h
index 3233bb6..edbfe8b 100644
--- a/test/pc/e2e/test_peer_factory.h
+++ b/test/pc/e2e/test_peer_factory.h
@@ -19,6 +19,7 @@
 #include "absl/strings/string_view.h"
 #include "api/rtc_event_log/rtc_event_log_factory.h"
 #include "api/test/peerconnection_quality_test_fixture.h"
+#include "api/test/time_controller.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "rtc_base/task_queue.h"
 #include "test/pc/e2e/analyzer/video/video_quality_analyzer_injection_helper.h"
@@ -44,26 +45,31 @@
 
 class TestPeerFactory {
  public:
-  // Setups all components, that should be provided to WebRTC
-  // PeerConnectionFactory and PeerConnection creation methods,
-  // also will setup dependencies, that are required for media analyzers
-  // injection.
-  //
-  // |signaling_thread| will be provided by test fixture implementation.
-  // |params| - describes current peer parameters, like current peer video
-  // streams and audio streams
-  static std::unique_ptr<TestPeer> CreateTestPeer(
-      std::unique_ptr<InjectableComponents> components,
-      std::unique_ptr<Params> params,
-      std::vector<PeerConfigurerImpl::VideoSource> video_sources,
-      std::unique_ptr<MockPeerConnectionObserver> observer,
-      VideoQualityAnalyzerInjectionHelper* video_analyzer_helper,
-      rtc::Thread* signaling_thread,
-      absl::optional<RemotePeerAudioConfig> remote_audio_config,
-      double bitrate_multiplier,
-      absl::optional<PeerConnectionE2EQualityTestFixture::EchoEmulationConfig>
-          echo_emulation_config,
-      rtc::TaskQueue* task_queue);
+  // Creates a test peer factory.
+  // |signaling_thread| will be used as a signaling thread for all peers created
+  // by this factory.
+  // |time_controller| will be used to create required threads, task queue
+  // 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,
+                  rtc::TaskQueue* task_queue)
+      : signaling_thread_(signaling_thread),
+        video_analyzer_helper_(video_analyzer_helper),
+        task_queue_(task_queue) {}
+
+  // Same as previous. Created for keeping backward compatibility during
+  // migration. Will be removed soon.
+  TestPeerFactory(rtc::Thread* signaling_thread,
+                  VideoQualityAnalyzerInjectionHelper* video_analyzer_helper,
+                  rtc::TaskQueue* task_queue)
+      : signaling_thread_(signaling_thread),
+        video_analyzer_helper_(video_analyzer_helper),
+        task_queue_(task_queue) {}
+
   // Setups all components, that should be provided to WebRTC
   // PeerConnectionFactory and PeerConnection creation methods,
   // also will setup dependencies, that are required for media analyzers
@@ -80,6 +86,19 @@
       absl::optional<PeerConnectionE2EQualityTestFixture::EchoEmulationConfig>
           echo_emulation_config,
       rtc::TaskQueue* task_queue);
+
+  std::unique_ptr<TestPeer> CreateTestPeer(
+      std::unique_ptr<PeerConfigurerImpl> configurer,
+      std::unique_ptr<MockPeerConnectionObserver> observer,
+      absl::optional<RemotePeerAudioConfig> remote_audio_config,
+      double bitrate_multiplier,
+      absl::optional<PeerConnectionE2EQualityTestFixture::EchoEmulationConfig>
+          echo_emulation_config);
+
+ private:
+  rtc::Thread* signaling_thread_;
+  VideoQualityAnalyzerInjectionHelper* video_analyzer_helper_;
+  rtc::TaskQueue* task_queue_;
 };
 
 }  // namespace webrtc_pc_e2e