Replace SingleThreadedTaskQueueForTesting::SendTask usage with ::webrtc::SendTask

Bug: webrtc:10933
Change-Id: I60738434b46e77b4644173ad168bc0efa58459b6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/156001
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29551}
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 7d85196..f6cf691 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -409,6 +409,7 @@
       "../rtc_base:checks",
       "../rtc_base:rate_limiter",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:task_queue_for_test",
       "../system_wrappers",
       "../test:audio_codec_mocks",
       "../test:direct_transport",
@@ -457,6 +458,7 @@
       "../rtc_base",
       "../rtc_base:checks",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:task_queue_for_test",
       "../system_wrappers",
       "../system_wrappers:metrics",
       "../test:direct_transport",
diff --git a/call/bitrate_estimator_tests.cc b/call/bitrate_estimator_tests.cc
index 8fa3a57..ae2a6b6 100644
--- a/call/bitrate_estimator_tests.cc
+++ b/call/bitrate_estimator_tests.cc
@@ -18,6 +18,7 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/event.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread_annotations.h"
 #include "test/call_test.h"
 #include "test/direct_transport.h"
@@ -102,7 +103,7 @@
   virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); }
 
   virtual void SetUp() {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       CreateCalls();
 
       send_transport_.reset(new test::DirectTransport(
@@ -145,7 +146,7 @@
   }
 
   virtual void TearDown() {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       for (auto* stream : streams_) {
         stream->StopSending();
         delete stream;
@@ -248,7 +249,7 @@
     "RemoteBitrateEstimatorSingleStream: Instantiating.";
 
 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -259,7 +260,7 @@
 }
 
 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -272,7 +273,7 @@
 }
 
 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -281,7 +282,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
     receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
@@ -293,7 +294,7 @@
 
 // This test is flaky. See webrtc:5790.
 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -303,7 +304,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
     receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
@@ -312,7 +313,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId);
     receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index 41e61dc..f6d6f78 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -28,6 +28,7 @@
 #include "modules/audio_device/include/test_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "rtc_base/checks.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/metrics.h"
@@ -182,7 +183,7 @@
   AudioReceiveStream* audio_receive_stream;
   std::unique_ptr<DriftingClock> drifting_clock;
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     metrics::Reset();
     rtc::scoped_refptr<TestAudioDeviceModule> fake_audio_device =
         TestAudioDeviceModule::Create(
@@ -297,7 +298,7 @@
   EXPECT_TRUE(observer.Wait())
       << "Timed out while waiting for audio and video to be synchronized.";
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     audio_send_stream->Stop();
     audio_receive_stream->Stop();
 
@@ -932,8 +933,9 @@
         int64_t avg_rtt = 0;
         for (int i = 0; i < kBitrateMeasurements; i++) {
           Call::Stats call_stats;
-          task_queue_->SendTask(
-              [this, &call_stats]() { call_stats = sender_call_->GetStats(); });
+          SendTask(RTC_FROM_HERE, task_queue_, [this, &call_stats]() {
+            call_stats = sender_call_->GetStats();
+          });
           avg_rtt += call_stats.rtt_ms;
           rtc::Thread::SleepMs(quick_perf_test ? kShortDelayMs
                                                : kBitrateMeasurementMs);
diff --git a/call/rampup_tests.cc b/call/rampup_tests.cc
index 2485aa8..2741ebf 100644
--- a/call/rampup_tests.cc
+++ b/call/rampup_tests.cc
@@ -23,6 +23,7 @@
 #include "rtc_base/logging.h"
 #include "rtc_base/platform_thread.h"
 #include "rtc_base/string_encode.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/time_utils.h"
 #include "test/encoder_settings.h"
 #include "test/field_trial.h"
@@ -93,7 +94,7 @@
 
 RampUpTester::~RampUpTester() {
   // Special case for WebRTC-QuickPerfTest/Enabled/
-  task_queue_->SendTask([this]() {
+  SendTask(RTC_FROM_HERE, task_queue_, [this]() {
     if (pending_task_ !=
         static_cast<test::DEPRECATED_SingleThreadedTaskQueueForTesting::TaskId>(
             -1)) {
@@ -380,7 +381,7 @@
 
   // Stop polling stats.
   // Corner case for field_trials=WebRTC-QuickPerfTest/Enabled/
-  task_queue_->SendTask([this]() {
+  SendTask(RTC_FROM_HERE, task_queue_, [this]() {
     if (pending_task_ !=
         static_cast<test::DEPRECATED_SingleThreadedTaskQueueForTesting::TaskId>(
             -1)) {
diff --git a/rtc_base/task_queue_for_test.h b/rtc_base/task_queue_for_test.h
index cb44ee2..7844dc4 100644
--- a/rtc_base/task_queue_for_test.h
+++ b/rtc_base/task_queue_for_test.h
@@ -25,7 +25,7 @@
 namespace webrtc {
 
 template <typename Closure>
-void SendTask(TaskQueueBase* task_queue, Closure&& task, rtc::Location loc) {
+void SendTask(rtc::Location loc, TaskQueueBase* task_queue, Closure&& task) {
   RTC_CHECK(!task_queue->IsCurrent())
       << "Called SendTask to a queue from the same queue at " << loc.ToString();
   rtc::Event event;
@@ -64,7 +64,7 @@
   // a task executes on the task queue.
   template <class Closure>
   void SendTask(Closure&& task, rtc::Location loc) {
-    ::webrtc::SendTask(Get(), std::forward<Closure>(task), loc);
+    ::webrtc::SendTask(loc, Get(), std::forward<Closure>(task));
   }
 };
 
diff --git a/test/BUILD.gn b/test/BUILD.gn
index b5542dd..64eff47 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -388,6 +388,7 @@
       "../modules/rtp_rtcp",
       "../modules/video_coding:simulcast_test_fixture_impl",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:task_queue_for_test",
       "../rtc_base/system:file_wrapper",
       "../test:single_threaded_task_queue",
       "pc/e2e:e2e_unittests",
@@ -795,6 +796,7 @@
     "../rtc_base:checks",
     "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_numerics",
+    "../rtc_base:task_queue_for_test",
     "../system_wrappers",
     "../system_wrappers:field_trial",
     "../video",
diff --git a/test/call_test.cc b/test/call_test.cc
index 31e4e64..51ddaa3 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -24,6 +24,7 @@
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/event.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/fake_encoder.h"
 #include "test/testsupport/file_utils.h"
 
@@ -63,7 +64,7 @@
   // cleanup). However, there are some tests that don't use the class that way
   // hence we need this special handling for cleaning up.
   if (task_queue_.IsRunning()) {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       fake_send_audio_device_ = nullptr;
       fake_recv_audio_device_ = nullptr;
       video_sources_.clear();
@@ -95,7 +96,7 @@
 }
 
 void CallTest::RunBaseTest(BaseTest* test) {
-  task_queue_.SendTask([this, test]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, test]() {
     num_video_streams_ = test->GetNumVideoStreams();
     num_audio_streams_ = test->GetNumAudioStreams();
     num_flexfec_streams_ = test->GetNumFlexfecStreams();
@@ -195,7 +196,7 @@
 
   test->PerformTest();
 
-  task_queue_.SendTask([this, test]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, test]() {
     Stop();
     test->OnStreamsStopped();
     DestroyStreams();
diff --git a/test/single_threaded_task_queue.h b/test/single_threaded_task_queue.h
index 433d9ea..3845829 100644
--- a/test/single_threaded_task_queue.h
+++ b/test/single_threaded_task_queue.h
@@ -61,15 +61,6 @@
     return PostDelayed(ToQueuedTask(std::move(task)), delay_ms);
   }
 
-  // Send one task to the queue. The function does not return until the task
-  // has finished executing. No support for canceling the task.
-  // TODO(bugs.webrtc.org/10933): Remove this function in favor of free SendTask
-  // to reduce direct mentioning of the SingleThreadedTaskQueueForTesting class.
-  template <typename Closure>
-  void SendTask(Closure&& task) {
-    ::webrtc::SendTask(this, std::forward<Closure>(task), RTC_FROM_HERE);
-  }
-
   // Given an identifier to the task, attempts to eject it from the queue.
   // Returns true if the task was found and cancelled. Failure possible
   // only for invalid task IDs, or for tasks which have already been executed.
diff --git a/test/single_threaded_task_queue_unittest.cc b/test/single_threaded_task_queue_unittest.cc
index dedc78b..9e2304d 100644
--- a/test/single_threaded_task_queue_unittest.cc
+++ b/test/single_threaded_task_queue_unittest.cc
@@ -16,6 +16,7 @@
 
 #include "api/task_queue/task_queue_test.h"
 #include "rtc_base/event.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/gtest.h"
 
 namespace webrtc {
@@ -320,7 +321,7 @@
 
   std::atomic<bool> executed(false);
 
-  task_queue.SendTask([&executed]() {
+  SendTask(RTC_FROM_HERE, &task_queue, [&executed]() {
     // Intentionally delay, so that if SendTask didn't block, the sender thread
     // would have time to read |executed|.
     rtc::Event delay;
diff --git a/test/win/run_loop_win.cc b/test/win/run_loop_win.cc
index 94a65cf..93bd90d 100644
--- a/test/win/run_loop_win.cc
+++ b/test/win/run_loop_win.cc
@@ -12,6 +12,7 @@
 #include <conio.h>
 #include <stdio.h>
 
+#include "rtc_base/task_queue_for_test.h"
 #include "test/run_loop.h"
 
 namespace webrtc {
@@ -23,7 +24,7 @@
 
   while (!_kbhit() || _getch() != '\r') {
     // Drive the message loop for the thread running the task_queue
-    task_queue.SendTask([&]() {
+    SendTask(RTC_FROM_HERE, &task_queue, [&]() {
       MSG msg;
       if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
         TranslateMessage(&msg);
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 4f4ad96..5aa64e9 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -292,6 +292,7 @@
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:rtc_numerics",
+      "../rtc_base:task_queue_for_test",
       "../system_wrappers",
       "../test:fake_video_codecs",
       "../test:fileutils",
diff --git a/video/end_to_end_tests/bandwidth_tests.cc b/video/end_to_end_tests/bandwidth_tests.cc
index a8a1623..03ac8b2 100644
--- a/video/end_to_end_tests/bandwidth_tests.cc
+++ b/video/end_to_end_tests/bandwidth_tests.cc
@@ -18,6 +18,7 @@
 #include "call/simulated_network.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp.h"
 #include "rtc_base/rate_limiter.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/sleep.h"
 #include "test/call_test.h"
 #include "test/fake_encoder.h"
@@ -328,7 +329,7 @@
       ASSERT_TRUE(Wait())
           << "Timed out while waiting for encoder SetRates() call.";
 
-      task_queue_->SendTask([this]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() {
         WaitForEncoderTargetBitrateMatchStats();
         send_stream_->Stop();
         WaitForStatsReportZeroTargetBitrate();
diff --git a/video/end_to_end_tests/call_operation_tests.cc b/video/end_to_end_tests/call_operation_tests.cc
index 85cbaa8b..923eebd 100644
--- a/video/end_to_end_tests/call_operation_tests.cc
+++ b/video/end_to_end_tests/call_operation_tests.cc
@@ -12,6 +12,7 @@
 #include "api/test/simulated_network.h"
 #include "call/fake_network_pipe.h"
 #include "call/simulated_network.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/sleep.h"
 #include "test/call_test.h"
 #include "test/field_trial.h"
@@ -93,54 +94,57 @@
   std::unique_ptr<test::DirectTransport> sender_transport;
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
-  task_queue_.SendTask([this, &renderer, &frame_forwarder, &sender_transport,
-                        &receiver_transport]() {
-    CreateCalls();
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
+      [this, &renderer, &frame_forwarder, &sender_transport,
+       &receiver_transport]() {
+        CreateCalls();
 
-    sender_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
-        sender_call_.get(), payload_type_map_);
-    receiver_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
-        receiver_call_.get(), payload_type_map_);
-    sender_transport->SetReceiver(receiver_call_->Receiver());
-    receiver_transport->SetReceiver(sender_call_->Receiver());
+        sender_transport = std::make_unique<test::DirectTransport>(
+            &task_queue_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
+                                               BuiltInNetworkBehaviorConfig())),
+            sender_call_.get(), payload_type_map_);
+        receiver_transport = std::make_unique<test::DirectTransport>(
+            &task_queue_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
+                                               BuiltInNetworkBehaviorConfig())),
+            receiver_call_.get(), payload_type_map_);
+        sender_transport->SetReceiver(receiver_call_->Receiver());
+        receiver_transport->SetReceiver(sender_call_->Receiver());
 
-    CreateSendConfig(1, 0, 0, sender_transport.get());
-    CreateMatchingReceiveConfigs(receiver_transport.get());
+        CreateSendConfig(1, 0, 0, sender_transport.get());
+        CreateMatchingReceiveConfigs(receiver_transport.get());
 
-    video_receive_configs_[0].renderer = &renderer;
+        video_receive_configs_[0].renderer = &renderer;
 
-    CreateVideoStreams();
-    Start();
+        CreateVideoStreams();
+        Start();
 
-    // Create frames that are smaller than the send width/height, this is done
-    // to check that the callbacks are done after processing video.
-    std::unique_ptr<test::FrameGenerator> frame_generator(
-        test::FrameGenerator::CreateSquareGenerator(
-            kWidth, kHeight, absl::nullopt, absl::nullopt));
-    GetVideoSendStream()->SetSource(&frame_forwarder,
-                                    DegradationPreference::MAINTAIN_FRAMERATE);
+        // Create frames that are smaller than the send width/height, this is
+        // done to check that the callbacks are done after processing video.
+        std::unique_ptr<test::FrameGenerator> frame_generator(
+            test::FrameGenerator::CreateSquareGenerator(
+                kWidth, kHeight, absl::nullopt, absl::nullopt));
+        GetVideoSendStream()->SetSource(
+            &frame_forwarder, DegradationPreference::MAINTAIN_FRAMERATE);
 
-    frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
-  });
+        frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
+      });
 
   EXPECT_TRUE(renderer.Wait())
       << "Timed out while waiting for the frame to render.";
 
-  task_queue_.SendTask([this, &sender_transport, &receiver_transport]() {
-    Stop();
-    DestroyStreams();
-    sender_transport.reset();
-    receiver_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &sender_transport, &receiver_transport]() {
+             Stop();
+             DestroyStreams();
+             sender_transport.reset();
+             receiver_transport.reset();
+             DestroyCalls();
+           });
 }
 
 TEST_F(CallOperationEndToEndTest, TransmitsFirstFrame) {
@@ -159,49 +163,52 @@
   std::unique_ptr<test::DirectTransport> sender_transport;
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
-  task_queue_.SendTask([this, &renderer, &frame_generator, &frame_forwarder,
-                        &sender_transport, &receiver_transport]() {
-    CreateCalls();
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
+      [this, &renderer, &frame_generator, &frame_forwarder, &sender_transport,
+       &receiver_transport]() {
+        CreateCalls();
 
-    sender_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
-        sender_call_.get(), payload_type_map_);
-    receiver_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
-        receiver_call_.get(), payload_type_map_);
-    sender_transport->SetReceiver(receiver_call_->Receiver());
-    receiver_transport->SetReceiver(sender_call_->Receiver());
+        sender_transport = std::make_unique<test::DirectTransport>(
+            &task_queue_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
+                                               BuiltInNetworkBehaviorConfig())),
+            sender_call_.get(), payload_type_map_);
+        receiver_transport = std::make_unique<test::DirectTransport>(
+            &task_queue_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
+                                               BuiltInNetworkBehaviorConfig())),
+            receiver_call_.get(), payload_type_map_);
+        sender_transport->SetReceiver(receiver_call_->Receiver());
+        receiver_transport->SetReceiver(sender_call_->Receiver());
 
-    CreateSendConfig(1, 0, 0, sender_transport.get());
-    CreateMatchingReceiveConfigs(receiver_transport.get());
-    video_receive_configs_[0].renderer = &renderer;
+        CreateSendConfig(1, 0, 0, sender_transport.get());
+        CreateMatchingReceiveConfigs(receiver_transport.get());
+        video_receive_configs_[0].renderer = &renderer;
 
-    CreateVideoStreams();
-    Start();
+        CreateVideoStreams();
+        Start();
 
-    frame_generator = test::FrameGenerator::CreateSquareGenerator(
-        kDefaultWidth, kDefaultHeight, absl::nullopt, absl::nullopt);
-    GetVideoSendStream()->SetSource(&frame_forwarder,
-                                    DegradationPreference::MAINTAIN_FRAMERATE);
-    frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
-  });
+        frame_generator = test::FrameGenerator::CreateSquareGenerator(
+            kDefaultWidth, kDefaultHeight, absl::nullopt, absl::nullopt);
+        GetVideoSendStream()->SetSource(
+            &frame_forwarder, DegradationPreference::MAINTAIN_FRAMERATE);
+        frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
+      });
 
   EXPECT_TRUE(renderer.Wait())
       << "Timed out while waiting for the frame to render.";
 
-  task_queue_.SendTask([this, &sender_transport, &receiver_transport]() {
-    Stop();
-    DestroyStreams();
-    sender_transport.reset();
-    receiver_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &sender_transport, &receiver_transport]() {
+             Stop();
+             DestroyStreams();
+             sender_transport.reset();
+             receiver_transport.reset();
+             DestroyCalls();
+           });
 }
 
 }  // namespace webrtc
diff --git a/video/end_to_end_tests/multi_codec_receive_tests.cc b/video/end_to_end_tests/multi_codec_receive_tests.cc
index b809751..487034e 100644
--- a/video/end_to_end_tests/multi_codec_receive_tests.cc
+++ b/video/end_to_end_tests/multi_codec_receive_tests.cc
@@ -18,6 +18,7 @@
 #include "modules/video_coding/codecs/h264/include/h264.h"
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
@@ -127,7 +128,7 @@
 class MultiCodecReceiveTest : public test::CallTest {
  public:
   MultiCodecReceiveTest() {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       CreateCalls();
 
       send_transport_.reset(new test::PacketTransport(
@@ -149,7 +150,7 @@
   }
 
   virtual ~MultiCodecReceiveTest() {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       send_transport_.reset();
       receive_transport_.reset();
       DestroyCalls();
@@ -208,7 +209,7 @@
   EXPECT_TRUE(!configs.empty());
 
   // Create and start call.
-  task_queue_.SendTask([this, &configs]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, &configs]() {
     CreateSendConfig(1, 0, 0, send_transport_.get());
     ConfigureEncoder(configs[0]);
     CreateMatchingReceiveConfigs(receive_transport_.get());
@@ -224,7 +225,7 @@
 
   for (size_t i = 1; i < configs.size(); ++i) {
     // Recreate VideoSendStream with new config (codec, temporal layers).
-    task_queue_.SendTask([this, i, &configs]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this, i, &configs]() {
       DestroyVideoSendStreams();
       observer_.Reset(PayloadNameToPayloadType(configs[i].payload_name));
 
@@ -237,7 +238,7 @@
     EXPECT_TRUE(observer_.Wait()) << "Timed out waiting for frames.";
   }
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     Stop();
     DestroyStreams();
   });
diff --git a/video/end_to_end_tests/multi_stream_tester.cc b/video/end_to_end_tests/multi_stream_tester.cc
index a515b0f..33f67e6 100644
--- a/video/end_to_end_tests/multi_stream_tester.cc
+++ b/video/end_to_end_tests/multi_stream_tester.cc
@@ -25,6 +25,7 @@
 #include "call/simulated_network.h"
 #include "media/engine/internal_decoder_factory.h"
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 #include "test/encoder_settings.h"
 
@@ -64,7 +65,7 @@
       CreateBuiltinVideoBitrateAllocatorFactory();
   InternalDecoderFactory decoder_factory;
 
-  task_queue_->SendTask([&]() {
+  SendTask(RTC_FROM_HERE, task_queue_, [&]() {
     sender_call = absl::WrapUnique(Call::Create(config));
     receiver_call = absl::WrapUnique(Call::Create(config));
     sender_transport = CreateSendTransport(task_queue_, sender_call.get());
@@ -125,7 +126,7 @@
 
   Wait();
 
-  task_queue_->SendTask([&]() {
+  SendTask(RTC_FROM_HERE, task_queue_, [&]() {
     for (size_t i = 0; i < kNumStreams; ++i) {
       frame_generators[i]->Stop();
       sender_call->DestroyVideoSendStream(send_streams[i]);
diff --git a/video/end_to_end_tests/network_state_tests.cc b/video/end_to_end_tests/network_state_tests.cc
index df7c980..a81aa5f 100644
--- a/video/end_to_end_tests/network_state_tests.cc
+++ b/video/end_to_end_tests/network_state_tests.cc
@@ -14,6 +14,7 @@
 #include "api/video_codecs/video_encoder.h"
 #include "call/fake_network_pipe.h"
 #include "call/simulated_network.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/sleep.h"
 #include "test/call_test.h"
 #include "test/fake_encoder.h"
@@ -87,23 +88,25 @@
     Transport* transport) {
   test::VideoEncoderProxyFactory encoder_factory(encoder);
 
-  task_queue_.SendTask([this, network_to_bring_up, &encoder_factory,
-                        transport]() {
-    CreateSenderCall(Call::Config(send_event_log_.get()));
-    sender_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, network_to_bring_up, &encoder_factory, transport]() {
+             CreateSenderCall(Call::Config(send_event_log_.get()));
+             sender_call_->SignalChannelNetworkState(network_to_bring_up,
+                                                     kNetworkUp);
 
-    CreateSendConfig(1, 0, 0, transport);
-    GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
-    CreateVideoStreams();
-    CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
-                                 kDefaultHeight);
+             CreateSendConfig(1, 0, 0, transport);
+             GetVideoSendConfig()->encoder_settings.encoder_factory =
+                 &encoder_factory;
+             CreateVideoStreams();
+             CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+                                          kDefaultHeight);
 
-    Start();
-  });
+             Start();
+           });
 
   SleepMs(kSilenceTimeoutMs);
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     Stop();
     DestroyStreams();
     DestroyCalls();
@@ -115,28 +118,30 @@
     Transport* transport) {
   std::unique_ptr<test::DirectTransport> sender_transport;
 
-  task_queue_.SendTask([this, &sender_transport, network_to_bring_up,
-                        transport]() {
-    CreateCalls();
-    receiver_call_->SignalChannelNetworkState(network_to_bring_up, kNetworkUp);
-    sender_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(BuiltInNetworkBehaviorConfig())),
-        sender_call_.get(), payload_type_map_);
-    sender_transport->SetReceiver(receiver_call_->Receiver());
-    CreateSendConfig(1, 0, 0, sender_transport.get());
-    CreateMatchingReceiveConfigs(transport);
-    CreateVideoStreams();
-    CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
-                                 kDefaultHeight);
-    Start();
-  });
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
+      [this, &sender_transport, network_to_bring_up, transport]() {
+        CreateCalls();
+        receiver_call_->SignalChannelNetworkState(network_to_bring_up,
+                                                  kNetworkUp);
+        sender_transport = std::make_unique<test::DirectTransport>(
+            &task_queue_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
+                                               BuiltInNetworkBehaviorConfig())),
+            sender_call_.get(), payload_type_map_);
+        sender_transport->SetReceiver(receiver_call_->Receiver());
+        CreateSendConfig(1, 0, 0, sender_transport.get());
+        CreateMatchingReceiveConfigs(transport);
+        CreateVideoStreams();
+        CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+                                     kDefaultHeight);
+        Start();
+      });
 
   SleepMs(kSilenceTimeoutMs);
 
-  task_queue_.SendTask([this, &sender_transport]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, &sender_transport]() {
     Stop();
     DestroyStreams();
     sender_transport.reset();
@@ -217,7 +222,7 @@
       EXPECT_TRUE(encoded_frames_.Wait(kDefaultTimeoutMs))
           << "No frames received by the encoder.";
 
-      task_queue_->SendTask([this]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() {
         // Wait for packets from both sender/receiver.
         WaitForPacketsOrSilence(false, false);
 
diff --git a/video/end_to_end_tests/probing_tests.cc b/video/end_to_end_tests/probing_tests.cc
index 02e06d1..abdff44 100644
--- a/video/end_to_end_tests/probing_tests.cc
+++ b/video/end_to_end_tests/probing_tests.cc
@@ -14,6 +14,7 @@
 #include "api/test/simulated_network.h"
 #include "call/fake_network_pipe.h"
 #include "call/simulated_network.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 #include "test/field_trial.h"
 #include "test/gtest.h"
@@ -82,8 +83,8 @@
           break;
 
         Call::Stats stats;
-        task_queue_->SendTask(
-            [this, &stats]() { stats = sender_call_->GetStats(); });
+        SendTask(RTC_FROM_HERE, task_queue_,
+                 [this, &stats]() { stats = sender_call_->GetStats(); });
         // Initial probing is done with a x3 and x6 multiplier of the start
         // bitrate, so a x4 multiplier is a high enough threshold.
         if (stats.send_bandwidth_bps > 4 * 300000) {
@@ -136,15 +137,15 @@
           break;
 
         Call::Stats stats;
-        task_queue_->SendTask(
-            [this, &stats]() { stats = sender_call_->GetStats(); });
+        SendTask(RTC_FROM_HERE, task_queue_,
+                 [this, &stats]() { stats = sender_call_->GetStats(); });
 
         switch (state_) {
           case 0:
             if (stats.send_bandwidth_bps > 5 * 300000) {
               BitrateConstraints bitrate_config;
               bitrate_config.max_bitrate_bps = 100000;
-              task_queue_->SendTask([this, &bitrate_config]() {
+              SendTask(RTC_FROM_HERE, task_queue_, [this, &bitrate_config]() {
                 sender_call_->GetTransportControllerSend()
                     ->SetSdpBitrateParameters(bitrate_config);
               });
@@ -155,7 +156,7 @@
             if (stats.send_bandwidth_bps < 110000) {
               BitrateConstraints bitrate_config;
               bitrate_config.max_bitrate_bps = 2500000;
-              task_queue_->SendTask([this, &bitrate_config]() {
+              SendTask(RTC_FROM_HERE, task_queue_, [this, &bitrate_config]() {
                 sender_call_->GetTransportControllerSend()
                     ->SetSdpBitrateParameters(bitrate_config);
               });
@@ -243,8 +244,8 @@
           break;
 
         Call::Stats stats;
-        task_queue_->SendTask(
-            [this, &stats]() { stats = sender_call_->GetStats(); });
+        SendTask(RTC_FROM_HERE, task_queue_,
+                 [this, &stats]() { stats = sender_call_->GetStats(); });
 
         switch (state_) {
           case 0:
@@ -284,7 +285,7 @@
               // should trigger an allocation probe and fast ramp-up.
               encoder_config_->max_bitrate_bps = 2000000;
               encoder_config_->simulcast_layers[0].max_bitrate_bps = 1200000;
-              task_queue_->SendTask([this]() {
+              SendTask(RTC_FROM_HERE, task_queue_, [this]() {
                 send_stream_->ReconfigureVideoEncoder(encoder_config_->Copy());
               });
               max_allocation_change_time_ms = clock_->TimeInMilliseconds();
diff --git a/video/end_to_end_tests/retransmission_tests.cc b/video/end_to_end_tests/retransmission_tests.cc
index b3f905b..266b719 100644
--- a/video/end_to_end_tests/retransmission_tests.cc
+++ b/video/end_to_end_tests/retransmission_tests.cc
@@ -17,6 +17,7 @@
 #include "call/fake_network_pipe.h"
 #include "call/simulated_network.h"
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/sleep.h"
 #include "test/call_test.h"
 #include "test/field_trial.h"
@@ -225,7 +226,7 @@
         SleepMs(100);
       }
       ASSERT_TRUE(frame_decoded);
-      task_queue_->SendTask([this]() { send_stream_->Stop(); });
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() { send_stream_->Stop(); });
       SleepMs(10000);
       ASSERT_EQ(
           1U, receive_stream_->GetStats().rtcp_packet_type_counts.pli_packets);
diff --git a/video/end_to_end_tests/rtp_rtcp_tests.cc b/video/end_to_end_tests/rtp_rtcp_tests.cc
index bc92b25..baea1e0 100644
--- a/video/end_to_end_tests/rtp_rtcp_tests.cc
+++ b/video/end_to_end_tests/rtp_rtcp_tests.cc
@@ -15,6 +15,7 @@
 #include "call/simulated_network.h"
 #include "modules/include/module_common_types_public.h"
 #include "modules/video_coding/codecs/vp8/include/vp8.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 #include "test/gtest.h"
 #include "test/rtcp_packet_parser.h"
@@ -281,48 +282,52 @@
 
   VideoEncoderConfig one_stream;
 
-  task_queue_.SendTask([this, &observer, &send_transport, &receive_transport,
-                        &one_stream, use_rtx]() {
-    CreateCalls();
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
+      [this, &observer, &send_transport, &receive_transport, &one_stream,
+       use_rtx]() {
+        CreateCalls();
 
-    send_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, sender_call_.get(), &observer,
-        test::PacketTransport::kSender, payload_type_map_,
-        std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
-                                          std::make_unique<SimulatedNetwork>(
-                                              BuiltInNetworkBehaviorConfig())));
-    receive_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, nullptr, &observer, test::PacketTransport::kReceiver,
-        payload_type_map_,
-        std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
-                                          std::make_unique<SimulatedNetwork>(
-                                              BuiltInNetworkBehaviorConfig())));
-    send_transport->SetReceiver(receiver_call_->Receiver());
-    receive_transport->SetReceiver(sender_call_->Receiver());
+        send_transport = std::make_unique<test::PacketTransport>(
+            &task_queue_, sender_call_.get(), &observer,
+            test::PacketTransport::kSender, payload_type_map_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(),
+                std::make_unique<SimulatedNetwork>(
+                    BuiltInNetworkBehaviorConfig())));
+        receive_transport = std::make_unique<test::PacketTransport>(
+            &task_queue_, nullptr, &observer, test::PacketTransport::kReceiver,
+            payload_type_map_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(),
+                std::make_unique<SimulatedNetwork>(
+                    BuiltInNetworkBehaviorConfig())));
+        send_transport->SetReceiver(receiver_call_->Receiver());
+        receive_transport->SetReceiver(sender_call_->Receiver());
 
-    CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport.get());
+        CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport.get());
 
-    if (use_rtx) {
-      for (size_t i = 0; i < kNumSimulcastStreams; ++i) {
-        GetVideoSendConfig()->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]);
-      }
-      GetVideoSendConfig()->rtp.rtx.payload_type = kSendRtxPayloadType;
-    }
+        if (use_rtx) {
+          for (size_t i = 0; i < kNumSimulcastStreams; ++i) {
+            GetVideoSendConfig()->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]);
+          }
+          GetVideoSendConfig()->rtp.rtx.payload_type = kSendRtxPayloadType;
+        }
 
-    GetVideoEncoderConfig()->video_stream_factory =
-        new rtc::RefCountedObject<VideoStreamFactory>();
-    // Use the same total bitrates when sending a single stream to avoid
-    // lowering the bitrate estimate and requiring a subsequent rampup.
-    one_stream = GetVideoEncoderConfig()->Copy();
-    // one_stream.streams.resize(1);
-    one_stream.number_of_streams = 1;
-    CreateMatchingReceiveConfigs(receive_transport.get());
+        GetVideoEncoderConfig()->video_stream_factory =
+            new rtc::RefCountedObject<VideoStreamFactory>();
+        // Use the same total bitrates when sending a single stream to avoid
+        // lowering the bitrate estimate and requiring a subsequent rampup.
+        one_stream = GetVideoEncoderConfig()->Copy();
+        // one_stream.streams.resize(1);
+        one_stream.number_of_streams = 1;
+        CreateMatchingReceiveConfigs(receive_transport.get());
 
-    CreateVideoStreams();
-    CreateFrameGeneratorCapturer(30, 1280, 720);
+        CreateVideoStreams();
+        CreateFrameGeneratorCapturer(30, 1280, 720);
 
-    Start();
-  });
+        Start();
+      });
 
   EXPECT_TRUE(observer.Wait())
       << "Timed out waiting for all SSRCs to send packets.";
@@ -330,7 +335,7 @@
   // Test stream resetting more than once to make sure that the state doesn't
   // get set once (this could be due to using std::map::insert for instance).
   for (size_t i = 0; i < 3; ++i) {
-    task_queue_.SendTask([&]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
       DestroyVideoSendStreams();
 
       // Re-create VideoSendStream with only one stream.
@@ -352,7 +357,7 @@
     EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
 
     // Reconfigure back to use all streams.
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
@@ -361,14 +366,14 @@
         << "Timed out waiting for all SSRCs to send packets.";
 
     // Reconfigure down to one stream.
-    task_queue_.SendTask([this, &one_stream]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this, &one_stream]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(one_stream.Copy());
     });
     observer.ResetExpectedSsrcs(1);
     EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
 
     // Reconfigure back to use all streams.
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
@@ -377,13 +382,14 @@
         << "Timed out waiting for all SSRCs to send packets.";
   }
 
-  task_queue_.SendTask([this, &send_transport, &receive_transport]() {
-    Stop();
-    DestroyStreams();
-    send_transport.reset();
-    receive_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &send_transport, &receive_transport]() {
+             Stop();
+             DestroyStreams();
+             send_transport.reset();
+             receive_transport.reset();
+             DestroyCalls();
+           });
 }
 
 TEST_F(RtpRtcpEndToEndTest, RestartingSendStreamPreservesRtpState) {
@@ -477,7 +483,7 @@
   test::FunctionVideoEncoderFactory encoder_factory(
       []() { return VP8Encoder::Create(); });
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     CreateCalls();
 
     BuiltInNetworkBehaviorConfig lossy_delayed_link;
@@ -555,7 +561,7 @@
   // Initial test.
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
-  task_queue_.SendTask([this, &observer]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, &observer]() {
     // Ensure monotonicity when the VideoSendStream is restarted.
     Stop();
     observer.ResetPacketCount();
@@ -564,7 +570,7 @@
 
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
-  task_queue_.SendTask([this, &observer]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, &observer]() {
     // Ensure monotonicity when the VideoSendStream is recreated.
     DestroyVideoSendStreams();
     observer.ResetPacketCount();
@@ -576,12 +582,13 @@
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
   // Cleanup.
-  task_queue_.SendTask([this, &send_transport, &receive_transport]() {
-    Stop();
-    DestroyStreams();
-    send_transport.reset();
-    receive_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &send_transport, &receive_transport]() {
+             Stop();
+             DestroyStreams();
+             send_transport.reset();
+             receive_transport.reset();
+             DestroyCalls();
+           });
 }
 }  // namespace webrtc
diff --git a/video/end_to_end_tests/ssrc_tests.cc b/video/end_to_end_tests/ssrc_tests.cc
index 07fafe6..47cb930 100644
--- a/video/end_to_end_tests/ssrc_tests.cc
+++ b/video/end_to_end_tests/ssrc_tests.cc
@@ -13,6 +13,7 @@
 #include "api/test/simulated_network.h"
 #include "call/fake_network_pipe.h"
 #include "call/simulated_network.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 #include "test/gtest.h"
 #include "test/rtcp_packet_parser.h"
@@ -78,7 +79,8 @@
   std::unique_ptr<test::DirectTransport> receive_transport;
   std::unique_ptr<PacketInputObserver> input_observer;
 
-  task_queue_.SendTask(
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
       [this, &send_transport, &receive_transport, &input_observer]() {
         CreateCalls();
 
@@ -114,13 +116,14 @@
   // Wait() waits for a received packet.
   EXPECT_TRUE(input_observer->Wait());
 
-  task_queue_.SendTask([this, &send_transport, &receive_transport]() {
-    Stop();
-    DestroyStreams();
-    send_transport.reset();
-    receive_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &send_transport, &receive_transport]() {
+             Stop();
+             DestroyStreams();
+             send_transport.reset();
+             receive_transport.reset();
+             DestroyCalls();
+           });
 }
 
 void SsrcEndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
diff --git a/video/end_to_end_tests/stats_tests.cc b/video/end_to_end_tests/stats_tests.cc
index 73f94b2..aeef144 100644
--- a/video/end_to_end_tests/stats_tests.cc
+++ b/video/end_to_end_tests/stats_tests.cc
@@ -19,6 +19,7 @@
 #include "modules/rtp_rtcp/source/rtp_utility.h"
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "rtc_base/strings/string_builder.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "system_wrappers/include/metrics.h"
 #include "system_wrappers/include/sleep.h"
 #include "test/call_test.h"
@@ -526,55 +527,60 @@
 
   VideoEncoderConfig encoder_config_with_screenshare;
 
-  task_queue_.SendTask([this, &test, &send_config, &recv_config,
-                        &encoder_config_with_screenshare]() {
-    CreateSenderCall(send_config);
-    CreateReceiverCall(recv_config);
+  SendTask(
+      RTC_FROM_HERE, &task_queue_,
+      [this, &test, &send_config, &recv_config,
+       &encoder_config_with_screenshare]() {
+        CreateSenderCall(send_config);
+        CreateReceiverCall(recv_config);
 
-    receive_transport_ = test.CreateReceiveTransport(&task_queue_);
-    send_transport_ =
-        test.CreateSendTransport(&task_queue_, sender_call_.get());
-    send_transport_->SetReceiver(receiver_call_->Receiver());
-    receive_transport_->SetReceiver(sender_call_->Receiver());
+        receive_transport_ = test.CreateReceiveTransport(&task_queue_);
+        send_transport_ =
+            test.CreateSendTransport(&task_queue_, sender_call_.get());
+        send_transport_->SetReceiver(receiver_call_->Receiver());
+        receive_transport_->SetReceiver(sender_call_->Receiver());
 
-    receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
-    CreateSendConfig(1, 0, 0, send_transport_.get());
-    CreateMatchingReceiveConfigs(receive_transport_.get());
+        receiver_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
+        CreateSendConfig(1, 0, 0, send_transport_.get());
+        CreateMatchingReceiveConfigs(receive_transport_.get());
 
-    // Modify send and receive configs.
-    GetVideoSendConfig()->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
-    video_receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
-    video_receive_configs_[0].renderer = &test;
-    // RTT needed for RemoteNtpTimeEstimator for the receive stream.
-    video_receive_configs_[0].rtp.rtcp_xr.receiver_reference_time_report = true;
-    // Start with realtime video.
-    GetVideoEncoderConfig()->content_type =
-        VideoEncoderConfig::ContentType::kRealtimeVideo;
-    // Second encoder config for the second part of the test uses screenshare
-    encoder_config_with_screenshare = GetVideoEncoderConfig()->Copy();
-    encoder_config_with_screenshare.content_type =
-        VideoEncoderConfig::ContentType::kScreen;
+        // Modify send and receive configs.
+        GetVideoSendConfig()->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
+        video_receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
+        video_receive_configs_[0].renderer = &test;
+        // RTT needed for RemoteNtpTimeEstimator for the receive stream.
+        video_receive_configs_[0].rtp.rtcp_xr.receiver_reference_time_report =
+            true;
+        // Start with realtime video.
+        GetVideoEncoderConfig()->content_type =
+            VideoEncoderConfig::ContentType::kRealtimeVideo;
+        // Second encoder config for the second part of the test uses
+        // screenshare
+        encoder_config_with_screenshare = GetVideoEncoderConfig()->Copy();
+        encoder_config_with_screenshare.content_type =
+            VideoEncoderConfig::ContentType::kScreen;
 
-    CreateVideoStreams();
-    CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
-                                 kDefaultHeight);
-    Start();
-  });
+        CreateVideoStreams();
+        CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+                                     kDefaultHeight);
+        Start();
+      });
 
   test.PerformTest();
 
   // Replace old send stream.
-  task_queue_.SendTask([this, &encoder_config_with_screenshare]() {
-    DestroyVideoSendStreams();
-    CreateVideoSendStream(encoder_config_with_screenshare);
-    SetVideoDegradation(DegradationPreference::BALANCED);
-    GetVideoSendStream()->Start();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &encoder_config_with_screenshare]() {
+             DestroyVideoSendStreams();
+             CreateVideoSendStream(encoder_config_with_screenshare);
+             SetVideoDegradation(DegradationPreference::BALANCED);
+             GetVideoSendStream()->Start();
+           });
 
   // Continue to run test but now with screenshare.
   test.PerformTest();
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     Stop();
     DestroyStreams();
     send_transport_.reset();
@@ -717,40 +723,41 @@
   std::unique_ptr<test::DirectTransport> sender_transport;
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
-  task_queue_.SendTask([this, &sender_transport, &receiver_transport]() {
-    BuiltInNetworkBehaviorConfig config;
-    config.queue_delay_ms = kSendDelayMs;
-    CreateCalls();
-    sender_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(config)),
-        sender_call_.get(), payload_type_map_);
-    config.queue_delay_ms = kReceiveDelayMs;
-    receiver_transport = std::make_unique<test::DirectTransport>(
-        &task_queue_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(),
-            std::make_unique<SimulatedNetwork>(config)),
-        receiver_call_.get(), payload_type_map_);
-    sender_transport->SetReceiver(receiver_call_->Receiver());
-    receiver_transport->SetReceiver(sender_call_->Receiver());
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &sender_transport, &receiver_transport]() {
+             BuiltInNetworkBehaviorConfig config;
+             config.queue_delay_ms = kSendDelayMs;
+             CreateCalls();
+             sender_transport = std::make_unique<test::DirectTransport>(
+                 &task_queue_,
+                 std::make_unique<FakeNetworkPipe>(
+                     Clock::GetRealTimeClock(),
+                     std::make_unique<SimulatedNetwork>(config)),
+                 sender_call_.get(), payload_type_map_);
+             config.queue_delay_ms = kReceiveDelayMs;
+             receiver_transport = std::make_unique<test::DirectTransport>(
+                 &task_queue_,
+                 std::make_unique<FakeNetworkPipe>(
+                     Clock::GetRealTimeClock(),
+                     std::make_unique<SimulatedNetwork>(config)),
+                 receiver_call_.get(), payload_type_map_);
+             sender_transport->SetReceiver(receiver_call_->Receiver());
+             receiver_transport->SetReceiver(sender_call_->Receiver());
 
-    CreateSendConfig(1, 0, 0, sender_transport.get());
-    CreateMatchingReceiveConfigs(receiver_transport.get());
+             CreateSendConfig(1, 0, 0, sender_transport.get());
+             CreateMatchingReceiveConfigs(receiver_transport.get());
 
-    CreateVideoStreams();
-    CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
-                                 kDefaultHeight);
-    Start();
-  });
+             CreateVideoStreams();
+             CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+                                          kDefaultHeight);
+             Start();
+           });
 
   int64_t start_time_ms = clock_->TimeInMilliseconds();
   while (true) {
     Call::Stats stats;
-    task_queue_.SendTask(
-        [this, &stats]() { stats = sender_call_->GetStats(); });
+    SendTask(RTC_FROM_HERE, &task_queue_,
+             [this, &stats]() { stats = sender_call_->GetStats(); });
     ASSERT_GE(start_time_ms + kDefaultTimeoutMs, clock_->TimeInMilliseconds())
         << "No RTT stats before timeout!";
     if (stats.rtt_ms != -1) {
@@ -763,12 +770,13 @@
     SleepMs(10);
   }
 
-  task_queue_.SendTask([this, &sender_transport, &receiver_transport]() {
-    Stop();
-    DestroyStreams();
-    sender_transport.reset();
-    receiver_transport.reset();
-    DestroyCalls();
-  });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &sender_transport, &receiver_transport]() {
+             Stop();
+             DestroyStreams();
+             sender_transport.reset();
+             receiver_transport.reset();
+             DestroyCalls();
+           });
 }
 }  // namespace webrtc
diff --git a/video/picture_id_tests.cc b/video/picture_id_tests.cc
index e76edc9..6fca578 100644
--- a/video/picture_id_tests.cc
+++ b/video/picture_id_tests.cc
@@ -21,6 +21,7 @@
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/numerics/sequence_number_util.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/call_test.h"
 
 namespace webrtc {
@@ -222,7 +223,7 @@
   PictureIdTest() : num_temporal_layers_(GetParam()) {}
 
   virtual ~PictureIdTest() {
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       send_transport_.reset();
       receive_transport_.reset();
       DestroyCalls();
@@ -251,23 +252,26 @@
   observer_.reset(
       new PictureIdObserver(PayloadStringToCodecType(payload_name)));
 
-  task_queue_.SendTask([this, encoder_factory, payload_name]() {
-    CreateCalls();
+  SendTask(
+      RTC_FROM_HERE, &task_queue_, [this, encoder_factory, payload_name]() {
+        CreateCalls();
 
-    send_transport_.reset(new test::PacketTransport(
-        &task_queue_, sender_call_.get(), observer_.get(),
-        test::PacketTransport::kSender, payload_type_map_,
-        std::make_unique<FakeNetworkPipe>(
-            Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
-                                           BuiltInNetworkBehaviorConfig()))));
+        send_transport_.reset(new test::PacketTransport(
+            &task_queue_, sender_call_.get(), observer_.get(),
+            test::PacketTransport::kSender, payload_type_map_,
+            std::make_unique<FakeNetworkPipe>(
+                Clock::GetRealTimeClock(),
+                std::make_unique<SimulatedNetwork>(
+                    BuiltInNetworkBehaviorConfig()))));
 
-    CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport_.get());
-    GetVideoSendConfig()->encoder_settings.encoder_factory = encoder_factory;
-    GetVideoSendConfig()->rtp.payload_name = payload_name;
-    GetVideoEncoderConfig()->codec_type =
-        PayloadStringToCodecType(payload_name);
-    SetVideoEncoderConfig(/* number_of_streams */ 1);
-  });
+        CreateSendConfig(kNumSimulcastStreams, 0, 0, send_transport_.get());
+        GetVideoSendConfig()->encoder_settings.encoder_factory =
+            encoder_factory;
+        GetVideoSendConfig()->rtp.payload_name = payload_name;
+        GetVideoEncoderConfig()->codec_type =
+            PayloadStringToCodecType(payload_name);
+        SetVideoEncoderConfig(/* number_of_streams */ 1);
+      });
 }
 
 void PictureIdTest::SetVideoEncoderConfig(int num_streams) {
@@ -294,7 +298,7 @@
 
 void PictureIdTest::TestPictureIdContinuousAfterReconfigure(
     const std::vector<int>& ssrc_counts) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     CreateVideoStreams();
     CreateFrameGeneratorCapturer(kFrameRate, kFrameMaxWidth, kFrameMaxHeight);
 
@@ -312,14 +316,14 @@
     observer_->SetExpectedSsrcs(ssrc_count);
     observer_->ResetObservedSsrcs();
     // Make sure the picture_id sequence is continuous on reinit and recreate.
-    task_queue_.SendTask([this]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
     EXPECT_TRUE(observer_->Wait()) << "Timed out waiting for packets.";
   }
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     Stop();
     DestroyStreams();
   });
@@ -327,7 +331,7 @@
 
 void PictureIdTest::TestPictureIdIncreaseAfterRecreateStreams(
     const std::vector<int>& ssrc_counts) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     CreateVideoStreams();
     CreateFrameGeneratorCapturer(kFrameRate, kFrameMaxWidth, kFrameMaxHeight);
 
@@ -342,7 +346,7 @@
   // with it, therefore it is expected that some frames might be lost.
   observer_->SetMaxExpectedPictureIdGap(kMaxFramesLost);
   for (int ssrc_count : ssrc_counts) {
-    task_queue_.SendTask([this, &ssrc_count]() {
+    SendTask(RTC_FROM_HERE, &task_queue_, [this, &ssrc_count]() {
       DestroyVideoSendStreams();
 
       SetVideoEncoderConfig(ssrc_count);
@@ -357,7 +361,7 @@
     EXPECT_TRUE(observer_->Wait()) << "Timed out waiting for packets.";
   }
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     Stop();
     DestroyStreams();
   });
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index be1d15a..47f407d 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -41,6 +41,7 @@
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
 #include "modules/video_coding/utility/ivf_file_writer.h"
 #include "rtc_base/strings/string_builder.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "test/platform_video_capturer.h"
 #include "test/run_loop.h"
 #include "test/testsupport/file_utils.h"
@@ -1254,19 +1255,20 @@
     recv_event_log_ = std::make_unique<RtcEventLogNull>();
   }
 
-  task_queue_.SendTask([this, &params, &send_transport, &recv_transport]() {
-    Call::Config send_call_config(send_event_log_.get());
-    Call::Config recv_call_config(recv_event_log_.get());
-    send_call_config.bitrate_config = params.call.call_bitrate_config;
-    recv_call_config.bitrate_config = params.call.call_bitrate_config;
-    if (params_.audio.enabled)
-      InitializeAudioDevice(&send_call_config, &recv_call_config,
-                            params_.audio.use_real_adm);
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &params, &send_transport, &recv_transport]() {
+             Call::Config send_call_config(send_event_log_.get());
+             Call::Config recv_call_config(recv_event_log_.get());
+             send_call_config.bitrate_config = params.call.call_bitrate_config;
+             recv_call_config.bitrate_config = params.call.call_bitrate_config;
+             if (params_.audio.enabled)
+               InitializeAudioDevice(&send_call_config, &recv_call_config,
+                                     params_.audio.use_real_adm);
 
-    CreateCalls(send_call_config, recv_call_config);
-    send_transport = CreateSendTransport();
-    recv_transport = CreateReceiveTransport();
-  });
+             CreateCalls(send_call_config, recv_call_config);
+             send_transport = CreateSendTransport();
+             recv_transport = CreateReceiveTransport();
+           });
 
   std::string graph_title = params_.analyzer.graph_title;
   if (graph_title.empty())
@@ -1286,7 +1288,7 @@
       is_quick_test_enabled, clock_, params_.logging.rtp_dump_name,
       &task_queue_);
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     analyzer_->SetCall(sender_call_.get());
     analyzer_->SetReceiver(receiver_call_->Receiver());
     send_transport->SetReceiver(analyzer_.get());
@@ -1332,7 +1334,7 @@
 
   analyzer_->Wait();
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     StopThumbnails();
     Stop();
 
@@ -1475,7 +1477,7 @@
     recv_event_log_ = std::make_unique<RtcEventLogNull>();
   }
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     params_ = params;
     CheckParamsAndInjectionComponents();
 
@@ -1564,7 +1566,7 @@
 
   test::PressEnterToContinue(task_queue_);
 
-  task_queue_.SendTask([&]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
     Stop();
     DestroyStreams();
 
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 9e96821..8df54e7 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -37,6 +37,7 @@
 #include "rtc_base/platform_thread.h"
 #include "rtc_base/rate_limiter.h"
 #include "rtc_base/synchronization/sequence_checker.h"
+#include "rtc_base/task_queue_for_test.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/unique_id_generator.h"
 #include "system_wrappers/include/sleep.h"
@@ -114,7 +115,7 @@
 };
 
 TEST_F(VideoSendStreamTest, CanStartStartedStream) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     CreateSenderCall();
 
     test::NullTransport transport;
@@ -128,7 +129,7 @@
 }
 
 TEST_F(VideoSendStreamTest, CanStopStoppedStream) {
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     CreateSenderCall();
 
     test::NullTransport transport;
@@ -1757,31 +1758,34 @@
       new_route.remote_network_id = 20;
       BitrateConstraints bitrate_config;
 
-      task_queue_->SendTask([this, &new_route, &bitrate_config]() {
-        RTC_DCHECK_RUN_ON(&task_queue_thread_);
-        call_->GetTransportControllerSend()->OnNetworkRouteChanged("transport",
-                                                                   new_route);
-        bitrate_config.start_bitrate_bps = kStartBitrateBps;
-        call_->GetTransportControllerSend()->SetSdpBitrateParameters(
-            bitrate_config);
-      });
+      SendTask(RTC_FROM_HERE, task_queue_,
+               [this, &new_route, &bitrate_config]() {
+                 RTC_DCHECK_RUN_ON(&task_queue_thread_);
+                 call_->GetTransportControllerSend()->OnNetworkRouteChanged(
+                     "transport", new_route);
+                 bitrate_config.start_bitrate_bps = kStartBitrateBps;
+                 call_->GetTransportControllerSend()->SetSdpBitrateParameters(
+                     bitrate_config);
+               });
 
       EXPECT_TRUE(Wait())
           << "Timed out while waiting for start bitrate to be exceeded.";
 
-      task_queue_->SendTask([this, &new_route, &bitrate_config]() {
-        RTC_DCHECK_RUN_ON(&task_queue_thread_);
-        bitrate_config.start_bitrate_bps = -1;
-        bitrate_config.max_bitrate_bps = kNewMaxBitrateBps;
-        call_->GetTransportControllerSend()->SetSdpBitrateParameters(
-            bitrate_config);
-        // TODO(holmer): We should set the last sent packet id here and verify
-        // that we correctly ignore any packet loss reported prior to that id.
-        ++new_route.local_network_id;
-        call_->GetTransportControllerSend()->OnNetworkRouteChanged("transport",
-                                                                   new_route);
-        EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps);
-      });
+      SendTask(
+          RTC_FROM_HERE, task_queue_, [this, &new_route, &bitrate_config]() {
+            RTC_DCHECK_RUN_ON(&task_queue_thread_);
+            bitrate_config.start_bitrate_bps = -1;
+            bitrate_config.max_bitrate_bps = kNewMaxBitrateBps;
+            call_->GetTransportControllerSend()->SetSdpBitrateParameters(
+                bitrate_config);
+            // TODO(holmer): We should set the last sent packet id here and
+            // verify that we correctly ignore any packet loss reported prior to
+            // that id.
+            ++new_route.local_network_id;
+            call_->GetTransportControllerSend()->OnNetworkRouteChanged(
+                "transport", new_route);
+            EXPECT_GE(call_->GetStats().send_bandwidth_bps, kStartBitrateBps);
+          });
     }
 
    private:
@@ -1826,7 +1830,7 @@
     }
 
     void PerformTest() override {
-      task_queue_->SendTask([this]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() {
         transport_overhead_ = 100;
         call_->GetTransportControllerSend()->OnTransportOverheadChanged(
             transport_overhead_);
@@ -1839,7 +1843,7 @@
         packets_sent_ = 0;
       }
 
-      task_queue_->SendTask([this]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() {
         transport_overhead_ = 500;
         call_->GetTransportControllerSend()->OnTransportOverheadChanged(
             transport_overhead_);
@@ -2066,7 +2070,7 @@
   EncoderObserver encoder;
   test::VideoEncoderProxyFactory encoder_factory(&encoder);
 
-  task_queue_.SendTask([this, &transport, &encoder_factory]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this, &transport, &encoder_factory]() {
     CreateSenderCall();
     CreateSendConfig(1, 0, 0, &transport);
     GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
@@ -2078,14 +2082,14 @@
 
   encoder.WaitForResolution(kDefaultWidth, kDefaultHeight);
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     frame_generator_capturer_->ChangeResolution(kDefaultWidth * 2,
                                                 kDefaultHeight * 2);
   });
 
   encoder.WaitForResolution(kDefaultWidth * 2, kDefaultHeight * 2);
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2223,33 +2227,39 @@
   encoder_factory.SetHasInternalSource(true);
   test::FrameForwarder forwarder;
 
-  task_queue_.SendTask([this, &transport, &encoder_factory, &forwarder]() {
-    CreateSenderCall();
-    CreateSendConfig(1, 0, 0, &transport);
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &transport, &encoder_factory, &forwarder]() {
+             CreateSenderCall();
+             CreateSendConfig(1, 0, 0, &transport);
 
-    sender_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
-    GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
+             sender_call_->SignalChannelNetworkState(MediaType::VIDEO,
+                                                     kNetworkUp);
+             GetVideoSendConfig()->encoder_settings.encoder_factory =
+                 &encoder_factory;
 
-    CreateVideoStreams();
-    // Inject a frame, to force encoder creation.
-    GetVideoSendStream()->Start();
-    GetVideoSendStream()->SetSource(&forwarder,
-                                    DegradationPreference::DISABLED);
-    forwarder.IncomingCapturedFrame(CreateVideoFrame(640, 480, 4));
-  });
+             CreateVideoStreams();
+             // Inject a frame, to force encoder creation.
+             GetVideoSendStream()->Start();
+             GetVideoSendStream()->SetSource(&forwarder,
+                                             DegradationPreference::DISABLED);
+             forwarder.IncomingCapturedFrame(CreateVideoFrame(640, 480, 4));
+           });
 
   EXPECT_TRUE(encoder.WaitForEncoderInit());
 
-  task_queue_.SendTask([this]() { GetVideoSendStream()->Start(); });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this]() { GetVideoSendStream()->Start(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
-  task_queue_.SendTask([this]() { GetVideoSendStream()->Stop(); });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this]() { GetVideoSendStream()->Stop(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(false));
 
-  task_queue_.SendTask([this]() { GetVideoSendStream()->Start(); });
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this]() { GetVideoSendStream()->Start(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2266,35 +2276,38 @@
   encoder_factory.SetHasInternalSource(true);
   test::FrameForwarder forwarder;
 
-  task_queue_.SendTask([this, &transport, &encoder_factory, &forwarder]() {
-    CreateSenderCall();
-    // Create two simulcast streams.
-    CreateSendConfig(2, 0, 0, &transport);
+  SendTask(RTC_FROM_HERE, &task_queue_,
+           [this, &transport, &encoder_factory, &forwarder]() {
+             CreateSenderCall();
+             // Create two simulcast streams.
+             CreateSendConfig(2, 0, 0, &transport);
 
-    sender_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
-    GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
+             sender_call_->SignalChannelNetworkState(MediaType::VIDEO,
+                                                     kNetworkUp);
+             GetVideoSendConfig()->encoder_settings.encoder_factory =
+                 &encoder_factory;
 
-    CreateVideoStreams();
+             CreateVideoStreams();
 
-    // Inject a frame, to force encoder creation.
-    GetVideoSendStream()->Start();
-    GetVideoSendStream()->SetSource(&forwarder,
-                                    DegradationPreference::DISABLED);
-    forwarder.IncomingCapturedFrame(CreateVideoFrame(640, 480, 4));
-  });
+             // Inject a frame, to force encoder creation.
+             GetVideoSendStream()->Start();
+             GetVideoSendStream()->SetSource(&forwarder,
+                                             DegradationPreference::DISABLED);
+             forwarder.IncomingCapturedFrame(CreateVideoFrame(640, 480, 4));
+           });
 
   EXPECT_TRUE(encoder.WaitForEncoderInit());
 
   // When we turn on the simulcast layers it will update the BitrateAllocator,
   // which in turn updates the VideoEncoder's bitrate.
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendStream()->UpdateActiveSimulcastLayers({true, true});
   });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
   GetVideoEncoderConfig()->simulcast_layers[0].active = true;
   GetVideoEncoderConfig()->simulcast_layers[1].active = false;
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendStream()->ReconfigureVideoEncoder(
         GetVideoEncoderConfig()->Copy());
   });
@@ -2310,12 +2323,12 @@
   // Turning off both simulcast layers should trigger a bitrate change of 0.
   GetVideoEncoderConfig()->simulcast_layers[0].active = false;
   GetVideoEncoderConfig()->simulcast_layers[1].active = false;
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     GetVideoSendStream()->UpdateActiveSimulcastLayers({false, false});
   });
   EXPECT_TRUE(encoder.WaitBitrateChanged(false));
 
-  task_queue_.SendTask([this]() {
+  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2429,12 +2442,13 @@
     void PerformTest() override {
       EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
 
-      task_queue_->SendTask([this]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this]() {
         EXPECT_EQ(0u, num_releases());
         stream_->ReconfigureVideoEncoder(std::move(encoder_config_));
         EXPECT_EQ(0u, num_releases());
         stream_->Stop();
-        // Encoder should not be released before destroying the VideoSendStream.
+        // Encoder should not be released before destroying the
+        // VideoSendStream.
         EXPECT_FALSE(IsReleased());
         EXPECT_TRUE(IsReadyForEncode());
         stream_->Start();
@@ -2936,7 +2950,7 @@
       BitrateConstraints bitrate_config;
       bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000;
       bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
-      task_queue_->SendTask([this, &bitrate_config]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this, &bitrate_config]() {
         call_->GetTransportControllerSend()->SetSdpBitrateParameters(
             bitrate_config);
       });
@@ -3689,7 +3703,7 @@
       bitrate_config.start_bitrate_bps = kStartBitrateBps;
       bitrate_config.max_bitrate_bps = kMaxBitrateBps;
       bitrate_config.min_bitrate_bps = kMinBitrateBps;
-      task_queue_->SendTask([this, &bitrate_config]() {
+      SendTask(RTC_FROM_HERE, task_queue_, [this, &bitrate_config]() {
         call_->GetTransportControllerSend()->SetSdpBitrateParameters(
             bitrate_config);
         call_->GetTransportControllerSend()->OnTransportOverheadChanged(40);
@@ -3933,16 +3947,18 @@
   auto reset_fun = [this](const VideoSendStream::Config& send_stream_config,
                           const VideoEncoderConfig& encoder_config,
                           test::BaseTest* test) {
-    task_queue_.SendTask([this, &send_stream_config, &encoder_config, &test]() {
-      Stop();
-      DestroyVideoSendStreams();
-      SetVideoSendConfig(send_stream_config);
-      SetVideoEncoderConfig(encoder_config);
-      CreateVideoSendStreams();
-      SetVideoDegradation(DegradationPreference::MAINTAIN_RESOLUTION);
-      test->OnVideoStreamsCreated(GetVideoSendStream(), video_receive_streams_);
-      Start();
-    });
+    SendTask(RTC_FROM_HERE, &task_queue_,
+             [this, &send_stream_config, &encoder_config, &test]() {
+               Stop();
+               DestroyVideoSendStreams();
+               SetVideoSendConfig(send_stream_config);
+               SetVideoEncoderConfig(encoder_config);
+               CreateVideoSendStreams();
+               SetVideoDegradation(DegradationPreference::MAINTAIN_RESOLUTION);
+               test->OnVideoStreamsCreated(GetVideoSendStream(),
+                                           video_receive_streams_);
+               Start();
+             });
   };
   ContentSwitchTest<decltype(reset_fun)> test(&reset_fun);
   RunBaseTest(&test);