From 2aaef458767aaef50a42255c3ba08479c8c23e03 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 12 Aug 2022 15:55:11 +0200 Subject: [PATCH] Replace Invoke in tests with SendTask test helper Bug: webrtc:11318 Change-Id: I14e3fbc694d41c785a61c88d8207005c681576c4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271540 Reviewed-by: Tomas Gunnarsson Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/main@{#37774} --- modules/desktop_capture/BUILD.gn | 1 + .../win/wgc_capturer_win_unittest.cc | 4 +- .../win/window_capture_utils_unittest.cc | 10 +-- p2p/BUILD.gn | 4 +- p2p/base/fake_ice_transport.h | 3 +- p2p/base/fake_port_allocator.h | 3 +- pc/BUILD.gn | 8 +- pc/channel_unittest.cc | 78 +++++++++---------- pc/jsep_transport_controller_unittest.cc | 10 +-- pc/peer_connection_integrationtest.cc | 6 +- pc/peer_connection_rampup_tests.cc | 28 ++++--- pc/rtp_sender_receiver_unittest.cc | 1 - pc/test/integration_test_helpers.h | 45 +++++------ pc/video_rtp_receiver_unittest.cc | 8 +- rtc_base/task_queue_for_test.h | 8 +- test/network/BUILD.gn | 2 + test/network/emulated_turn_server.cc | 7 +- test/network/network_emulation_pc_unittest.cc | 9 ++- test/network/network_emulation_unittest.cc | 55 +++++++------ test/pc/e2e/peer_connection_quality_test.cc | 29 +++---- test/peer_scenario/BUILD.gn | 1 + test/peer_scenario/scenario_connection.cc | 5 +- test/time_controller/BUILD.gn | 1 + .../simulated_time_controller_unittest.cc | 5 +- 24 files changed, 165 insertions(+), 166 deletions(-) diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index afba43f48b..fba4538656 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn @@ -134,6 +134,7 @@ if (rtc_include_tests) { # TODO(bugs.webrtc.org/9987): Remove this dep on rtc_base:rtc_base once # rtc_base:threading is fully defined. "../../rtc_base:rtc_base", + "../../rtc_base:task_queue_for_test", "../../rtc_base:threading", "../../system_wrappers", "../../test:test_support", diff --git a/modules/desktop_capture/win/wgc_capturer_win_unittest.cc b/modules/desktop_capture/win/wgc_capturer_win_unittest.cc index 9339526ce0..a7b656fcfc 100644 --- a/modules/desktop_capture/win/wgc_capturer_win_unittest.cc +++ b/modules/desktop_capture/win/wgc_capturer_win_unittest.cc @@ -22,6 +22,7 @@ #include "modules/desktop_capture/win/window_capture_utils.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/thread.h" #include "rtc_base/time_utils.h" #include "rtc_base/win/scoped_com_initializer.h" @@ -128,8 +129,7 @@ class WgcCapturerWinTest : public ::testing::TestWithParam, window_thread_ = rtc::Thread::Create(); window_thread_->SetName(kWindowThreadName, nullptr); window_thread_->Start(); - window_thread_->Invoke(RTC_FROM_HERE, [this, window_width, - window_height]() { + SendTask(window_thread_.get(), [this, window_width, window_height]() { window_thread_id_ = GetCurrentThreadId(); window_info_ = CreateTestWindow(kWindowTitle, window_height, window_width); diff --git a/modules/desktop_capture/win/window_capture_utils_unittest.cc b/modules/desktop_capture/win/window_capture_utils_unittest.cc index 913b9205c0..137440b09e 100644 --- a/modules/desktop_capture/win/window_capture_utils_unittest.cc +++ b/modules/desktop_capture/win/window_capture_utils_unittest.cc @@ -18,6 +18,7 @@ #include "modules/desktop_capture/desktop_capturer.h" #include "modules/desktop_capture/win/test_support/test_window.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/thread.h" #include "test/gtest.h" @@ -34,8 +35,7 @@ std::unique_ptr SetUpUnresponsiveWindow(std::mutex& mtx, window_thread->SetName(kWindowThreadName, nullptr); window_thread->Start(); - window_thread->Invoke( - RTC_FROM_HERE, [&info]() { info = CreateTestWindow(kWindowTitle); }); + SendTask(window_thread.get(), [&] { info = CreateTestWindow(kWindowTitle); }); // Intentionally create a deadlock to cause the window to become unresponsive. mtx.lock(); @@ -82,8 +82,7 @@ TEST(WindowCaptureUtilsTest, IncludeUnresponsiveWindows) { window_list.end()); mtx.unlock(); - window_thread->Invoke(RTC_FROM_HERE, - [&info]() { DestroyTestWindow(info); }); + SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); }); window_thread->Stop(); } @@ -106,8 +105,7 @@ TEST(WindowCaptureUtilsTest, IgnoreUnresponsiveWindows) { window_list.end()); mtx.unlock(); - window_thread->Invoke(RTC_FROM_HERE, - [&info]() { DestroyTestWindow(info); }); + SendTask(window_thread.get(), [&info]() { DestroyTestWindow(info); }); window_thread->Stop(); } diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn index 60fe37d24a..30a82e6363 100644 --- a/p2p/BUILD.gn +++ b/p2p/BUILD.gn @@ -167,8 +167,8 @@ if (rtc_include_tests) { "../api:libjingle_peerconnection_api", "../api/task_queue:pending_task_safety_flag", "../api/units:time_delta", - "../rtc_base", "../rtc_base:copy_on_write_buffer", + "../rtc_base:task_queue_for_test", ] absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container", @@ -183,8 +183,8 @@ if (rtc_include_tests) { sources = [ "base/fake_port_allocator.h" ] deps = [ ":rtc_p2p", - "../rtc_base", "../rtc_base:net_helpers", + "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../rtc_base/memory:always_valid_pointer", "../test:scoped_key_value_config", diff --git a/p2p/base/fake_ice_transport.h b/p2p/base/fake_ice_transport.h index 31db8296bd..ae7bf8947e 100644 --- a/p2p/base/fake_ice_transport.h +++ b/p2p/base/fake_ice_transport.h @@ -24,6 +24,7 @@ #include "api/units/time_delta.h" #include "p2p/base/ice_transport_internal.h" #include "rtc_base/copy_on_write_buffer.h" +#include "rtc_base/task_queue_for_test.h" namespace cricket { using ::webrtc::SafeTask; @@ -357,7 +358,7 @@ class FakeIceTransport : public IceTransportInternal { void SetNetworkRoute(absl::optional network_route) { RTC_DCHECK_RUN_ON(network_thread_); network_route_ = network_route; - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { RTC_DCHECK_RUN_ON(network_thread_); SignalNetworkRouteChanged(network_route_); }); diff --git a/p2p/base/fake_port_allocator.h b/p2p/base/fake_port_allocator.h index e92825ec4c..174d6304be 100644 --- a/p2p/base/fake_port_allocator.h +++ b/p2p/base/fake_port_allocator.h @@ -22,6 +22,7 @@ #include "p2p/base/udp_port.h" #include "rtc_base/memory/always_valid_pointer.h" #include "rtc_base/net_helpers.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/thread.h" #include "test/scoped_key_value_config.h" @@ -256,7 +257,7 @@ class FakePortAllocator : public cricket::PortAllocator { Initialize(); return; } - network_thread_->Invoke(RTC_FROM_HERE, [this] { Initialize(); }); + SendTask(network_thread_, [this] { Initialize(); }); } webrtc::test::ScopedKeyValueConfig field_trials_; diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 684f3acdb5..2b41243b74 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -2114,12 +2114,12 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base:checks", "../rtc_base:copy_on_write_buffer", "../rtc_base:gunit_helpers", - "../rtc_base:location", "../rtc_base:logging", "../rtc_base:macromagic", "../rtc_base:rtc_base_tests_utils", "../rtc_base:socket_address", "../rtc_base:stringutils", + "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../rtc_base/containers:flat_set", "../rtc_base/third_party/sigslot", @@ -2182,10 +2182,10 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base", "../rtc_base:checks", "../rtc_base:gunit_helpers", - "../rtc_base:location", "../rtc_base:rtc_base_tests_utils", "../rtc_base:socket_address", "../rtc_base:socket_factory", + "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../system_wrappers", "../test:perf_test", @@ -2399,7 +2399,6 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base:event_tracer", "../rtc_base:gunit_helpers", "../rtc_base:ip_address", - "../rtc_base:location", "../rtc_base:logging", "../rtc_base:macromagic", "../rtc_base:network_constants", @@ -2408,6 +2407,7 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base:rtc_json", "../rtc_base:socket_address", "../rtc_base:stringutils", + "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../rtc_base:timeutils", "../rtc_base/synchronization:mutex", @@ -2591,7 +2591,6 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base:checks", "../rtc_base:gunit_helpers", "../rtc_base:ip_address", - "../rtc_base:location", "../rtc_base:logging", "../rtc_base:macromagic", "../rtc_base:rtc_base_tests_utils", @@ -2599,6 +2598,7 @@ if (rtc_include_tests && !build_with_chromium) { "../rtc_base:rtc_json", "../rtc_base:safe_conversions", "../rtc_base:socket_address", + "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../rtc_base:timeutils", "../rtc_base/synchronization:mutex", diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc index 40beff8f9c..2dd5d090bf 100644 --- a/pc/channel_unittest.cc +++ b/pc/channel_unittest.cc @@ -41,9 +41,9 @@ #include "rtc_base/buffer.h" #include "rtc_base/byte_order.h" #include "rtc_base/checks.h" -#include "rtc_base/location.h" #include "rtc_base/rtc_certificate.h" #include "rtc_base/ssl_identity.h" +#include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/scoped_key_value_config.h" @@ -134,7 +134,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { ~ChannelTest() { if (network_thread_) { - network_thread_->Invoke(RTC_FROM_HERE, [this]() { + SendTask(network_thread_, [this]() { network_thread_safety_->SetNotAlive(); DeinitChannels(); }); @@ -285,7 +285,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { void DeinitChannels() { if (!channel1_ && !channel2_) return; - network_thread_->Invoke(RTC_FROM_HERE, [this]() { + SendTask(network_thread_, [this]() { if (channel1_) { RTC_DCHECK_RUN_ON(channel1_->network_thread()); channel1_->SetRtpTransport(nullptr); @@ -303,14 +303,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { auto rtp_transport = std::make_unique( rtcp_packet_transport == nullptr); - network_thread_->Invoke( - RTC_FROM_HERE, - [&rtp_transport, rtp_packet_transport, rtcp_packet_transport] { - rtp_transport->SetRtpPacketTransport(rtp_packet_transport); - if (rtcp_packet_transport) { - rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport); - } - }); + SendTask(network_thread_, + [&rtp_transport, rtp_packet_transport, rtcp_packet_transport] { + rtp_transport->SetRtpPacketTransport(rtp_packet_transport); + if (rtcp_packet_transport) { + rtp_transport->SetRtcpPacketTransport(rtcp_packet_transport); + } + }); return rtp_transport; } @@ -320,17 +319,16 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { auto dtls_srtp_transport = std::make_unique( rtcp_dtls_transport == nullptr, field_trials_); - network_thread_->Invoke( - RTC_FROM_HERE, - [&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] { - dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport, - rtcp_dtls_transport); - }); + SendTask(network_thread_, + [&dtls_srtp_transport, rtp_dtls_transport, rtcp_dtls_transport] { + dtls_srtp_transport->SetDtlsTransports(rtp_dtls_transport, + rtcp_dtls_transport); + }); return dtls_srtp_transport; } void ConnectFakeTransports() { - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { bool asymmetric = false; // Depending on test flags, could be using DTLS or raw packet transport. if (fake_rtp_dtls_transport1_ && fake_rtp_dtls_transport2_) { @@ -536,18 +534,21 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { // network thread, which callers need to factor in. bool IsSrtpActive(std::unique_ptr& channel) { RTC_DCHECK(channel.get()); - return network_thread_->Invoke( - RTC_FROM_HERE, [&] { return channel->srtp_active(); }); + bool result; + SendTask(network_thread_, [&] { result = channel->srtp_active(); }); + return result; } // Returns true iff the transport is set for a channel and rtcp_mux_enabled() // returns true. bool IsRtcpMuxEnabled(std::unique_ptr& channel) { RTC_DCHECK(channel.get()); - return network_thread_->Invoke(RTC_FROM_HERE, [&] { - return channel->rtp_transport() && - channel->rtp_transport()->rtcp_mux_enabled(); + bool result; + SendTask(network_thread_, [&] { + result = channel->rtp_transport() && + channel->rtp_transport()->rtcp_mux_enabled(); }); + return result; } // Tests that can be used by derived classes. @@ -863,7 +864,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { // when creating the channel. WaitForThreads(); media_channel1->set_num_network_route_changes(0); - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { rtc::NetworkRoute network_route; // The transport channel becomes disconnected. fake_rtp_dtls_transport1_->ice_transport()->SignalNetworkRouteChanged( @@ -874,7 +875,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_FALSE(media_channel1->last_network_route().connected); media_channel1->set_num_network_route_changes(0); - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { rtc::NetworkRoute network_route; network_route.connected = true; network_route.local = @@ -1034,9 +1035,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(CheckNoRtp2()); // Lose writability, which should fail. - network_thread_->Invoke(RTC_FROM_HERE, [this] { - fake_rtp_dtls_transport1_->SetWritable(false); - }); + SendTask(network_thread_, + [this] { fake_rtp_dtls_transport1_->SetWritable(false); }); SendRtp1(); SendRtp2(); WaitForThreads(); @@ -1044,9 +1044,8 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(CheckNoRtp2()); // Regain writability - network_thread_->Invoke(RTC_FROM_HERE, [this] { - fake_rtp_dtls_transport1_->SetWritable(true); - }); + SendTask(network_thread_, + [this] { fake_rtp_dtls_transport1_->SetWritable(true); }); EXPECT_TRUE(media_channel1()->sending()); SendRtp1(); SendRtp2(); @@ -1057,7 +1056,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(CheckNoRtp2()); // Lose writability completely - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { bool asymmetric = true; fake_rtp_dtls_transport1_->SetDestination(nullptr, asymmetric); }); @@ -1072,7 +1071,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { EXPECT_TRUE(CheckNoRtp1()); // Gain writability back - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { bool asymmetric = true; fake_rtp_dtls_transport1_->SetDestination(fake_rtp_dtls_transport2_.get(), asymmetric); @@ -1303,7 +1302,7 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { bool rcv_success, send_success; int rcv_buf, send_buf; - network_thread_->Invoke(RTC_FROM_HERE, [&] { + SendTask(network_thread_, [&] { channel1_->SetOption(cricket::BaseChannel::ST_RTP, rtc::Socket::Option::OPT_SNDBUF, kSndBufSize); channel2_->SetOption(cricket::BaseChannel::ST_RTP, @@ -1386,14 +1385,13 @@ class ChannelTest : public ::testing::Test, public sigslot::has_slots<> { void WaitForThreads(rtc::ArrayView threads) { // `threads` and current thread post packets to network thread. for (rtc::Thread* thread : threads) { - thread->Invoke(RTC_FROM_HERE, - [thread] { ProcessThreadQueue(thread); }); + SendTask(thread, [thread] { ProcessThreadQueue(thread); }); } ProcessThreadQueue(rtc::Thread::Current()); // Network thread move them around and post back to worker = current thread. if (!network_thread_->IsCurrent()) { - network_thread_->Invoke( - RTC_FROM_HERE, [this] { ProcessThreadQueue(network_thread_); }); + SendTask(network_thread_, + [this] { ProcessThreadQueue(network_thread_); }); } // Worker thread = current Thread process received messages. ProcessThreadQueue(rtc::Thread::Current()); @@ -1457,7 +1455,7 @@ std::unique_ptr ChannelTest::CreateChannel( worker_thread, network_thread, signaling_thread, std::move(ch), cricket::CN_AUDIO, (flags & DTLS) != 0, webrtc::CryptoOptions(), &ssrc_generator_); - network_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(network_thread, [&]() { RTC_DCHECK_RUN_ON(channel->network_thread()); channel->SetRtpTransport(rtp_transport); }); @@ -1543,7 +1541,7 @@ std::unique_ptr ChannelTest::CreateChannel( worker_thread, network_thread, signaling_thread, std::move(ch), cricket::CN_VIDEO, (flags & DTLS) != 0, webrtc::CryptoOptions(), &ssrc_generator_); - network_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(network_thread, [&]() { RTC_DCHECK_RUN_ON(channel->network_thread()); channel->SetRtpTransport(rtp_transport); }); diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc index ce8d1612a3..c30f381971 100644 --- a/pc/jsep_transport_controller_unittest.cc +++ b/pc/jsep_transport_controller_unittest.cc @@ -24,12 +24,12 @@ #include "p2p/base/transport_info.h" #include "rtc_base/fake_ssl_identity.h" #include "rtc_base/gunit.h" -#include "rtc_base/location.h" #include "rtc_base/logging.h" #include "rtc_base/net_helper.h" #include "rtc_base/socket_address.h" #include "rtc_base/ssl_fingerprint.h" #include "rtc_base/ssl_identity.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/thread.h" #include "test/gtest.h" #include "test/scoped_key_value_config.h" @@ -104,8 +104,7 @@ class JsepTransportControllerTest : public JsepTransportController::Observer, transport_controller_ = std::make_unique( network_thread, port_allocator, nullptr /* async_resolver_factory */, config); - network_thread->Invoke(RTC_FROM_HERE, - [&] { ConnectTransportControllerSignals(); }); + SendTask(network_thread, [&] { ConnectTransportControllerSignals(); }); } void ConnectTransportControllerSignals() { @@ -259,7 +258,7 @@ class JsepTransportControllerTest : public JsepTransportController::Observer, void CreateLocalDescriptionAndCompleteConnectionOnNetworkThread() { if (!network_thread_->IsCurrent()) { - network_thread_->Invoke(RTC_FROM_HERE, [&] { + SendTask(network_thread_.get(), [&] { CreateLocalDescriptionAndCompleteConnectionOnNetworkThread(); }); return; @@ -978,8 +977,7 @@ TEST_F(JsepTransportControllerTest, IceSignalingOccursOnNetworkThread) { EXPECT_EQ(ice_signaled_on_thread_, network_thread_.get()); - network_thread_->Invoke(RTC_FROM_HERE, - [&] { transport_controller_.reset(); }); + SendTask(network_thread_.get(), [&] { transport_controller_.reset(); }); } // Test that if the TransportController was created with the diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc index 638e7edb0f..ffe64fe8d8 100644 --- a/pc/peer_connection_integrationtest.cc +++ b/pc/peer_connection_integrationtest.cc @@ -82,13 +82,13 @@ #include "rtc_base/firewall_socket_server.h" #include "rtc_base/gunit.h" #include "rtc_base/helpers.h" -#include "rtc_base/location.h" #include "rtc_base/logging.h" #include "rtc_base/socket_address.h" #include "rtc_base/ssl_certificate.h" #include "rtc_base/ssl_fingerprint.h" #include "rtc_base/ssl_identity.h" #include "rtc_base/ssl_stream_adapter.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/test_certificate_verifier.h" #include "rtc_base/thread.h" #include "rtc_base/time_utils.h" @@ -2371,10 +2371,10 @@ TEST_P(PeerConnectionIntegrationTestWithFakeClock, turn_server_2_internal_address, turn_server_2_external_address); // Bypass permission check on received packets so media can be sent before // the candidate is signaled. - network_thread()->Invoke(RTC_FROM_HERE, [turn_server_1] { + SendTask(network_thread(), [turn_server_1] { turn_server_1->set_enable_permission_checks(false); }); - network_thread()->Invoke(RTC_FROM_HERE, [turn_server_2] { + SendTask(network_thread(), [turn_server_2] { turn_server_2->set_enable_permission_checks(false); }); diff --git a/pc/peer_connection_rampup_tests.cc b/pc/peer_connection_rampup_tests.cc index 3fed5ee8c2..3e39ffc0ae 100644 --- a/pc/peer_connection_rampup_tests.cc +++ b/pc/peer_connection_rampup_tests.cc @@ -45,10 +45,10 @@ #include "rtc_base/firewall_socket_server.h" #include "rtc_base/gunit.h" #include "rtc_base/helpers.h" -#include "rtc_base/location.h" #include "rtc_base/socket_address.h" #include "rtc_base/socket_factory.h" #include "rtc_base/ssl_certificate.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/test_certificate_verifier.h" #include "rtc_base/thread.h" #include "rtc_base/virtual_socket_server.h" @@ -163,8 +163,7 @@ class PeerConnectionRampUpTest : public ::testing::Test { } virtual ~PeerConnectionRampUpTest() { - network_thread()->Invoke(RTC_FROM_HERE, - [this] { turn_servers_.clear(); }); + SendTask(network_thread(), [this] { turn_servers_.clear(); }); } bool CreatePeerConnectionWrappers(const RTCConfiguration& caller_config, @@ -235,18 +234,17 @@ class PeerConnectionRampUpTest : public ::testing::Test { const std::string& common_name = "test turn server") { rtc::Thread* thread = network_thread(); rtc::SocketFactory* factory = firewall_socket_server_.get(); - std::unique_ptr turn_server = - network_thread_->Invoke>( - RTC_FROM_HERE, [thread, factory, type, common_name] { - static const rtc::SocketAddress turn_server_internal_address{ - kTurnInternalAddress, kTurnInternalPort}; - static const rtc::SocketAddress turn_server_external_address{ - kTurnExternalAddress, kTurnExternalPort}; - return std::make_unique( - thread, factory, turn_server_internal_address, - turn_server_external_address, type, - true /*ignore_bad_certs=*/, common_name); - }); + std::unique_ptr turn_server; + SendTask(network_thread_.get(), [&] { + static const rtc::SocketAddress turn_server_internal_address{ + kTurnInternalAddress, kTurnInternalPort}; + static const rtc::SocketAddress turn_server_external_address{ + kTurnExternalAddress, kTurnExternalPort}; + turn_server = std::make_unique( + thread, factory, turn_server_internal_address, + turn_server_external_address, type, true /*ignore_bad_certs=*/, + common_name); + }); turn_servers_.push_back(std::move(turn_server)); } diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc index 333fde5413..d66ee65f4c 100644 --- a/pc/rtp_sender_receiver_unittest.cc +++ b/pc/rtp_sender_receiver_unittest.cc @@ -62,7 +62,6 @@ #include "pc/video_track.h" #include "rtc_base/checks.h" #include "rtc_base/gunit.h" -#include "rtc_base/location.h" #include "rtc_base/thread.h" #include "test/gmock.h" #include "test/gtest.h" diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h index 82d4babd5b..7e5cc74758 100644 --- a/pc/test/integration_test_helpers.h +++ b/pc/test/integration_test_helpers.h @@ -107,13 +107,13 @@ #include "rtc_base/gunit.h" #include "rtc_base/helpers.h" #include "rtc_base/ip_address.h" -#include "rtc_base/location.h" #include "rtc_base/logging.h" #include "rtc_base/mdns_responder_interface.h" #include "rtc_base/numerics/safe_conversions.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/socket_address.h" #include "rtc_base/ssl_stream_adapter.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/task_utils/repeating_task.h" #include "rtc_base/test_certificate_verifier.h" #include "rtc_base/thread.h" @@ -1429,7 +1429,7 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test { // If turn servers were created for the test they need to be destroyed on // the network thread. - network_thread()->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread(), [this] { turn_servers_.clear(); turn_customizers_.clear(); }); @@ -1641,25 +1641,22 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test { const std::string& common_name = "test turn server") { rtc::Thread* thread = network_thread(); rtc::SocketFactory* socket_factory = fss_.get(); - std::unique_ptr turn_server = - network_thread()->Invoke>( - RTC_FROM_HERE, [thread, socket_factory, internal_address, - external_address, type, common_name] { - return std::make_unique( - thread, socket_factory, internal_address, external_address, - type, - /*ignore_bad_certs=*/true, common_name); - }); + std::unique_ptr turn_server; + SendTask(network_thread(), [&] { + turn_server = std::make_unique( + thread, socket_factory, internal_address, external_address, type, + /*ignore_bad_certs=*/true, common_name); + }); turn_servers_.push_back(std::move(turn_server)); // Interactions with the turn server should be done on the network thread. return turn_servers_.back().get(); } cricket::TestTurnCustomizer* CreateTurnCustomizer() { - std::unique_ptr turn_customizer = - network_thread()->Invoke>( - RTC_FROM_HERE, - [] { return std::make_unique(); }); + std::unique_ptr turn_customizer; + SendTask(network_thread(), [&] { + turn_customizer = std::make_unique(); + }); turn_customizers_.push_back(std::move(turn_customizer)); // Interactions with the turn customizer should be done on the network // thread. @@ -1670,16 +1667,10 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test { // 0. void ExpectTurnCustomizerCountersIncremented( cricket::TestTurnCustomizer* turn_customizer) { - unsigned int allow_channel_data_counter = - network_thread()->Invoke( - RTC_FROM_HERE, [turn_customizer] { - return turn_customizer->allow_channel_data_cnt_; - }); - EXPECT_GT(allow_channel_data_counter, 0u); - unsigned int modify_counter = network_thread()->Invoke( - RTC_FROM_HERE, - [turn_customizer] { return turn_customizer->modify_cnt_; }); - EXPECT_GT(modify_counter, 0u); + SendTask(network_thread(), [turn_customizer] { + EXPECT_GT(turn_customizer->allow_channel_data_cnt_, 0u); + EXPECT_GT(turn_customizer->modify_cnt_, 0u); + }); } // Once called, SDP blobs and ICE candidates will be automatically signaled @@ -1758,10 +1749,10 @@ class PeerConnectionIntegrationBaseTest : public ::testing::Test { } void SetPortAllocatorFlags(uint32_t caller_flags, uint32_t callee_flags) { - network_thread()->Invoke(RTC_FROM_HERE, [this, caller_flags] { + SendTask(network_thread(), [this, caller_flags] { caller()->port_allocator()->set_flags(caller_flags); }); - network_thread()->Invoke(RTC_FROM_HERE, [this, callee_flags] { + SendTask(network_thread(), [this, callee_flags] { callee()->port_allocator()->set_flags(callee_flags); }); } diff --git a/pc/video_rtp_receiver_unittest.cc b/pc/video_rtp_receiver_unittest.cc index 3367c6ee37..401987960c 100644 --- a/pc/video_rtp_receiver_unittest.cc +++ b/pc/video_rtp_receiver_unittest.cc @@ -17,7 +17,7 @@ #include "api/video/recordable_encoded_frame.h" #include "api/video/test/mock_recordable_encoded_frame.h" #include "media/base/fake_media_engine.h" -#include "rtc_base/location.h" +#include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" @@ -77,8 +77,8 @@ class VideoRtpReceiverTest : public testing::Test { } void SetMediaChannel(cricket::MediaChannel* media_channel) { - worker_thread_->Invoke( - RTC_FROM_HERE, [&]() { receiver_->SetMediaChannel(media_channel); }); + SendTask(worker_thread_.get(), + [&]() { receiver_->SetMediaChannel(media_channel); }); } webrtc::VideoTrackSourceInterface* Source() { @@ -178,7 +178,7 @@ TEST_F(VideoRtpReceiverTest, BroadcastsEncodedFramesWhenEnabled) { EXPECT_CALL(sink, OnFrame).Times(2); MockRecordableEncodedFrame frame; broadcast(frame); - worker_thread_->Invoke(RTC_FROM_HERE, [&] { broadcast(frame); }); + SendTask(worker_thread_.get(), [&] { broadcast(frame); }); } TEST_F(VideoRtpReceiverTest, EnablesEncodedOutputOnChannelRestart) { diff --git a/rtc_base/task_queue_for_test.h b/rtc_base/task_queue_for_test.h index 260827ff78..616ec8e2a5 100644 --- a/rtc_base/task_queue_for_test.h +++ b/rtc_base/task_queue_for_test.h @@ -26,8 +26,11 @@ namespace webrtc { inline void SendTask(TaskQueueBase* task_queue, rtc::FunctionView task) { - RTC_CHECK(!task_queue->IsCurrent()) - << "Called SendTask to a queue from the same queue"; + if (task_queue->IsCurrent()) { + task(); + return; + } + rtc::Event event; absl::Cleanup cleanup = [&event] { event.Set(); }; task_queue->PostTask([task, cleanup = std::move(cleanup)] { task(); }); @@ -53,6 +56,7 @@ class RTC_LOCKABLE TaskQueueForTest : public rtc::TaskQueue { // Wait for the completion of all tasks posted prior to the // WaitForPreviouslyPostedTasks() call. void WaitForPreviouslyPostedTasks() { + RTC_DCHECK(!Get()->IsCurrent()); // Post an empty task on the queue and wait for it to finish, to ensure // that all already posted tasks on the queue get executed. SendTask([]() {}); diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn index 2624bc6bc7..71cf2d79f3 100644 --- a/test/network/BUILD.gn +++ b/test/network/BUILD.gn @@ -102,6 +102,7 @@ rtc_library("network_emulation_unittest") { "../../rtc_base:gunit_helpers", "../../rtc_base:logging", "../../rtc_base:rtc_event", + "../../rtc_base:task_queue_for_test", "../../rtc_base/synchronization:mutex", ] } @@ -131,6 +132,7 @@ if (rtc_include_tests && !build_with_chromium) { "../../rtc_base:gunit_helpers", "../../rtc_base:logging", "../../rtc_base:rtc_event", + "../../rtc_base:task_queue_for_test", ] } } diff --git a/test/network/emulated_turn_server.cc b/test/network/emulated_turn_server.cc index 98267a847a..0bc7ec6e2a 100644 --- a/test/network/emulated_turn_server.cc +++ b/test/network/emulated_turn_server.cc @@ -15,6 +15,7 @@ #include "api/packet_socket_factory.h" #include "rtc_base/strings/string_builder.h" +#include "rtc_base/task_queue_for_test.h" namespace { @@ -121,7 +122,7 @@ EmulatedTURNServer::EmulatedTURNServer(std::unique_ptr thread, : thread_(std::move(thread)), client_(client), peer_(peer) { ice_config_.username = "keso"; ice_config_.password = "keso"; - thread_->Invoke(RTC_FROM_HERE, [=]() { + SendTask(thread_.get(), [=]() { RTC_DCHECK_RUN_ON(thread_.get()); turn_server_ = std::make_unique(thread_.get()); turn_server_->set_realm(kTestRealm); @@ -142,14 +143,14 @@ EmulatedTURNServer::EmulatedTURNServer(std::unique_ptr thread, } void EmulatedTURNServer::Stop() { - thread_->Invoke(RTC_FROM_HERE, [=]() { + SendTask(thread_.get(), [=]() { RTC_DCHECK_RUN_ON(thread_.get()); sockets_.clear(); }); } EmulatedTURNServer::~EmulatedTURNServer() { - thread_->Invoke(RTC_FROM_HERE, [=]() { + SendTask(thread_.get(), [=]() { RTC_DCHECK_RUN_ON(thread_.get()); turn_server_.reset(nullptr); }); diff --git a/test/network/network_emulation_pc_unittest.cc b/test/network/network_emulation_pc_unittest.cc index 7662b1cae8..0519dd816d 100644 --- a/test/network/network_emulation_pc_unittest.cc +++ b/test/network/network_emulation_pc_unittest.cc @@ -26,6 +26,7 @@ #include "pc/peer_connection_wrapper.h" #include "pc/test/mock_peer_connection_observers.h" #include "rtc_base/gunit.h" +#include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/network/network_emulation.h" @@ -146,7 +147,7 @@ TEST(NetworkEmulationManagerPCTest, Run) { std::unique_ptr bob_observer = std::make_unique(); - signaling_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(signaling_thread.get(), [&]() { alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(), alice_network->network_thread()); alice_pc = CreatePeerConnection(alice_pcf, alice_observer.get(), @@ -167,7 +168,7 @@ TEST(NetworkEmulationManagerPCTest, Run) { std::make_unique(bob_pcf, bob_pc, std::move(bob_observer)); - signaling_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(signaling_thread.get(), [&]() { rtc::scoped_refptr source = alice_pcf->CreateAudioSource(cricket::AudioOptions()); rtc::scoped_refptr track = @@ -256,7 +257,7 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) { std::unique_ptr bob_observer = std::make_unique(); - signaling_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(signaling_thread.get(), [&]() { alice_pcf = CreatePeerConnectionFactory(signaling_thread.get(), alice_network->network_thread()); alice_pc = CreatePeerConnection( @@ -277,7 +278,7 @@ TEST(NetworkEmulationManagerPCTest, RunTURN) { std::make_unique(bob_pcf, bob_pc, std::move(bob_observer)); - signaling_thread->Invoke(RTC_FROM_HERE, [&]() { + SendTask(signaling_thread.get(), [&]() { rtc::scoped_refptr source = alice_pcf->CreateAudioSource(cricket::AudioOptions()); rtc::scoped_refptr track = diff --git a/test/network/network_emulation_unittest.cc b/test/network/network_emulation_unittest.cc index e985ae1859..591cc2c473 100644 --- a/test/network/network_emulation_unittest.cc +++ b/test/network/network_emulation_unittest.cc @@ -20,6 +20,7 @@ #include "rtc_base/event.h" #include "rtc_base/gunit.h" #include "rtc_base/synchronization/mutex.h" +#include "rtc_base/task_queue_for_test.h" #include "test/gmock.h" #include "test/gtest.h" #include "test/network/network_emulation_manager.h" @@ -209,10 +210,10 @@ TEST(NetworkEmulationManagerTest, Run) { for (uint64_t j = 0; j < 2; j++) { rtc::Socket* s1 = nullptr; rtc::Socket* s2 = nullptr; - t1->Invoke(RTC_FROM_HERE, [&] { + SendTask(t1, [&] { s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); - t2->Invoke(RTC_FROM_HERE, [&] { + SendTask(t2, [&] { s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); @@ -222,17 +223,17 @@ TEST(NetworkEmulationManagerTest, Run) { rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0); rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0); - t1->Invoke(RTC_FROM_HERE, [&] { + SendTask(t1, [&] { s1->Bind(a1); a1 = s1->GetLocalAddress(); }); - t2->Invoke(RTC_FROM_HERE, [&] { + SendTask(t2, [&] { s2->Bind(a2); a2 = s2->GetLocalAddress(); }); - t1->Invoke(RTC_FROM_HERE, [&] { s1->Connect(a2); }); - t2->Invoke(RTC_FROM_HERE, [&] { s2->Connect(a1); }); + SendTask(t1, [&] { s1->Connect(a2); }); + SendTask(t2, [&] { s2->Connect(a1); }); for (uint64_t i = 0; i < 1000; i++) { t1->PostTask([&]() { s1->Send(data.data(), data.size()); }); @@ -244,8 +245,8 @@ TEST(NetworkEmulationManagerTest, Run) { EXPECT_EQ(r1.ReceivedCount(), 1000); EXPECT_EQ(r2.ReceivedCount(), 1000); - t1->Invoke(RTC_FROM_HERE, [&] { delete s1; }); - t2->Invoke(RTC_FROM_HERE, [&] { delete s2; }); + SendTask(t1, [&] { delete s1; }); + SendTask(t2, [&] { delete s2; }); } const int64_t single_packet_size = data.size() + kOverheadIpv4Udp; @@ -363,10 +364,10 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) { for (uint64_t j = 0; j < 2; j++) { rtc::Socket* s1 = nullptr; rtc::Socket* s2 = nullptr; - t1->Invoke(RTC_FROM_HERE, [&] { + SendTask(t1, [&] { s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); - t2->Invoke(RTC_FROM_HERE, [&] { + SendTask(t2, [&] { s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); @@ -376,17 +377,17 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) { rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0); rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0); - t1->Invoke(RTC_FROM_HERE, [&] { + SendTask(t1, [&] { s1->Bind(a1); a1 = s1->GetLocalAddress(); }); - t2->Invoke(RTC_FROM_HERE, [&] { + SendTask(t2, [&] { s2->Bind(a2); a2 = s2->GetLocalAddress(); }); - t1->Invoke(RTC_FROM_HERE, [&] { s1->Connect(a2); }); - t2->Invoke(RTC_FROM_HERE, [&] { s2->Connect(a1); }); + SendTask(t1, [&] { s1->Connect(a2); }); + SendTask(t2, [&] { s2->Connect(a1); }); for (uint64_t i = 0; i < 1000; i++) { t1->PostTask([&]() { s1->Send(data.data(), data.size()); }); @@ -398,8 +399,8 @@ TEST(NetworkEmulationManagerTest, DebugStatsCollectedInDebugMode) { EXPECT_EQ(r1.ReceivedCount(), 1000); EXPECT_EQ(r2.ReceivedCount(), 1000); - t1->Invoke(RTC_FROM_HERE, [&] { delete s1; }); - t2->Invoke(RTC_FROM_HERE, [&] { delete s2; }); + SendTask(t1, [&] { delete s1; }); + SendTask(t2, [&] { delete s2; }); } const int64_t single_packet_size = data.size() + kOverheadIpv4Udp; @@ -465,12 +466,10 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) { rtc::Socket* s1 = nullptr; rtc::Socket* s2 = nullptr; - t1->Invoke(RTC_FROM_HERE, [&] { - s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); - }); - t2->Invoke(RTC_FROM_HERE, [&] { - s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); - }); + SendTask(t1, + [&] { s1 = t1->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); + SendTask(t2, + [&] { s2 = t2->socketserver()->CreateSocket(AF_INET, SOCK_DGRAM); }); SocketReader r1(s1, t1); SocketReader r2(s2, t2); @@ -478,17 +477,17 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) { rtc::SocketAddress a1(alice_endpoint->GetPeerLocalAddress(), 0); rtc::SocketAddress a2(bob_endpoint->GetPeerLocalAddress(), 0); - t1->Invoke(RTC_FROM_HERE, [&] { + SendTask(t1, [&] { s1->Bind(a1); a1 = s1->GetLocalAddress(); }); - t2->Invoke(RTC_FROM_HERE, [&] { + SendTask(t2, [&] { s2->Bind(a2); a2 = s2->GetLocalAddress(); }); - t1->Invoke(RTC_FROM_HERE, [&] { s1->Connect(a2); }); - t2->Invoke(RTC_FROM_HERE, [&] { s2->Connect(a1); }); + SendTask(t1, [&] { s1->Connect(a2); }); + SendTask(t2, [&] { s2->Connect(a1); }); // Send 11 packets, totalizing 1 second between the first and the last. const int kNumPacketsSent = 11; @@ -518,8 +517,8 @@ TEST(NetworkEmulationManagerTest, ThroughputStats) { EXPECT_EQ(r1.ReceivedCount(), 11); EXPECT_EQ(r2.ReceivedCount(), 11); - t1->Invoke(RTC_FROM_HERE, [&] { delete s1; }); - t2->Invoke(RTC_FROM_HERE, [&] { delete s2; }); + SendTask(t1, [&] { delete s1; }); + SendTask(t2, [&] { delete s2; }); } // Testing that packets are delivered via all routes using a routing scheme as diff --git a/test/pc/e2e/peer_connection_quality_test.cc b/test/pc/e2e/peer_connection_quality_test.cc index 596d118cd1..89d5da0d42 100644 --- a/test/pc/e2e/peer_connection_quality_test.cc +++ b/test/pc/e2e/peer_connection_quality_test.cc @@ -28,6 +28,7 @@ #include "rtc_base/gunit.h" #include "rtc_base/numerics/safe_conversions.h" #include "rtc_base/strings/string_builder.h" +#include "rtc_base/task_queue_for_test.h" #include "system_wrappers/include/cpu_info.h" #include "system_wrappers/include/field_trial.h" #include "test/field_trial.h" @@ -345,18 +346,17 @@ void PeerConnectionE2EQualityTest::Run(RunParams run_params) { }); // Setup call. - signaling_thread->Invoke(RTC_FROM_HERE, [this, &run_params] { - SetupCallOnSignalingThread(run_params); - }); + SendTask(signaling_thread.get(), + [this, &run_params] { SetupCallOnSignalingThread(run_params); }); std::unique_ptr signaling_interceptor = CreateSignalingInterceptor(run_params); // Connect peers. - signaling_thread->Invoke(RTC_FROM_HERE, [this, &signaling_interceptor] { + SendTask(signaling_thread.get(), [this, &signaling_interceptor] { ExchangeOfferAnswer(signaling_interceptor.get()); }); WaitUntilIceCandidatesGathered(signaling_thread.get()); - signaling_thread->Invoke(RTC_FROM_HERE, [this, &signaling_interceptor] { + SendTask(signaling_thread.get(), [this, &signaling_interceptor] { ExchangeIceCandidates(signaling_interceptor.get()); }); WaitUntilPeersAreConnected(signaling_thread.get()); @@ -388,8 +388,7 @@ void PeerConnectionE2EQualityTest::Run(RunParams run_params) { alice_->DetachAecDump(); bob_->DetachAecDump(); // Tear down the call. - signaling_thread->Invoke(RTC_FROM_HERE, - [this] { TearDownCallOnSignalingThread(); }); + SendTask(signaling_thread.get(), [this] { TearDownCallOnSignalingThread(); }); Timestamp end_time = Now(); RTC_LOG(LS_INFO) << "All peers are disconnected."; @@ -597,9 +596,11 @@ void PeerConnectionE2EQualityTest::WaitUntilIceCandidatesGathered( rtc::Thread* signaling_thread) { ASSERT_TRUE(time_controller_.Wait( [&]() { - return signaling_thread->Invoke(RTC_FROM_HERE, [&]() { - return alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone(); + bool result; + SendTask(signaling_thread, [&]() { + result = alice_->IsIceGatheringDone() && bob_->IsIceGatheringDone(); }); + return result; }, 2 * kDefaultTimeout)); } @@ -609,14 +610,16 @@ void PeerConnectionE2EQualityTest::WaitUntilPeersAreConnected( // This means that ICE and DTLS are connected. alice_connected_ = time_controller_.Wait( [&]() { - return signaling_thread->Invoke( - RTC_FROM_HERE, [&]() { return alice_->IsIceConnected(); }); + bool result; + SendTask(signaling_thread, [&] { result = alice_->IsIceConnected(); }); + return result; }, kDefaultTimeout); bob_connected_ = time_controller_.Wait( [&]() { - return signaling_thread->Invoke( - RTC_FROM_HERE, [&]() { return bob_->IsIceConnected(); }); + bool result; + SendTask(signaling_thread, [&] { result = bob_->IsIceConnected(); }); + return result; }, kDefaultTimeout); } diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn index 9410a0b6a3..43d203b102 100644 --- a/test/peer_scenario/BUILD.gn +++ b/test/peer_scenario/BUILD.gn @@ -52,6 +52,7 @@ if (rtc_include_tests) { "../../rtc_base", "../../rtc_base:null_socket_server", "../../rtc_base:stringutils", + "../../rtc_base:task_queue_for_test", "../../test:explicit_key_value_config", "../../test:scoped_key_value_config", "../logging:log_writer", diff --git a/test/peer_scenario/scenario_connection.cc b/test/peer_scenario/scenario_connection.cc index bd95da028e..66eca275d1 100644 --- a/test/peer_scenario/scenario_connection.cc +++ b/test/peer_scenario/scenario_connection.cc @@ -17,6 +17,7 @@ #include "pc/jsep_transport_controller.h" #include "pc/rtp_transport_internal.h" #include "pc/session_description.h" +#include "rtc_base/task_queue_for_test.h" namespace webrtc { class ScenarioIceConnectionImpl : public ScenarioIceConnection, @@ -103,7 +104,7 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl( port_allocator_.get(), /*async_resolver_factory*/ nullptr, CreateJsepConfig())) { - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { RTC_DCHECK_RUN_ON(network_thread_); uint32_t flags = cricket::PORTALLOCATOR_DISABLE_TCP; port_allocator_->set_flags(port_allocator_->flags() | flags); @@ -116,7 +117,7 @@ ScenarioIceConnectionImpl::ScenarioIceConnectionImpl( } ScenarioIceConnectionImpl::~ScenarioIceConnectionImpl() { - network_thread_->Invoke(RTC_FROM_HERE, [this] { + SendTask(network_thread_, [this] { RTC_DCHECK_RUN_ON(network_thread_); jsep_controller_.reset(); port_allocator_.reset(); diff --git a/test/time_controller/BUILD.gn b/test/time_controller/BUILD.gn index 11c6b77a67..c810eae1b4 100644 --- a/test/time_controller/BUILD.gn +++ b/test/time_controller/BUILD.gn @@ -64,6 +64,7 @@ if (rtc_include_tests) { "../../rtc_base:macromagic", "../../rtc_base:rtc_event", "../../rtc_base:rtc_task_queue", + "../../rtc_base:task_queue_for_test", "../../rtc_base:threading", "../../rtc_base/synchronization:mutex", "../../rtc_base/task_utils:repeating_task", diff --git a/test/time_controller/simulated_time_controller_unittest.cc b/test/time_controller/simulated_time_controller_unittest.cc index d9a5c16ca5..78d8909e36 100644 --- a/test/time_controller/simulated_time_controller_unittest.cc +++ b/test/time_controller/simulated_time_controller_unittest.cc @@ -15,6 +15,7 @@ #include "rtc_base/event.h" #include "rtc_base/task_queue.h" +#include "rtc_base/task_queue_for_test.h" #include "rtc_base/task_utils/repeating_task.h" #include "test/gmock.h" #include "test/gtest.h" @@ -123,7 +124,7 @@ TEST(SimulatedTimeControllerTest, DelayTaskRunOnTime) { EXPECT_TRUE(delay_task_executed); } -TEST(SimulatedTimeControllerTest, ThreadYeildsOnInvoke) { +TEST(SimulatedTimeControllerTest, ThreadYeildsOnSynchronousCall) { GlobalSimulatedTimeController sim(kStartTime); auto main_thread = sim.GetMainThread(); auto t2 = sim.CreateThread("thread", nullptr); @@ -131,7 +132,7 @@ TEST(SimulatedTimeControllerTest, ThreadYeildsOnInvoke) { // Posting a task to the main thread, this should not run until AdvanceTime is // called. main_thread->PostTask([&] { task_has_run = true; }); - t2->Invoke(RTC_FROM_HERE, [] { + SendTask(t2.get(), [] { rtc::Event yield_event; // Wait() triggers YieldExecution() which will runs message processing on // all threads that are not in the yielded set.