diff --git a/test/pc/e2e/peer_connection_e2e_smoke_test.cc b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
index 6737be1..f0c11f2 100644
--- a/test/pc/e2e/peer_connection_e2e_smoke_test.cc
+++ b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
@@ -66,7 +66,7 @@
       /*output_dump_file_name=*/absl::nullopt, cricket::AudioOptions()};
 
   // Setup emulated network
-  NetworkEmulationManager network_emulation_manager(Clock::GetRealTimeClock());
+  NetworkEmulationManager network_emulation_manager;
 
   EmulatedNetworkNode* alice_node =
       network_emulation_manager.CreateEmulatedNode(
@@ -105,16 +105,12 @@
   auto* video_analyzer = static_cast<ExampleVideoQualityAnalyzer*>(
       analyzers->video_quality_analyzer.get());
 
-  network_emulation_manager.Start();
-
   auto fixture = CreatePeerConnectionE2EQualityTestFixture(
       std::move(alice_components), std::move(alice_params),
       std::move(bob_components), absl::make_unique<Params>(),
       std::move(analyzers));
   fixture->Run(RunParams{TimeDelta::seconds(5)});
 
-  network_emulation_manager.Stop();
-
   RTC_LOG(INFO) << "Captured: " << video_analyzer->frames_captured();
   RTC_LOG(INFO) << "Sent    : " << video_analyzer->frames_sent();
   RTC_LOG(INFO) << "Received: " << video_analyzer->frames_received();
diff --git a/test/scenario/network/network_emulation_manager.cc b/test/scenario/network/network_emulation_manager.cc
index 629f448..489529b 100644
--- a/test/scenario/network/network_emulation_manager.cc
+++ b/test/scenario/network/network_emulation_manager.cc
@@ -25,14 +25,21 @@
 
 }  // namespace
 
-NetworkEmulationManager::NetworkEmulationManager(webrtc::Clock* clock)
-    : clock_(clock),
+NetworkEmulationManager::NetworkEmulationManager()
+    : clock_(Clock::GetRealTimeClock()),
       next_node_id_(1),
-      task_queue_("network_emulation_manager") {}
-NetworkEmulationManager::~NetworkEmulationManager() {
-  Stop();
+      task_queue_("network_emulation_manager") {
+  process_task_handle_ = RepeatingTaskHandle::Start(&task_queue_, [this] {
+    ProcessNetworkPackets();
+    return TimeDelta::ms(kPacketProcessingIntervalMs);
+  });
 }
 
+// TODO(srte): Ensure that any pending task that must be run for consistency
+// (such as stats collection tasks) are not cancelled when the task queue is
+// destroyed.
+NetworkEmulationManager::~NetworkEmulationManager() = default;
+
 EmulatedNetworkNode* NetworkEmulationManager::CreateEmulatedNode(
     std::unique_ptr<NetworkBehaviorInterface> network_behavior) {
   auto node =
@@ -101,17 +108,6 @@
   return out;
 }
 
-void NetworkEmulationManager::Start() {
-  process_task_handle_ = RepeatingTaskHandle::Start(&task_queue_, [this] {
-    ProcessNetworkPackets();
-    return TimeDelta::ms(kPacketProcessingIntervalMs);
-  });
-}
-
-void NetworkEmulationManager::Stop() {
-  process_task_handle_.PostStop();
-}
-
 FakeNetworkSocketServer* NetworkEmulationManager::CreateSocketServer(
     std::vector<EndpointNode*> endpoints) {
   auto socket_server =
diff --git a/test/scenario/network/network_emulation_manager.h b/test/scenario/network/network_emulation_manager.h
index f06fb75..6d42ed7 100644
--- a/test/scenario/network/network_emulation_manager.h
+++ b/test/scenario/network/network_emulation_manager.h
@@ -22,6 +22,7 @@
 #include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread.h"
+#include "system_wrappers/include/clock.h"
 #include "test/scenario/network/fake_network_socket_server.h"
 #include "test/scenario/network/network_emulation.h"
 
@@ -30,7 +31,7 @@
 
 class NetworkEmulationManager {
  public:
-  explicit NetworkEmulationManager(Clock* clock);
+  NetworkEmulationManager();
   ~NetworkEmulationManager();
 
   EmulatedNetworkNode* CreateEmulatedNode(
@@ -49,9 +50,6 @@
 
   rtc::Thread* CreateNetworkThread(std::vector<EndpointNode*> endpoints);
 
-  void Start();
-  void Stop();
-
  private:
   FakeNetworkSocketServer* CreateSocketServer(
       std::vector<EndpointNode*> endpoints);
diff --git a/test/scenario/network/network_emulation_pc_unittest.cc b/test/scenario/network/network_emulation_pc_unittest.cc
index f2fcb07..d8a2b8a 100644
--- a/test/scenario/network/network_emulation_pc_unittest.cc
+++ b/test/scenario/network/network_emulation_pc_unittest.cc
@@ -102,7 +102,7 @@
   signaling_thread->Start();
 
   // Setup emulated network
-  NetworkEmulationManager network_manager(Clock::GetRealTimeClock());
+  NetworkEmulationManager network_manager;
 
   EmulatedNetworkNode* alice_node = network_manager.CreateEmulatedNode(
       absl::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig()));
@@ -156,8 +156,6 @@
       absl::make_unique<PeerConnectionWrapper>(bob_pcf, bob_pc,
                                                std::move(bob_observer));
 
-  network_manager.Start();
-
   signaling_thread->Invoke<void>(RTC_FROM_HERE, [&]() {
     rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
         alice_pcf->CreateAudioSource(cricket::AudioOptions());
@@ -191,8 +189,6 @@
     alice.reset();
     bob.reset();
   });
-
-  network_manager.Stop();
 }
 
 }  // namespace test
diff --git a/test/scenario/network/network_emulation_unittest.cc b/test/scenario/network/network_emulation_unittest.cc
index d04a99f..c55b412 100644
--- a/test/scenario/network/network_emulation_unittest.cc
+++ b/test/scenario/network/network_emulation_unittest.cc
@@ -58,7 +58,7 @@
 };
 
 TEST(NetworkEmulationManagerTest, Run) {
-  NetworkEmulationManager network_manager(Clock::GetRealTimeClock());
+  NetworkEmulationManager network_manager;
 
   EmulatedNetworkNode* alice_node = network_manager.CreateEmulatedNode(
       absl::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig()));
@@ -74,8 +74,6 @@
   auto* nt1 = network_manager.CreateNetworkThread({alice_endpoint});
   auto* nt2 = network_manager.CreateNetworkThread({bob_endpoint});
 
-  network_manager.Start();
-
   for (uint64_t j = 0; j < 2; j++) {
     auto* s1 = nt1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
     auto* s2 = nt2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
@@ -106,8 +104,6 @@
     delete s1;
     delete s2;
   }
-
-  network_manager.Stop();
 }
 
 }  // namespace test
