From 17ecae9ce7bded79ab3a083c9d07e15460e5635c Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Sat, 9 Sep 2023 05:43:50 -0700 Subject: [PATCH] Make RuntimeScheduler tests less flaky (#39353) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/39353 changelog: [internal] Increase the wait threshold when waiting for a task in a stub queue to reduce test flakyness. Reviewed By: makovkastar Differential Revision: D49093046 fbshipit-source-id: 30d150f421c226587ae9e41786d2d0f95c82dfef --- .../runtimescheduler/tests/RuntimeSchedulerTest.cpp | 8 ++++---- .../renderer/runtimescheduler/tests/StubQueue.h | 13 +++++++------ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp index 71a18928c87..b274cea0b89 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp @@ -481,7 +481,7 @@ TEST_F(RuntimeSchedulerTest, basicSameThreadExecution) { EXPECT_FALSE(runtimeScheduler_->getIsSynchronous()); }); - auto hasTask = stubQueue_->waitForTask(1ms); + auto hasTask = stubQueue_->waitForTask(); EXPECT_TRUE(hasTask); EXPECT_FALSE(didRunSynchronousTask); @@ -517,7 +517,7 @@ TEST_F(RuntimeSchedulerTest, sameThreadTaskCreatesImmediatePriorityTask) { }); }); - auto hasTask = stubQueue_->waitForTask(1ms); + auto hasTask = stubQueue_->waitForTask(); EXPECT_TRUE(hasTask); EXPECT_FALSE(didRunSynchronousTask); @@ -556,7 +556,7 @@ TEST_F(RuntimeSchedulerTest, sameThreadTaskCreatesLowPriorityTask) { }); }); - auto hasTask = stubQueue_->waitForTask(1ms); + auto hasTask = stubQueue_->waitForTask(); EXPECT_TRUE(hasTask); EXPECT_FALSE(didRunSynchronousTask); @@ -593,7 +593,7 @@ TEST_F(RuntimeSchedulerTest, twoThreadsRequestAccessToTheRuntime) { }); }); - auto hasTask = stubQueue_->waitForTasks(2, 1ms); + auto hasTask = stubQueue_->waitForTasks(2); EXPECT_TRUE(hasTask); EXPECT_FALSE(didRunWork); diff --git a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h index 1daecf37f7b..2f190c5f79a 100644 --- a/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h +++ b/packages/react-native/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h @@ -47,17 +47,15 @@ class StubQueue { return callbackQueue_.size(); } - bool waitForTask(std::chrono::duration timeout) const { + bool waitForTask() const { std::unique_lock lock(mutex_); return signal_.wait_for( - lock, timeout, [this]() { return !callbackQueue_.empty(); }); + lock, StubQueue::timeout, [this]() { return !callbackQueue_.empty(); }); } - bool waitForTasks( - std::size_t numberOfTasks, - std::chrono::duration timeout) const { + bool waitForTasks(std::size_t numberOfTasks) const { std::unique_lock lock(mutex_); - return signal_.wait_for(lock, timeout, [this, numberOfTasks]() { + return signal_.wait_for(lock, StubQueue::timeout, [this, numberOfTasks]() { return numberOfTasks == callbackQueue_.size(); }); } @@ -66,4 +64,7 @@ class StubQueue { mutable std::condition_variable signal_; mutable std::mutex mutex_; std::queue> callbackQueue_; + + static constexpr std::chrono::duration timeout = + std::chrono::milliseconds(100); };