diff --git a/api/task_queue/test/mock_task_queue_base.h b/api/task_queue/test/mock_task_queue_base.h index 2e99be7e821..0540afe16b5 100644 --- a/api/task_queue/test/mock_task_queue_base.h +++ b/api/task_queue/test/mock_task_queue_base.h @@ -20,15 +20,22 @@ namespace webrtc { class MockTaskQueueBase : public TaskQueueBase { public: + using TaskQueueBase::PostDelayedTaskTraits; + using TaskQueueBase::PostTaskTraits; + MOCK_METHOD(void, Delete, (), (override)); - MOCK_METHOD(void, PostTask, (absl::AnyInvocable), (override)); MOCK_METHOD(void, - PostDelayedTask, - (absl::AnyInvocable, TimeDelta), + PostTaskImpl, + (absl::AnyInvocable, + const PostTaskTraits&, + const Location&), (override)); MOCK_METHOD(void, - PostDelayedHighPrecisionTask, - (absl::AnyInvocable, TimeDelta), + PostDelayedTaskImpl, + (absl::AnyInvocable, + TimeDelta, + const PostDelayedTaskTraits&, + const Location&), (override)); }; diff --git a/audio/audio_state_unittest.cc b/audio/audio_state_unittest.cc index 4426a782d7b..070e220979a 100644 --- a/audio/audio_state_unittest.cc +++ b/audio/audio_state_unittest.cc @@ -40,7 +40,9 @@ struct FakeAsyncAudioProcessingHelper { FakeTaskQueue() = default; void Delete() override { delete this; } - void PostTask(absl::AnyInvocable task) override { + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& /*traits*/, + const Location& /*location*/) override { std::move(task)(); } }; diff --git a/audio/voip/test/audio_channel_unittest.cc b/audio/voip/test/audio_channel_unittest.cc index 8955810429f..b5f85c56919 100644 --- a/audio/voip/test/audio_channel_unittest.cc +++ b/audio/voip/test/audio_channel_unittest.cc @@ -14,6 +14,7 @@ #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/call/transport.h" +#include "api/task_queue/task_queue_base.h" #include "api/task_queue/task_queue_factory.h" #include "audio/voip/test/mock_task_queue.h" #include "modules/audio_mixer/audio_mixer_impl.h" @@ -31,6 +32,7 @@ using ::testing::Invoke; using ::testing::NiceMock; using ::testing::Return; using ::testing::Unused; +using ::testing::WithArg; constexpr uint64_t kStartTime = 123456789; constexpr uint32_t kLocalSsrc = 0xdeadc0de; @@ -49,9 +51,9 @@ class AudioChannelTest : public ::testing::Test { decoder_factory_ = CreateBuiltinAudioDecoderFactory(); // By default, run the queued task immediately. - ON_CALL(task_queue_, PostTask) - .WillByDefault( - [](absl::AnyInvocable task) { std::move(task)(); }); + ON_CALL(task_queue_, PostTaskImpl) + .WillByDefault(WithArg<0>( + [](absl::AnyInvocable task) { std::move(task)(); })); } void SetUp() override { audio_channel_ = CreateAudioChannel(kLocalSsrc); } diff --git a/net/dcsctp/timer/task_queue_timeout_test.cc b/net/dcsctp/timer/task_queue_timeout_test.cc index f360ba7a580..8e392e38fb6 100644 --- a/net/dcsctp/timer/task_queue_timeout_test.cc +++ b/net/dcsctp/timer/task_queue_timeout_test.cc @@ -20,6 +20,7 @@ namespace dcsctp { namespace { using ::testing::_; +using ::testing::Field; using ::testing::MockFunction; using ::testing::NiceMock; @@ -118,7 +119,14 @@ TEST_F(TaskQueueTimeoutTest, KilledBeforeExpired) { TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToLow) { NiceMock mock_task_queue; - EXPECT_CALL(mock_task_queue, PostDelayedTask(_, _)); + EXPECT_CALL( + mock_task_queue, + PostDelayedTaskImpl( + _, _, + Field( + &webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision, + false), + _)); TaskQueueTimeoutFactory factory( mock_task_queue, []() { return TimeMs(1337); }, [](TimeoutID timeout_id) {}); @@ -129,7 +137,14 @@ TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToLow) { TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToHigh) { NiceMock mock_task_queue; - EXPECT_CALL(mock_task_queue, PostDelayedHighPrecisionTask(_, _)); + EXPECT_CALL( + mock_task_queue, + PostDelayedTaskImpl( + _, _, + Field( + &webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision, + true), + _)); TaskQueueTimeoutFactory factory( mock_task_queue, []() { return TimeMs(1337); }, [](TimeoutID timeout_id) {}); @@ -140,7 +155,14 @@ TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToHigh) { TEST(TaskQueueTimeoutWithMockTaskQueueTest, TimeoutPrecisionIsLowByDefault) { NiceMock mock_task_queue; - EXPECT_CALL(mock_task_queue, PostDelayedTask(_, _)); + EXPECT_CALL( + mock_task_queue, + PostDelayedTaskImpl( + _, _, + Field( + &webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision, + false), + _)); TaskQueueTimeoutFactory factory( mock_task_queue, []() { return TimeMs(1337); }, [](TimeoutID timeout_id) {}); diff --git a/rtc_base/task_utils/BUILD.gn b/rtc_base/task_utils/BUILD.gn index 1b3a3b5fbcf..5fcf25ef0b3 100644 --- a/rtc_base/task_utils/BUILD.gn +++ b/rtc_base/task_utils/BUILD.gn @@ -36,6 +36,7 @@ if (rtc_include_tests) { "..:rtc_task_queue", "..:task_queue_for_test", "../../api/task_queue", + "../../api/task_queue/test:mock_task_queue_base", "../../api/units:time_delta", "../../api/units:timestamp", "../../system_wrappers:system_wrappers", diff --git a/rtc_base/task_utils/repeating_task_unittest.cc b/rtc_base/task_utils/repeating_task_unittest.cc index 55e06c7d042..2c269b43bc1 100644 --- a/rtc_base/task_utils/repeating_task_unittest.cc +++ b/rtc_base/task_utils/repeating_task_unittest.cc @@ -15,6 +15,7 @@ #include "absl/functional/any_invocable.h" #include "api/task_queue/task_queue_base.h" +#include "api/task_queue/test/mock_task_queue_base.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" #include "rtc_base/event.h" @@ -32,6 +33,7 @@ using ::testing::Invoke; using ::testing::MockFunction; using ::testing::NiceMock; using ::testing::Return; +using ::testing::WithArg; constexpr TimeDelta kTimeout = TimeDelta::Millis(1000); @@ -41,21 +43,10 @@ class MockClosure { MOCK_METHOD(void, Delete, ()); }; -class MockTaskQueue : public TaskQueueBase { +class MockTaskQueue : public MockTaskQueueBase { public: MockTaskQueue() : task_queue_setter_(this) {} - MOCK_METHOD(void, Delete, (), (override)); - MOCK_METHOD(void, PostTask, (absl::AnyInvocable), (override)); - MOCK_METHOD(void, - PostDelayedTask, - (absl::AnyInvocable, TimeDelta), - (override)); - MOCK_METHOD(void, - PostDelayedHighPrecisionTask, - (absl::AnyInvocable, TimeDelta), - (override)); - private: CurrentTaskQueueSetter task_queue_setter_; }; @@ -67,23 +58,22 @@ class FakeTaskQueue : public TaskQueueBase { void Delete() override {} - void PostTask(absl::AnyInvocable task) override { + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& /*traits*/, + const Location& /*location*/) override { last_task_ = std::move(task); last_precision_ = absl::nullopt; last_delay_ = TimeDelta::Zero(); } - void PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) override { + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& /*location*/) override { last_task_ = std::move(task); - last_precision_ = TaskQueueBase::DelayPrecision::kLow; - last_delay_ = delay; - } - - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - TimeDelta delay) override { - last_task_ = std::move(task); - last_precision_ = TaskQueueBase::DelayPrecision::kHigh; + last_precision_ = traits.high_precision + ? TaskQueueBase::DelayPrecision::kHigh + : TaskQueueBase::DelayPrecision::kLow; last_delay_ = delay; } @@ -339,8 +329,10 @@ TEST(RepeatingTaskTest, ClockIntegration) { SimulatedClock clock(Timestamp::Zero()); NiceMock task_queue; - ON_CALL(task_queue, PostDelayedTask) - .WillByDefault([&](absl::AnyInvocable task, TimeDelta delay) { + ON_CALL(task_queue, PostDelayedTaskImpl) + .WillByDefault([&](absl::AnyInvocable task, TimeDelta delay, + const MockTaskQueue::PostDelayedTaskTraits&, + const Location&) { EXPECT_EQ(delay, expected_delay); delayed_task = std::move(task); }); @@ -368,10 +360,10 @@ TEST(RepeatingTaskTest, CanBeStoppedAfterTaskQueueDeletedTheRepeatingTask) { absl::AnyInvocable repeating_task; MockTaskQueue task_queue; - EXPECT_CALL(task_queue, PostDelayedTask) - .WillOnce([&](absl::AnyInvocable task, TimeDelta delay) { + EXPECT_CALL(task_queue, PostDelayedTaskImpl) + .WillOnce(WithArg<0>([&](absl::AnyInvocable task) { repeating_task = std::move(task); - }); + })); RepeatingTaskHandle handle = RepeatingTaskHandle::DelayedStart(&task_queue, TimeDelta::Millis(100), diff --git a/rtc_base/unique_id_generator_unittest.cc b/rtc_base/unique_id_generator_unittest.cc index ec9c3fb4e52..a6ae8ec9f5a 100644 --- a/rtc_base/unique_id_generator_unittest.cc +++ b/rtc_base/unique_id_generator_unittest.cc @@ -33,11 +33,13 @@ class FakeTaskQueue : public webrtc::TaskQueueBase { FakeTaskQueue() : task_queue_setter_(this) {} void Delete() override {} - void PostTask(absl::AnyInvocable task) override {} - void PostDelayedTask(absl::AnyInvocable task, - webrtc::TimeDelta delay) override {} - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - webrtc::TimeDelta delay) override {} + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const webrtc::Location& location) override {} + void PostDelayedTaskImpl(absl::AnyInvocable task, + webrtc::TimeDelta delay, + const PostDelayedTaskTraits& traits, + const webrtc::Location& location) override {} private: CurrentTaskQueueSetter task_queue_setter_; diff --git a/test/time_controller/external_time_controller.cc b/test/time_controller/external_time_controller.cc index f652eb686cd..41f36eaaef4 100644 --- a/test/time_controller/external_time_controller.cc +++ b/test/time_controller/external_time_controller.cc @@ -33,23 +33,24 @@ class ExternalTimeController::TaskQueueWrapper : public TaskQueueBase { std::unique_ptr base) : parent_(parent), base_(std::move(base)) {} - void PostTask(absl::AnyInvocable task) override { + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) override { parent_->UpdateTime(); base_->PostTask(TaskWrapper(std::move(task))); parent_->ScheduleNext(); } - void PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) override { + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) override { parent_->UpdateTime(); - base_->PostDelayedTask(TaskWrapper(std::move(task)), delay); - parent_->ScheduleNext(); - } - - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - TimeDelta delay) override { - parent_->UpdateTime(); - base_->PostDelayedHighPrecisionTask(TaskWrapper(std::move(task)), delay); + if (traits.high_precision) { + base_->PostDelayedHighPrecisionTask(TaskWrapper(std::move(task)), delay); + } else { + base_->PostDelayedTask(TaskWrapper(std::move(task)), delay); + } parent_->ScheduleNext(); } diff --git a/test/time_controller/simulated_task_queue.cc b/test/time_controller/simulated_task_queue.cc index 3c267218453..66b3fd80875 100644 --- a/test/time_controller/simulated_task_queue.cc +++ b/test/time_controller/simulated_task_queue.cc @@ -66,20 +66,19 @@ void SimulatedTaskQueue::RunReady(Timestamp at_time) { } } -void SimulatedTaskQueue::PostTask(absl::AnyInvocable task) { +void SimulatedTaskQueue::PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& /*traits*/, + const Location& /*location*/) { MutexLock lock(&lock_); ready_tasks_.push_back(std::move(task)); next_run_time_ = Timestamp::MinusInfinity(); } -void SimulatedTaskQueue::PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) { - PostDelayedHighPrecisionTask(std::move(task), delay); -} - -void SimulatedTaskQueue::PostDelayedHighPrecisionTask( +void SimulatedTaskQueue::PostDelayedTaskImpl( absl::AnyInvocable task, - TimeDelta delay) { + TimeDelta delay, + const PostDelayedTaskTraits& /*traits*/, + const Location& /*location*/) { MutexLock lock(&lock_); Timestamp target_time = handler_->CurrentTime() + delay; delayed_tasks_[target_time].push_back(std::move(task)); diff --git a/test/time_controller/simulated_task_queue.h b/test/time_controller/simulated_task_queue.h index 3c55f15ddef..6ca46327b21 100644 --- a/test/time_controller/simulated_task_queue.h +++ b/test/time_controller/simulated_task_queue.h @@ -40,11 +40,13 @@ class SimulatedTaskQueue : public TaskQueueBase, // TaskQueueBase interface void Delete() override; - void PostTask(absl::AnyInvocable task) override; - void PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) override; - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - TimeDelta delay) override; + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) override; + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) override; private: sim_time_impl::SimulatedTimeControllerImpl* const handler_; diff --git a/test/time_controller/simulated_thread.cc b/test/time_controller/simulated_thread.cc index bdd1096327d..0973a75ccf0 100644 --- a/test/time_controller/simulated_thread.cc +++ b/test/time_controller/simulated_thread.cc @@ -77,24 +77,19 @@ void SimulatedThread::BlockingCall(rtc::FunctionView functor) { } } -void SimulatedThread::PostTask(absl::AnyInvocable task) { - rtc::Thread::PostTask(std::move(task)); +void SimulatedThread::PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) { + rtc::Thread::PostTaskImpl(std::move(task), traits, location); MutexLock lock(&lock_); next_run_time_ = Timestamp::MinusInfinity(); } -void SimulatedThread::PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) { - rtc::Thread::PostDelayedTask(std::move(task), delay); - MutexLock lock(&lock_); - next_run_time_ = - std::min(next_run_time_, Timestamp::Millis(rtc::TimeMillis()) + delay); -} - -void SimulatedThread::PostDelayedHighPrecisionTask( - absl::AnyInvocable task, - TimeDelta delay) { - rtc::Thread::PostDelayedHighPrecisionTask(std::move(task), delay); +void SimulatedThread::PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) { + rtc::Thread::PostDelayedTaskImpl(std::move(task), delay, traits, location); MutexLock lock(&lock_); next_run_time_ = std::min(next_run_time_, Timestamp::Millis(rtc::TimeMillis()) + delay); diff --git a/test/time_controller/simulated_thread.h b/test/time_controller/simulated_thread.h index e8e08c50005..97b85604b6f 100644 --- a/test/time_controller/simulated_thread.h +++ b/test/time_controller/simulated_thread.h @@ -37,11 +37,13 @@ class SimulatedThread : public rtc::Thread, // Thread interface void BlockingCall(rtc::FunctionView functor) override; - void PostTask(absl::AnyInvocable task) override; - void PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) override; - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - TimeDelta delay) override; + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) override; + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) override; void Stop() override; diff --git a/test/time_controller/simulated_time_controller.h b/test/time_controller/simulated_time_controller.h index 121b9171e8d..98b816c52c2 100644 --- a/test/time_controller/simulated_time_controller.h +++ b/test/time_controller/simulated_time_controller.h @@ -106,15 +106,15 @@ class TokenTaskQueue : public TaskQueueBase { using CurrentTaskQueueSetter = TaskQueueBase::CurrentTaskQueueSetter; void Delete() override { RTC_DCHECK_NOTREACHED(); } - void PostTask(absl::AnyInvocable /*task*/) override { + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) override { RTC_DCHECK_NOTREACHED(); } - void PostDelayedTask(absl::AnyInvocable /*task*/, - TimeDelta /*delay*/) override { - RTC_DCHECK_NOTREACHED(); - } - void PostDelayedHighPrecisionTask(absl::AnyInvocable /*task*/, - TimeDelta /*delay*/) override { + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) override { RTC_DCHECK_NOTREACHED(); } }; diff --git a/video/video_stream_encoder_unittest.cc b/video/video_stream_encoder_unittest.cc index c451b6fe203..10ec97c124a 100644 --- a/video/video_stream_encoder_unittest.cc +++ b/video/video_stream_encoder_unittest.cc @@ -9220,15 +9220,15 @@ TEST(VideoStreamEncoderSimpleTest, CreateDestroy) { private: void Delete() override { delete this; } - void PostTask(absl::AnyInvocable task) override { + void PostTaskImpl(absl::AnyInvocable task, + const PostTaskTraits& traits, + const Location& location) override { // meh. } - void PostDelayedTask(absl::AnyInvocable task, - TimeDelta delay) override { - ASSERT_TRUE(false); - } - void PostDelayedHighPrecisionTask(absl::AnyInvocable task, - TimeDelta delay) override { + void PostDelayedTaskImpl(absl::AnyInvocable task, + TimeDelta delay, + const PostDelayedTaskTraits& traits, + const Location& location) override { ADD_FAILURE(); } };