From 664ca6135150c182fc0f46e5389b7897b0d280a7 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Tue, 16 Jun 2026 23:33:39 -0700 Subject: [PATCH] Explicitly wake the main loop when scheduling a React revision merge (#57245) Summary: Changelog: [IOS][FIXED] Add an explicit wake up call to the main loop hen scheduling a React revision merge I could be possible that on idle screens the run loop is asleep, so without an explicit wake up call, the scheduled merges aren't processed. This diff adds an explicit wake call when a merge is scheduled. Differential Revision: D108610347 --- .../react-native/React/Fabric/RCTSurfacePresenter.mm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm index ab8f3c490780..0e4bbe376463 100644 --- a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm +++ b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm @@ -349,8 +349,16 @@ - (void)schedulerShouldMergeReactRevision:(SurfaceId)surfaceId return; } - std::lock_guard lock(_pendingReactRevisionMergesMutex); - _pendingReactRevisionMerges.insert(surfaceId); + bool needsWake = false; + { + std::lock_guard lock(_pendingReactRevisionMergesMutex); + needsWake = _pendingReactRevisionMerges.empty(); + _pendingReactRevisionMerges.insert(surfaceId); + } + + if (needsWake) { + CFRunLoopWakeUp(CFRunLoopGetMain()); + } } - (void)_mergeReactRevisionForSurfaceId:(SurfaceId)surfaceId