From ba2ba59c4ba1009ad04e56bb3804c882bc63441b Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 27 Sep 2019 11:10:45 +0200 Subject: [PATCH] Rewrite test::DirectTransport to work with any TaskQueue implementation Bug: webrtc:10933 Change-Id: Ib207a5dac57e0200f1298097edb52689c4748d07 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154568 Commit-Queue: Danil Chapovalov Reviewed-by: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#29331} --- test/BUILD.gn | 3 +++ test/direct_transport.cc | 43 ++++++++++++++++++++-------------------- test/direct_transport.h | 11 +++++----- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/test/BUILD.gn b/test/BUILD.gn index 8c1d25f3d9..f2632d3f63 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -602,11 +602,14 @@ rtc_source_set("direct_transport") { ":rtp_test_utils", "../api:simulated_network_api", "../api:transport_api", + "../api/task_queue", + "../api/units:time_delta", "../call:call_interfaces", "../call:simulated_packet_receiver", "../modules/rtp_rtcp", "../rtc_base:rtc_base_approved", "../rtc_base/synchronization:sequence_checker", + "../rtc_base/task_utils:repeating_task", "../system_wrappers", "//third_party/abseil-cpp/absl/memory", ] diff --git a/test/direct_transport.cc b/test/direct_transport.cc index 13d1bd2469..0d626de692 100644 --- a/test/direct_transport.cc +++ b/test/direct_transport.cc @@ -10,8 +10,11 @@ #include "test/direct_transport.h" #include "absl/memory/memory.h" +#include "api/task_queue/task_queue_base.h" +#include "api/units/time_delta.h" #include "call/call.h" #include "call/fake_network_pipe.h" +#include "rtc_base/task_utils/repeating_task.h" #include "rtc_base/time_utils.h" #include "test/rtp_header_parser.h" #include "test/single_threaded_task_queue.h" @@ -37,7 +40,7 @@ MediaType Demuxer::GetMediaType(const uint8_t* packet_data, } DirectTransport::DirectTransport( - DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue, + TaskQueueBase* task_queue, std::unique_ptr pipe, Call* send_call, const std::map& payload_type_map) @@ -49,14 +52,7 @@ DirectTransport::DirectTransport( } DirectTransport::~DirectTransport() { - if (next_process_task_) - task_queue_->CancelTask(*next_process_task_); -} - -void DirectTransport::StopSending() { - rtc::CritScope cs(&process_lock_); - if (next_process_task_) - task_queue_->CancelTask(*next_process_task_); + next_process_task_.Stop(); } void DirectTransport::SetReceiver(PacketReceiver* receiver) { @@ -90,7 +86,7 @@ void DirectTransport::SendPacket(const uint8_t* data, size_t length) { fake_network_->DeliverPacket(media_type, rtc::CopyOnWriteBuffer(data, length), send_time_us); rtc::CritScope cs(&process_lock_); - if (!next_process_task_) + if (!next_process_task_.Running()) ProcessPackets(); } @@ -107,17 +103,22 @@ void DirectTransport::Start() { } void DirectTransport::ProcessPackets() { - next_process_task_.reset(); - auto delay_ms = fake_network_->TimeUntilNextProcess(); - if (delay_ms) { - next_process_task_ = task_queue_->PostDelayedTask( - [this]() { - fake_network_->Process(); - rtc::CritScope cs(&process_lock_); - ProcessPackets(); - }, - *delay_ms); - } + absl::optional initial_delay_ms = + fake_network_->TimeUntilNextProcess(); + if (initial_delay_ms == absl::nullopt) + return; + + next_process_task_ = RepeatingTaskHandle::DelayedStart( + task_queue_, TimeDelta::ms(*initial_delay_ms), [this] { + fake_network_->Process(); + if (auto delay_ms = fake_network_->TimeUntilNextProcess()) + return TimeDelta::ms(*delay_ms); + // Otherwise stop the task. + rtc::CritScope cs(&process_lock_); + next_process_task_.Stop(); + // Since this task is stopped, return value doesn't matter. + return TimeDelta::Zero(); + }); } } // namespace test } // namespace webrtc diff --git a/test/direct_transport.h b/test/direct_transport.h index a73a335237..e011664c34 100644 --- a/test/direct_transport.h +++ b/test/direct_transport.h @@ -13,10 +13,12 @@ #include #include "api/call/transport.h" +#include "api/task_queue/task_queue_base.h" #include "api/test/simulated_network.h" #include "call/call.h" #include "call/simulated_packet_receiver.h" #include "rtc_base/synchronization/sequence_checker.h" +#include "rtc_base/task_utils/repeating_task.h" #include "rtc_base/thread_annotations.h" #include "test/single_threaded_task_queue.h" @@ -39,15 +41,13 @@ class Demuxer { // same task-queue - the one that's passed in via the constructor. class DirectTransport : public Transport { public: - DirectTransport(DEPRECATED_SingleThreadedTaskQueueForTesting* task_queue, + DirectTransport(TaskQueueBase* task_queue, std::unique_ptr pipe, Call* send_call, const std::map& payload_type_map); ~DirectTransport() override; - RTC_DEPRECATED void StopSending(); - // TODO(holmer): Look into moving this to the constructor. virtual void SetReceiver(PacketReceiver* receiver); @@ -65,11 +65,10 @@ class DirectTransport : public Transport { Call* const send_call_; - DEPRECATED_SingleThreadedTaskQueueForTesting* const task_queue_; + TaskQueueBase* const task_queue_; rtc::CriticalSection process_lock_; - absl::optional - next_process_task_ RTC_GUARDED_BY(&process_lock_); + RepeatingTaskHandle next_process_task_ RTC_GUARDED_BY(&process_lock_); const Demuxer demuxer_; const std::unique_ptr fake_network_;