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 <danilchap@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29331}
This commit is contained in:
Danil Chapovalov 2019-09-27 11:10:45 +02:00 committed by Commit Bot
parent bc8049ef0b
commit ba2ba59c4b
3 changed files with 30 additions and 27 deletions

View File

@ -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",
]

View File

@ -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<SimulatedPacketReceiverInterface> pipe,
Call* send_call,
const std::map<uint8_t, MediaType>& 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<int64_t> 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

View File

@ -13,10 +13,12 @@
#include <memory>
#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<SimulatedPacketReceiverInterface> pipe,
Call* send_call,
const std::map<uint8_t, MediaType>& 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<DEPRECATED_SingleThreadedTaskQueueForTesting::TaskId>
next_process_task_ RTC_GUARDED_BY(&process_lock_);
RepeatingTaskHandle next_process_task_ RTC_GUARDED_BY(&process_lock_);
const Demuxer demuxer_;
const std::unique_ptr<SimulatedPacketReceiverInterface> fake_network_;