diff --git a/call/BUILD.gn b/call/BUILD.gn index d542f4b5b4..fc8fd34022 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -535,9 +535,9 @@ if (rtc_include_tests) { "../rtc_base:checks", "../rtc_base:rtc_base_approved", "../rtc_base:task_queue_for_test", - "../rtc_base:task_queue_for_test", "../rtc_base:threading", "../rtc_base/synchronization:mutex", + "../rtc_base/task_utils:pending_task_safety_flag", "../rtc_base/task_utils:repeating_task", "../system_wrappers", "../system_wrappers:metrics", diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc index 71bd490851..9596323859 100644 --- a/call/call_perf_tests.cc +++ b/call/call_perf_tests.cc @@ -31,6 +31,7 @@ #include "rtc_base/checks.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/task_queue_for_test.h" +#include "rtc_base/task_utils/pending_task_safety_flag.h" #include "rtc_base/thread.h" #include "rtc_base/thread_annotations.h" #include "system_wrappers/include/metrics.h" @@ -668,12 +669,13 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { : (kMaxEncodeBitrateKbps + kAcceptableBitrateErrorMargin / 2)), num_bitrate_observations_in_range_(0), - task_queue_(task_queue) {} + task_queue_(task_queue), + task_safety_flag_(PendingTaskSafetyFlag::CreateDetached()) {} private: // TODO(holmer): Run this with a timer instead of once per packet. Action OnSendRtp(const uint8_t* packet, size_t length) override { - task_queue_->PostTask(ToQueuedTask([this]() { + task_queue_->PostTask(ToQueuedTask(task_safety_flag_, [this]() { VideoSendStream::Stats stats = send_stream_->GetStats(); if (!stats.substreams.empty()) { @@ -701,6 +703,8 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { send_stream_ = send_stream; } + void OnStreamsStopped() override { task_safety_flag_->SetNotAlive(); } + void ModifyVideoConfigs( VideoSendStream::Config* send_config, std::vector* receive_configs, @@ -729,6 +733,7 @@ void CallPerfTest::TestMinTransmitBitrate(bool pad_to_min_bitrate) { int num_bitrate_observations_in_range_; std::vector bitrate_kbps_list_; TaskQueueBase* task_queue_; + rtc::scoped_refptr task_safety_flag_; } test(pad_to_min_bitrate, task_queue()); fake_encoder_max_bitrate_ = kMaxEncodeBitrateKbps;