Cleanup delayed packet handing in RtpRtcpImpl2 unittests

Module/ProcessThread architecture is long time gone, so delayed handling
can be done using TaskQueue, which looks simpler and resolves few TODOs

Bug: webrtc:42221687
Change-Id: Ie1cfc91eaa982097be6a4ffed2108295ef8e1e62
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/399581
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45118}
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
index 664b795..0698b34 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
@@ -12,7 +12,6 @@
 
 #include <cstddef>
 #include <cstdint>
-#include <deque>
 #include <map>
 #include <memory>
 #include <optional>
@@ -27,6 +26,7 @@
 #include "api/rtp_headers.h"
 #include "api/rtp_parameters.h"
 #include "api/task_queue/task_queue_base.h"
+#include "api/task_queue/task_queue_factory.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "api/video/video_codec_type.h"
@@ -106,22 +106,19 @@
   int64_t rtt_ms_;
 };
 
-// TODO(bugs.webrtc.org/11581): remove inheritance once the ModuleRtpRtcpImpl2
-// Module/ProcessThread dependency is gone.
-class SendTransport : public Transport,
-                      public sim_time_impl::SimulatedSequenceRunner {
+class SendTransport : public Transport {
  public:
-  SendTransport(TimeDelta delay, GlobalSimulatedTimeController* time_controller)
+  SendTransport(TimeDelta delay, TaskQueueFactory& task_queue_factory)
       : receiver_(nullptr),
-        time_controller_(time_controller),
         delay_(delay),
         rtp_packets_sent_(0),
         rtcp_packets_sent_(0),
-        last_packet_(&header_extensions_) {
-    time_controller_->Register(this);
-  }
+        last_packet_(&header_extensions_),
+        rtcp_packets_(task_queue_factory.CreateTaskQueue(
+            "transport",
+            TaskQueueFactory::Priority::NORMAL)) {}
 
-  ~SendTransport() override { time_controller_->Unregister(this); }
+  ~SendTransport() override = default;
 
   void SetRtpRtcpModule(ModuleRtpRtcpImpl2* receiver) { receiver_ = receiver; }
   void SimulateNetworkDelay(TimeDelta delay) { delay_ = delay; }
@@ -136,49 +133,33 @@
     test::RtcpPacketParser parser;
     parser.Parse(data);
     last_nack_list_ = parser.nack()->packet_ids();
-    Timestamp current_time = time_controller_->GetClock()->CurrentTime();
-    Timestamp delivery_time = current_time + delay_;
-    rtcp_packets_.push_back(
-        Packet{delivery_time, std::vector<uint8_t>(data.begin(), data.end())});
-    ++rtcp_packets_sent_;
-    RunReady(current_time);
-    return true;
-  }
 
-  // sim_time_impl::SimulatedSequenceRunner
-  Timestamp GetNextRunTime() const override {
-    if (!rtcp_packets_.empty())
-      return rtcp_packets_.front().send_time;
-    return Timestamp::PlusInfinity();
-  }
-  void RunReady(Timestamp at_time) override {
-    while (!rtcp_packets_.empty() &&
-           rtcp_packets_.front().send_time <= at_time) {
-      Packet packet = std::move(rtcp_packets_.front());
-      rtcp_packets_.pop_front();
-      EXPECT_TRUE(receiver_);
-      receiver_->IncomingRtcpPacket(packet.data);
+    if (delay_ == TimeDelta::Zero()) {
+      receiver_->IncomingRtcpPacket(data);
+    } else {
+      ModuleRtpRtcpImpl2* receiver = receiver_;
+      std::vector<uint8_t> packet(data.begin(), data.end());
+      rtcp_packets_->PostDelayedTask(
+          [receiver, packet = std::move(packet)] {
+            receiver->IncomingRtcpPacket(packet);
+          },
+          delay_);
     }
-  }
-  TaskQueueBase* GetAsTaskQueue() override {
-    return reinterpret_cast<TaskQueueBase*>(this);
+
+    ++rtcp_packets_sent_;
+    return true;
   }
 
   size_t NumRtcpSent() { return rtcp_packets_sent_; }
 
   ModuleRtpRtcpImpl2* receiver_;
-  GlobalSimulatedTimeController* const time_controller_;
   TimeDelta delay_;
   int rtp_packets_sent_;
   size_t rtcp_packets_sent_;
   std::vector<uint16_t> last_nack_list_;
   RtpHeaderExtensionMap header_extensions_;
   RtpPacketReceived last_packet_;
-  struct Packet {
-    Timestamp send_time;
-    std::vector<uint8_t> data;
-  };
-  std::deque<Packet> rtcp_packets_;
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> rtcp_packets_;
 };
 
 class RtpRtcpModule : public RtcpPacketTypeCounterObserver,
@@ -193,13 +174,11 @@
     uint32_t ssrc;
   };
 
-  RtpRtcpModule(const Environment& env,
-                GlobalSimulatedTimeController* time_controller,
-                bool is_sender)
+  RtpRtcpModule(const Environment& env, bool is_sender)
       : env_(env),
         is_sender_(is_sender),
         receive_statistics_(ReceiveStatistics::Create(&env.clock())),
-        transport_(kOneWayNetworkDelay, time_controller) {
+        transport_(kOneWayNetworkDelay, env_.task_queue_factory()) {
     CreateModuleImpl();
   }
 
@@ -304,12 +283,8 @@
       : time_controller_(Timestamp::Micros(133590000000000)),
         env_(CreateEnvironment(time_controller_.GetClock(),
                                time_controller_.CreateTaskQueueFactory())),
-        sender_(env_,
-                &time_controller_,
-                /*is_sender=*/true),
-        receiver_(env_,
-                  &time_controller_,
-                  /*is_sender=*/false) {}
+        sender_(env_, /*is_sender=*/true),
+        receiver_(env_, /*is_sender=*/false) {}
 
   void SetUp() override {
     // Send module.
diff --git a/test/time_controller/simulated_time_controller.cc b/test/time_controller/simulated_time_controller.cc
index 6985157..31b8701 100644
--- a/test/time_controller/simulated_time_controller.cc
+++ b/test/time_controller/simulated_time_controller.cc
@@ -231,14 +231,4 @@
   global_clock_.AdvanceTime(duration);
 }
 
-void GlobalSimulatedTimeController::Register(
-    sim_time_impl::SimulatedSequenceRunner* runner) {
-  impl_.Register(runner);
-}
-
-void GlobalSimulatedTimeController::Unregister(
-    sim_time_impl::SimulatedSequenceRunner* runner) {
-  impl_.Unregister(runner);
-}
-
 }  // namespace webrtc
diff --git a/test/time_controller/simulated_time_controller.h b/test/time_controller/simulated_time_controller.h
index b934941..7db4883 100644
--- a/test/time_controller/simulated_time_controller.h
+++ b/test/time_controller/simulated_time_controller.h
@@ -151,17 +151,6 @@
   // Useful for simulating contention on destination queues.
   void SkipForwardBy(TimeDelta duration);
 
-  // Makes the simulated time controller aware of a custom
-  // SimulatedSequenceRunner.
-  // TODO(bugs.webrtc.org/11581): remove method once the ModuleRtpRtcpImpl2 unit
-  // test stops using it.
-  void Register(sim_time_impl::SimulatedSequenceRunner* runner);
-  // Removes a previously installed custom SimulatedSequenceRunner from the
-  // simulated time controller.
-  // TODO(bugs.webrtc.org/11581): remove method once the ModuleRtpRtcpImpl2 unit
-  // test stops using it.
-  void Unregister(sim_time_impl::SimulatedSequenceRunner* runner);
-
  private:
   ScopedBaseFakeClock global_clock_;
   // Provides simulated CurrentNtpInMilliseconds()