Move TaskQueueFactory from Call::Create parameter to CallConfig

to decouple it from other optional parameters
and with plan to make it mandatory

Bug: webrtc:10284
Change-Id: I71c1d3d9eaf09d00b99b0bc4c811ab173ea5f01f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/130473
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27385}
diff --git a/call/call.cc b/call/call.cc
index 3f7ef5f..e458c48 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -424,16 +424,20 @@
 }
 
 Call* Call::Create(const Call::Config& config) {
-  return Create(
-      config, Clock::GetRealTimeClock(), ProcessThread::Create("PacerThread"),
-      ProcessThread::Create("ModuleProcessThread"), &GlobalTaskQueueFactory());
+  return Create(config, Clock::GetRealTimeClock(),
+                ProcessThread::Create("PacerThread"),
+                ProcessThread::Create("ModuleProcessThread"));
 }
 
 Call* Call::Create(const Call::Config& config,
                    Clock* clock,
                    std::unique_ptr<ProcessThread> call_thread,
-                   std::unique_ptr<ProcessThread> pacer_thread,
-                   TaskQueueFactory* task_queue_factory) {
+                   std::unique_ptr<ProcessThread> pacer_thread) {
+  // TODO(bugs.webrtc.org/10284): DCHECK task_queue_factory dependency is
+  // always provided in the config.
+  TaskQueueFactory* task_queue_factory = config.task_queue_factory
+                                             ? config.task_queue_factory
+                                             : &GlobalTaskQueueFactory();
   return new internal::Call(
       clock, config,
       absl::make_unique<RtpTransportControllerSend>(
diff --git a/call/call.h b/call/call.h
index 90977da..1c29fee 100644
--- a/call/call.h
+++ b/call/call.h
@@ -16,7 +16,6 @@
 #include <vector>
 
 #include "api/media_types.h"
-#include "api/task_queue/task_queue_factory.h"
 #include "call/audio_receive_stream.h"
 #include "call/audio_send_stream.h"
 #include "call/call_config.h"
@@ -54,8 +53,7 @@
   static Call* Create(const Call::Config& config,
                       Clock* clock,
                       std::unique_ptr<ProcessThread> call_thread,
-                      std::unique_ptr<ProcessThread> pacer_thread,
-                      TaskQueueFactory* task_queue_factory);
+                      std::unique_ptr<ProcessThread> pacer_thread);
 
   virtual AudioSendStream* CreateAudioSendStream(
       const AudioSendStream::Config& config) = 0;
diff --git a/call/call_config.h b/call/call_config.h
index 260a3ac..eaac16b 100644
--- a/call/call_config.h
+++ b/call/call_config.h
@@ -13,6 +13,7 @@
 #include "api/bitrate_constraints.h"
 #include "api/fec_controller.h"
 #include "api/rtc_error.h"
+#include "api/task_queue/task_queue_factory.h"
 #include "api/transport/network_control.h"
 #include "call/audio_state.h"
 
@@ -45,6 +46,9 @@
   // FecController to use for this call.
   FecControllerFactoryInterface* fec_controller_factory = nullptr;
 
+  // Task Queue Factory to be used in this call.
+  TaskQueueFactory* task_queue_factory = nullptr;
+
   // Network controller factory to use for this call.
   NetworkControllerFactoryInterface* network_controller_factory = nullptr;
 };
diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc
index 7df4e03..47da762 100644
--- a/test/scenario/call_client.cc
+++ b/test/scenario/call_client.cc
@@ -60,12 +60,12 @@
       config.transport.rates.min_rate.bps();
   call_config.bitrate_config.start_bitrate_bps =
       config.transport.rates.start_rate.bps();
+  call_config.task_queue_factory = time_controller->GetTaskQueueFactory();
   call_config.network_controller_factory = network_controller_factory;
   call_config.audio_state = audio_state;
   return Call::Create(call_config, time_controller->GetClock(),
                       time_controller->CreateProcessThread("CallModules"),
-                      time_controller->CreateProcessThread("Pacer"),
-                      time_controller->GetTaskQueueFactory());
+                      time_controller->CreateProcessThread("Pacer"));
 }
 }