Provide Environment when AudioDeviceModule created for testing purpose

Bug: webrtc:413413572
Change-Id: Ic9425b0d787fc5ec03aa3c012483036a72ce89fe
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/389140
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#44505}
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index b72558d..17e988e 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -237,8 +237,7 @@
     metrics::Reset();
     scoped_refptr<AudioDeviceModule> fake_audio_device =
         TestAudioDeviceModule::Create(
-            &env().task_queue_factory(),
-            TestAudioDeviceModule::CreatePulsedNoiseCapturer(256, 48000),
+            env(), TestAudioDeviceModule::CreatePulsedNoiseCapturer(256, 48000),
             TestAudioDeviceModule::CreateDiscardRenderer(48000),
             audio_rtp_speed);
     EXPECT_EQ(0, fake_audio_device->Init());
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index d527ef6..805a6ab 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -178,6 +178,11 @@
       "test_audio_device_impl.cc",
       "test_audio_device_impl.h",
     ]
+
+    # TODO: bugs.webrtc.org/413413572 - Mark this build target as testonly or
+    # or update downstream not to use deprecated function. Explicit poison
+    # can be removed then.
+    allow_poison = [ "environment_construction" ]
     deps = [
       ":audio_device_buffer",
       ":audio_device_default",
@@ -187,6 +192,8 @@
       "../../api:make_ref_counted",
       "../../api:scoped_refptr",
       "../../api/audio:audio_device",
+      "../../api/environment",
+      "../../api/environment:environment_factory",
       "../../api/task_queue",
       "../../api/units:time_delta",
       "../../common_audio",
diff --git a/modules/audio_device/include/test_audio_device.cc b/modules/audio_device/include/test_audio_device.cc
index a0e0ef8..f6d5386 100644
--- a/modules/audio_device/include/test_audio_device.cc
+++ b/modules/audio_device/include/test_audio_device.cc
@@ -21,6 +21,8 @@
 #include "absl/strings/string_view.h"
 #include "api/array_view.h"
 #include "api/audio/audio_device.h"
+#include "api/environment/environment.h"
+#include "api/environment/environment_factory.h"
 #include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
@@ -428,11 +430,21 @@
     std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
     std::unique_ptr<TestAudioDeviceModule::Renderer> renderer,
     float speed) {
+  return Create(CreateEnvironment(task_queue_factory), std::move(capturer),
+                std::move(renderer), speed);
+}
+
+scoped_refptr<AudioDeviceModule> TestAudioDeviceModule::Create(
+    const Environment& env,
+    std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
+    std::unique_ptr<TestAudioDeviceModule::Renderer> renderer,
+    float speed) {
   auto audio_device = make_ref_counted<AudioDeviceModuleImpl>(
       AudioDeviceModule::AudioLayer::kDummyAudio,
-      std::make_unique<TestAudioDevice>(task_queue_factory, std::move(capturer),
+      std::make_unique<TestAudioDevice>(&env.task_queue_factory(),
+                                        std::move(capturer),
                                         std::move(renderer), speed),
-      task_queue_factory,
+      &env.task_queue_factory(),
       /*create_detached=*/true);
 
   // Ensure that the current platform is supported.
diff --git a/modules/audio_device/include/test_audio_device.h b/modules/audio_device/include/test_audio_device.h
index 6a98342..d7c5568 100644
--- a/modules/audio_device/include/test_audio_device.h
+++ b/modules/audio_device/include/test_audio_device.h
@@ -14,12 +14,11 @@
 #include <stdint.h>
 
 #include <memory>
-#include <string>
 
 #include "absl/strings/string_view.h"
 #include "api/array_view.h"
 #include "api/audio/audio_device.h"
-#include "api/audio/audio_device_defines.h"
+#include "api/environment/environment.h"
 #include "api/scoped_refptr.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "rtc_base/buffer.h"
@@ -82,6 +81,13 @@
   // played out. Can be nullptr if this device is never used for playing.
   // Use one of the Create... functions to get these instances.
   static scoped_refptr<AudioDeviceModule> Create(
+      const Environment& env,
+      std::unique_ptr<Capturer> capturer,
+      std::unique_ptr<Renderer> renderer,
+      float speed = 1);
+
+  [[deprecated("bugs.webrtc.org/413413572")]]
+  static scoped_refptr<AudioDeviceModule> Create(
       TaskQueueFactory* task_queue_factory,
       std::unique_ptr<Capturer> capturer,
       std::unique_ptr<Renderer> renderer,
diff --git a/modules/audio_device/include/test_audio_device_unittest.cc b/modules/audio_device/include/test_audio_device_unittest.cc
index 18abf00..5e4888b 100644
--- a/modules/audio_device/include/test_audio_device_unittest.cc
+++ b/modules/audio_device/include/test_audio_device_unittest.cc
@@ -10,22 +10,32 @@
 
 #include "modules/audio_device/include/test_audio_device.h"
 
+#include <stdio.h>
+
 #include <algorithm>
-#include <array>
+#include <cstddef>
+#include <cstdint>
+#include <cstdlib>
+#include <cstring>
 #include <memory>
 #include <optional>
+#include <string>
 #include <utility>
+#include <vector>
 
 #include "api/array_view.h"
+#include "api/audio/audio_device.h"
 #include "api/audio/audio_device_defines.h"
-#include "api/task_queue/task_queue_factory.h"
+#include "api/environment/environment.h"
+#include "api/environment/environment_factory.h"
+#include "api/scoped_refptr.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "common_audio/wav_file.h"
-#include "common_audio/wav_header.h"
+#include "rtc_base/buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/logging.h"
 #include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread_annotations.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/testsupport/file_utils.h"
@@ -463,15 +473,17 @@
 
 TEST(TestAudioDeviceModuleTest, CreatedADMCanRecord) {
   GlobalSimulatedTimeController time_controller(kStartTime);
+  const Environment env = CreateEnvironment(
+      time_controller.GetClock(), time_controller.GetTaskQueueFactory());
   TestAudioTransport audio_transport(TestAudioTransport::Mode::kRecording);
   std::unique_ptr<TestAudioDeviceModule::PulsedNoiseCapturer> capturer =
       TestAudioDeviceModule::CreatePulsedNoiseCapturer(
           /*max_amplitude=*/1000,
           /*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
 
-  scoped_refptr<AudioDeviceModule> adm = TestAudioDeviceModule::Create(
-      time_controller.GetTaskQueueFactory(), std::move(capturer),
-      /*renderer=*/nullptr);
+  scoped_refptr<AudioDeviceModule> adm =
+      TestAudioDeviceModule::Create(env, std::move(capturer),
+                                    /*renderer=*/nullptr);
 
   ASSERT_EQ(adm->RegisterAudioCallback(&audio_transport), 0);
   ASSERT_EQ(adm->Init(), 0);
@@ -495,13 +507,15 @@
 
 TEST(TestAudioDeviceModuleTest, CreatedADMCanPlay) {
   GlobalSimulatedTimeController time_controller(kStartTime);
+  const Environment env = CreateEnvironment(
+      time_controller.GetClock(), time_controller.GetTaskQueueFactory());
   TestAudioTransport audio_transport(TestAudioTransport::Mode::kPlaying);
   std::unique_ptr<TestAudioDeviceModule::Renderer> renderer =
       TestAudioDeviceModule::CreateDiscardRenderer(
           /*sampling_frequency_in_hz=*/48000, /*num_channels=*/2);
 
   scoped_refptr<AudioDeviceModule> adm =
-      TestAudioDeviceModule::Create(time_controller.GetTaskQueueFactory(),
+      TestAudioDeviceModule::Create(env,
                                     /*capturer=*/nullptr, std::move(renderer));
 
   ASSERT_EQ(adm->RegisterAudioCallback(&audio_transport), 0);
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 7d10685..ad3012d 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -1260,10 +1260,12 @@
       "../api:frame_generator_api",
       "../api:rtp_headers",
       "../api:rtp_parameters",
+      "../api:scoped_refptr",
       "../api:simulated_network_api",
       "../api:transport_api",
       "../api/audio:audio_device",
       "../api/audio:builtin_audio_processing_builder",
+      "../api/audio_codecs:audio_codecs_api",
       "../api/audio_codecs:builtin_audio_decoder_factory",
       "../api/audio_codecs:builtin_audio_encoder_factory",
       "../api/environment",
@@ -1271,16 +1273,19 @@
       "../api/rtc_event_log",
       "../api/task_queue",
       "../api/test/video:function_video_factory",
+      "../api/transport:bitrate_settings",
       "../api/transport:field_trial_based_config",
       "../api/units:time_delta",
       "../api/video:builtin_video_bitrate_allocator_factory",
       "../api/video:video_bitrate_allocator_factory",
       "../api/video:video_frame",
+      "../api/video:video_rtp_headers",
       "../api/video_codecs:video_codecs_api",
       "../call",
       "../call:call_interfaces",
       "../call:fake_network",
       "../call:simulated_packet_receiver",
+      "../call:video_receive_stream_api",
       "../call:video_send_stream_api",
       "../modules/audio_device:test_audio_device_module",
       "../modules/audio_mixer:audio_mixer_impl",
diff --git a/test/call_test.cc b/test/call_test.cc
index 37e2ef9..4d55cde 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -10,26 +10,59 @@
 
 #include "test/call_test.h"
 
-#include <algorithm>
+#include <cstddef>
+#include <cstdint>
+#include <list>
+#include <map>
 #include <memory>
+#include <optional>
+#include <string>
+#include <utility>
+#include <vector>
 
 #include "api/audio/audio_device.h"
 #include "api/audio/builtin_audio_processing_builder.h"
+#include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_encoder_factory.h"
+#include "api/call/transport.h"
 #include "api/environment/environment.h"
 #include "api/environment/environment_factory.h"
-#include "api/task_queue/task_queue_base.h"
+#include "api/rtc_event_log/rtc_event_log.h"
+#include "api/rtp_headers.h"
+#include "api/rtp_parameters.h"
+#include "api/scoped_refptr.h"
+#include "api/task_queue/task_queue_factory.h"
 #include "api/test/create_frame_generator.h"
+#include "api/test/simulated_network.h"
+#include "api/transport/bitrate_settings.h"
+#include "api/units/time_delta.h"
 #include "api/video/builtin_video_bitrate_allocator_factory.h"
+#include "api/video/video_codec_type.h"
+#include "api/video/video_rotation.h"
+#include "api/video_codecs/sdp_video_format.h"
+#include "api/video_codecs/video_decoder_factory.h"
+#include "call/audio_receive_stream.h"
+#include "call/audio_send_stream.h"
+#include "call/audio_state.h"
+#include "call/call.h"
+#include "call/call_config.h"
 #include "call/fake_network_pipe.h"
+#include "call/flexfec_receive_stream.h"
 #include "call/packet_receiver.h"
+#include "call/video_receive_stream.h"
+#include "call/video_send_stream.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
+#include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/event.h"
 #include "rtc_base/task_queue_for_test.h"
+#include "test/encoder_settings.h"
+#include "test/fake_decoder.h"
 #include "test/fake_encoder.h"
+#include "test/fake_vp8_encoder.h"
+#include "test/frame_generator_capturer.h"
+#include "test/gtest.h"
 #include "test/network/simulated_network.h"
 #include "test/rtp_rtcp_observer.h"
 #include "test/testsupport/file_utils.h"
@@ -531,10 +564,10 @@
 void CallTest::CreateFakeAudioDevices(
     std::unique_ptr<TestAudioDeviceModule::Capturer> capturer,
     std::unique_ptr<TestAudioDeviceModule::Renderer> renderer) {
-  fake_send_audio_device_ = TestAudioDeviceModule::Create(
-      &env_.task_queue_factory(), std::move(capturer), nullptr, 1.f);
-  fake_recv_audio_device_ = TestAudioDeviceModule::Create(
-      &env_.task_queue_factory(), nullptr, std::move(renderer), 1.f);
+  fake_send_audio_device_ =
+      TestAudioDeviceModule::Create(env_, std::move(capturer), nullptr, 1.f);
+  fake_recv_audio_device_ =
+      TestAudioDeviceModule::Create(env_, nullptr, std::move(renderer), 1.f);
 }
 
 void CallTest::CreateVideoStreams() {
diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn
index 6f2b0300..81ce6e3 100644
--- a/test/network/BUILD.gn
+++ b/test/network/BUILD.gn
@@ -112,6 +112,8 @@
       "../../api:rtc_error_matchers",
       "../../api:scoped_refptr",
       "../../api:simulated_network_api",
+      "../../api/environment",
+      "../../api/environment:environment_factory",
       "../../api/rtc_event_log:rtc_event_log_factory",
       "../../api/task_queue:default_task_queue_factory",
       "../../api/test/network_emulation",
@@ -122,6 +124,7 @@
       "../../pc:peerconnection_wrapper",
       "../../rtc_base:network",
       "../../rtc_base:task_queue_for_test",
+      "../../rtc_base:threading",
     ]
   }
 }
diff --git a/test/network/network_emulation_pc_unittest.cc b/test/network/network_emulation_pc_unittest.cc
index 2eca595..5a24845 100644
--- a/test/network/network_emulation_pc_unittest.cc
+++ b/test/network/network_emulation_pc_unittest.cc
@@ -14,23 +14,23 @@
 
 #include "api/audio_options.h"
 #include "api/enable_media_with_defaults.h"
+#include "api/environment/environment.h"
+#include "api/environment/environment_factory.h"
 #include "api/jsep.h"
 #include "api/media_stream_interface.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/default_task_queue_factory.h"
 #include "api/test/network_emulation/network_emulation_interfaces.h"
 #include "api/test/network_emulation_manager.h"
 #include "api/test/rtc_error_matchers.h"
 #include "api/test/simulated_network.h"
-#include "api/transport/field_trial_based_config.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "p2p/base/port_allocator.h"
 #include "pc/peer_connection_wrapper.h"
 #include "pc/test/mock_peer_connection_observers.h"
-#include "rtc_base/network.h"
 #include "rtc_base/task_queue_for_test.h"
+#include "rtc_base/thread.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/network/network_emulation.h"
@@ -63,17 +63,17 @@
 scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
     Thread* signaling_thread,
     EmulatedNetworkManagerInterface* network) {
+  const Environment env = CreateEnvironment();
   PeerConnectionFactoryDependencies pcf_deps;
-  pcf_deps.task_queue_factory = CreateDefaultTaskQueueFactory();
+  pcf_deps.env = env;
   pcf_deps.event_log_factory = std::make_unique<RtcEventLogFactory>();
   pcf_deps.network_thread = network->network_thread();
   pcf_deps.signaling_thread = signaling_thread;
-  pcf_deps.trials = std::make_unique<FieldTrialBasedConfig>();
   pcf_deps.socket_factory = network->socket_factory();
   pcf_deps.network_manager = network->ReleaseNetworkManager();
 
   pcf_deps.adm = TestAudioDeviceModule::Create(
-      pcf_deps.task_queue_factory.get(),
+      env,
       TestAudioDeviceModule::CreatePulsedNoiseCapturer(kMaxAptitude,
                                                        kSamplingFrequency),
       TestAudioDeviceModule::CreateDiscardRenderer(kSamplingFrequency),
diff --git a/test/pc/e2e/test_peer_factory.cc b/test/pc/e2e/test_peer_factory.cc
index a251caf..4ff994a 100644
--- a/test/pc/e2e/test_peer_factory.cc
+++ b/test/pc/e2e/test_peer_factory.cc
@@ -24,7 +24,6 @@
 #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/pclf/media_configuration.h"
 #include "api/test/pclf/media_quality_test_params.h"
 #include "api/test/pclf/peer_configurer.h"
@@ -124,10 +123,10 @@
 }
 
 scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule(
+    const Environment& env,
     std::optional<AudioConfig> audio_config,
     std::optional<RemotePeerAudioConfig> remote_audio_config,
-    std::optional<EchoEmulationConfig> echo_emulation_config,
-    TaskQueueFactory* task_queue_factory) {
+    std::optional<EchoEmulationConfig> echo_emulation_config) {
   std::unique_ptr<TestAudioDeviceModule::Renderer> renderer =
       CreateAudioRenderer(remote_audio_config);
   std::unique_ptr<TestAudioDeviceModule::Capturer> capturer =
@@ -150,7 +149,7 @@
         std::move(capturer), audio_config->input_dump_file_name.value());
   }
 
-  return TestAudioDeviceModule::Create(task_queue_factory, std::move(capturer),
+  return TestAudioDeviceModule::Create(env, std::move(capturer),
                                        std::move(renderer), /*speed=*/1.f);
 }
 
@@ -296,8 +295,8 @@
 
   // Create peer connection factory.
   scoped_refptr<AudioDeviceModule> audio_device_module =
-      CreateAudioDeviceModule(params->audio_config, remote_audio_config,
-                              echo_emulation_config, &env.task_queue_factory());
+      CreateAudioDeviceModule(env, params->audio_config, remote_audio_config,
+                              echo_emulation_config);
   WrapVideoEncoderFactory(
       params->name.value(), params->video_encoder_bitrate_multiplier,
       CalculateRequiredSpatialIndexPerStream(
diff --git a/test/peer_scenario/peer_scenario_client.cc b/test/peer_scenario/peer_scenario_client.cc
index 52dedbd..2c688e0 100644
--- a/test/peer_scenario/peer_scenario_client.cc
+++ b/test/peer_scenario/peer_scenario_client.cc
@@ -287,7 +287,7 @@
   pcf_deps.env = env_;
 
   pcf_deps.adm = TestAudioDeviceModule::Create(
-      &env_.task_queue_factory(),
+      env_,
       TestAudioDeviceModule::CreatePulsedNoiseCapturer(
           config.audio.pulsed_noise->amplitude *
               std::numeric_limits<int16_t>::max(),
diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn
index 2cae762..b7fd6a3 100644
--- a/test/scenario/BUILD.gn
+++ b/test/scenario/BUILD.gn
@@ -103,6 +103,7 @@
       "../../api/task_queue",
       "../../api/test/network_emulation",
       "../../api/test/video:function_video_factory",
+      "../../api/transport:bitrate_settings",
       "../../api/transport:network_control",
       "../../api/units:data_rate",
       "../../api/units:data_size",
@@ -140,6 +141,7 @@
       "../../modules/video_coding/svc:scalability_mode_util",
       "../../rtc_base:checks",
       "../../rtc_base:copy_on_write_buffer",
+      "../../rtc_base:logging",
       "../../rtc_base:macromagic",
       "../../rtc_base:net_helper",
       "../../rtc_base:net_helpers",
diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc
index b598c28..1f6719d 100644
--- a/test/scenario/call_client.cc
+++ b/test/scenario/call_client.cc
@@ -9,24 +9,48 @@
  */
 #include "test/scenario/call_client.h"
 
-#include <iostream>
+#include <cstddef>
+#include <cstdint>
+#include <functional>
 #include <memory>
+#include <string>
 #include <utility>
 
+#include "api/array_view.h"
 #include "api/audio/builtin_audio_processing_builder.h"
 #include "api/environment/environment.h"
 #include "api/environment/environment_factory.h"
 #include "api/media_types.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/rtc_event_log/rtc_event_log_factory.h"
+#include "api/rtc_event_log_output.h"
+#include "api/rtp_parameters.h"
+#include "api/scoped_refptr.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "api/test/network_emulation/network_emulation_interfaces.h"
+#include "api/test/time_controller.h"
+#include "api/transport/bitrate_settings.h"
+#include "api/transport/network_control.h"
 #include "api/transport/network_types.h"
+#include "api/units/data_rate.h"
+#include "api/units/time_delta.h"
+#include "api/units/timestamp.h"
+#include "call/audio_state.h"
 #include "call/call.h"
-#include "call/rtp_transport_controller_send_factory.h"
+#include "call/call_config.h"
 #include "modules/audio_device/include/test_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "modules/rtp_rtcp/include/rtp_header_extension_map.h"
 #include "modules/rtp_rtcp/source/rtp_packet_received.h"
 #include "modules/rtp_rtcp/source/rtp_util.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/event.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/strings/string_builder.h"
+#include "test/logging/log_writer.h"
+#include "test/scenario/column_printer.h"
+#include "test/scenario/network_node.h"
+#include "test/scenario/scenario_config.h"
 
 namespace webrtc {
 namespace test {
@@ -48,7 +72,7 @@
   auto capturer = TestAudioDeviceModule::CreatePulsedNoiseCapturer(256, 48000);
   auto renderer = TestAudioDeviceModule::CreateDiscardRenderer(48000);
   setup.fake_audio_device = TestAudioDeviceModule::Create(
-      &env.task_queue_factory(), std::move(capturer), std::move(renderer), 1.f);
+      env, std::move(capturer), std::move(renderer), 1.f);
   setup.apm = BuiltinAudioProcessingBuilder().Build(env);
   setup.fake_audio_device->Init();
   AudioState::Config audio_state_config;
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index f7a1239..66a8a25 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -1407,8 +1407,7 @@
   } else {
     // By default, create a test ADM which fakes audio.
     audio_device = TestAudioDeviceModule::Create(
-        &env_.task_queue_factory(),
-        TestAudioDeviceModule::CreatePulsedNoiseCapturer(32000, 48000),
+        env_, TestAudioDeviceModule::CreatePulsedNoiseCapturer(32000, 48000),
         TestAudioDeviceModule::CreateDiscardRenderer(48000), 1.f);
   }
   RTC_CHECK(audio_device);