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:
parent
bc8049ef0b
commit
ba2ba59c4b
@ -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",
|
||||
]
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user