Remove usage of AsyncInvoker in test class FakeNetworkSocket

in favor of simpler TaskQueue protection mechanic.

Bug: webrtc:12339
Change-Id: I1636139fe0d3f79bdc28132da9268dab003f3506
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/204700
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33135}
This commit is contained in:
Danil Chapovalov
2021-02-01 20:43:19 +01:00
committed by Commit Bot
parent eee0e9e9d4
commit 7358b40f44
3 changed files with 38 additions and 10 deletions

View File

@ -41,6 +41,7 @@ rtc_library("emulated_network") {
"../../api:array_view",
"../../api:network_emulation_manager_api",
"../../api:packet_socket_factory",
"../../api:scoped_refptr",
"../../api:simulated_network_api",
"../../api:time_controller",
"../../api/numerics",
@ -65,7 +66,9 @@ rtc_library("emulated_network") {
"../../rtc_base:threading",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/synchronization:sequence_checker",
"../../rtc_base/task_utils:pending_task_safety_flag",
"../../rtc_base/task_utils:repeating_task",
"../../rtc_base/task_utils:to_queued_task",
"../../rtc_base/third_party/sigslot",
"../../system_wrappers",
"../scenario:column_printer",

View File

@ -16,8 +16,10 @@
#include <vector>
#include "absl/algorithm/container.h"
#include "rtc_base/async_invoker.h"
#include "api/scoped_refptr.h"
#include "rtc_base/logging.h"
#include "rtc_base/task_utils/pending_task_safety_flag.h"
#include "rtc_base/task_utils/to_queued_task.h"
#include "rtc_base/thread.h"
namespace webrtc {
@ -74,7 +76,7 @@ class FakeNetworkSocket : public rtc::AsyncSocket,
std::map<Option, int> options_map_ RTC_GUARDED_BY(&thread_);
absl::optional<EmulatedIpPacket> pending_ RTC_GUARDED_BY(thread_);
rtc::AsyncInvoker invoker_;
rtc::scoped_refptr<PendingTaskSafetyFlag> alive_;
};
FakeNetworkSocket::FakeNetworkSocket(FakeNetworkSocketServer* socket_server,
@ -82,9 +84,13 @@ FakeNetworkSocket::FakeNetworkSocket(FakeNetworkSocketServer* socket_server,
: socket_server_(socket_server),
thread_(thread),
state_(CS_CLOSED),
error_(0) {}
error_(0),
alive_(PendingTaskSafetyFlag::Create()) {}
FakeNetworkSocket::~FakeNetworkSocket() {
// Abandon all pending packets.
alive_->SetNotAlive();
Close();
socket_server_->Unregister(this);
}
@ -103,7 +109,7 @@ void FakeNetworkSocket::OnPacketReceived(EmulatedIpPacket packet) {
SignalReadEvent(this);
RTC_DCHECK(!pending_);
};
invoker_.AsyncInvoke<void>(RTC_FROM_HERE, thread_, std::move(task));
thread_->PostTask(ToQueuedTask(alive_, std::move(task)));
socket_server_->WakeUp();
}

View File

@ -207,8 +207,14 @@ TEST(NetworkEmulationManagerTest, Run) {
rtc::CopyOnWriteBuffer data("Hello");
for (uint64_t j = 0; j < 2; j++) {
auto* s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
auto* s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
rtc::AsyncSocket* s1 = nullptr;
rtc::AsyncSocket* s2 = nullptr;
t1->Invoke<void>(RTC_FROM_HERE, [&] {
s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
t2->Invoke<void>(RTC_FROM_HERE, [&] {
s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
SocketReader r1(s1, t1);
SocketReader r2(s2, t2);
@ -357,8 +363,14 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) {
rtc::CopyOnWriteBuffer data("Hello");
for (uint64_t j = 0; j < 2; j++) {
auto* s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
auto* s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
rtc::AsyncSocket* s1 = nullptr;
rtc::AsyncSocket* s2 = nullptr;
t1->Invoke<void>(RTC_FROM_HERE, [&] {
s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
t2->Invoke<void>(RTC_FROM_HERE, [&] {
s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
SocketReader r1(s1, t1);
SocketReader r2(s2, t2);
@ -454,8 +466,15 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) {
constexpr int64_t kUdpPayloadSize = 100;
constexpr int64_t kSinglePacketSize = kUdpPayloadSize + kOverheadIpv4Udp;
rtc::CopyOnWriteBuffer data(kUdpPayloadSize);
auto* s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
auto* s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
rtc::AsyncSocket* s1 = nullptr;
rtc::AsyncSocket* s2 = nullptr;
t1->Invoke<void>(RTC_FROM_HERE, [&] {
s1 = t1->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
t2->Invoke<void>(RTC_FROM_HERE, [&] {
s2 = t2->socketserver()->CreateAsyncSocket(AF_INET, SOCK_DGRAM);
});
SocketReader r1(s1, t1);
SocketReader r2(s2, t2);