From 2d97a6ccb0a9adc12891ac238c53f00322bb25a5 Mon Sep 17 00:00:00 2001 From: Cody Pizzaia Date: Wed, 23 Oct 2024 19:50:46 -0700 Subject: [PATCH] Revert D64631346: Use RuntimeScheduler in EventBeat Differential Revision: D64631346 Original commit changeset: b82dca150c13 Original Phabricator Diff: D64631346 fbshipit-source-id: 89ef52e5891d9fef33494fbfcc4252cade4aa803 --- .../React/Fabric/AppleEventBeat.cpp | 4 +-- .../React/Fabric/AppleEventBeat.h | 4 +-- .../React/Fabric/RCTSurfacePresenter.mm | 4 +-- .../jni/react/fabric/AndroidEventBeat.cpp | 4 +-- .../main/jni/react/fabric/AndroidEventBeat.h | 2 +- .../react/fabric/FabricUIManagerBinding.cpp | 25 +++++++++------- .../react/renderer/core/EventBeat.cpp | 29 +++++++++---------- .../react/renderer/core/EventBeat.h | 9 ++---- 8 files changed, 39 insertions(+), 42 deletions(-) diff --git a/packages/react-native/React/Fabric/AppleEventBeat.cpp b/packages/react-native/React/Fabric/AppleEventBeat.cpp index 4a3d533a0cd94a..f172cbcd785da5 100644 --- a/packages/react-native/React/Fabric/AppleEventBeat.cpp +++ b/packages/react-native/React/Fabric/AppleEventBeat.cpp @@ -14,8 +14,8 @@ namespace facebook::react { AppleEventBeat::AppleEventBeat( std::shared_ptr ownerBox, std::unique_ptr uiRunLoopObserver, - RuntimeScheduler& runtimeScheduler) - : EventBeat(std::move(ownerBox), runtimeScheduler), + RuntimeExecutor runtimeExecutor) + : EventBeat(std::move(ownerBox), std::move(runtimeExecutor)), uiRunLoopObserver_(std::move(uiRunLoopObserver)) { uiRunLoopObserver_->setDelegate(this); uiRunLoopObserver_->enable(); diff --git a/packages/react-native/React/Fabric/AppleEventBeat.h b/packages/react-native/React/Fabric/AppleEventBeat.h index f2f9ef4316a3f4..d842d4f63d6112 100644 --- a/packages/react-native/React/Fabric/AppleEventBeat.h +++ b/packages/react-native/React/Fabric/AppleEventBeat.h @@ -13,8 +13,6 @@ namespace facebook::react { -class RuntimeScheduler; - /* * Event beat associated with JavaScript runtime. * The beat is called on `RuntimeExecutor`'s thread induced by the UI thread @@ -25,7 +23,7 @@ class AppleEventBeat : public EventBeat, public RunLoopObserver::Delegate { AppleEventBeat( std::shared_ptr ownerBox, std::unique_ptr uiRunLoopObserver, - RuntimeScheduler& RuntimeScheduler); + RuntimeExecutor runtimeExecutor); #pragma mark - RunLoopObserver::Delegate diff --git a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm index 63d4146ad97291..899e5e843823e4 100644 --- a/packages/react-native/React/Fabric/RCTSurfacePresenter.mm +++ b/packages/react-native/React/Fabric/RCTSurfacePresenter.mm @@ -258,10 +258,10 @@ - (RCTScheduler *)_createScheduler toolbox.bridgelessBindingsExecutor = _bridgelessBindingsExecutor; toolbox.eventBeatFactory = - [runtimeScheduler](std::shared_ptr ownerBox) -> std::unique_ptr { + [runtimeExecutor](std::shared_ptr ownerBox) -> std::unique_ptr { auto runLoopObserver = std::make_unique(RunLoopObserver::Activity::BeforeWaiting, ownerBox->owner); - return std::make_unique(std::move(ownerBox), std::move(runLoopObserver), *runtimeScheduler); + return std::make_unique(std::move(ownerBox), std::move(runLoopObserver), runtimeExecutor); }; RCTScheduler *scheduler = [[RCTScheduler alloc] initWithToolbox:toolbox]; diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.cpp index 9c63329613d5aa..cd902c0d3d2a4e 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.cpp @@ -16,9 +16,9 @@ namespace facebook::react { AndroidEventBeat::AndroidEventBeat( std::shared_ptr ownerBox, EventBeatManager* eventBeatManager, - RuntimeScheduler& runtimeScheduler, + RuntimeExecutor runtimeExecutor, jni::global_ref javaUIManager) - : EventBeat(std::move(ownerBox), runtimeScheduler), + : EventBeat(std::move(ownerBox), std::move(runtimeExecutor)), eventBeatManager_(eventBeatManager), javaUIManager_(std::move(javaUIManager)) { eventBeatManager->addObserver(*this); diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.h b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.h index b093a7cf841c30..bd4540bf5887a0 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.h +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/AndroidEventBeat.h @@ -19,7 +19,7 @@ class AndroidEventBeat final : public EventBeat, AndroidEventBeat( std::shared_ptr ownerBox, EventBeatManager* eventBeatManager, - RuntimeScheduler& runtimeScheduler, + RuntimeExecutor runtimeExecutor, jni::global_ref javaUIManager); ~AndroidEventBeat() override; diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp index 9687b580bd2402..d0762aaa1b5182 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp @@ -471,25 +471,28 @@ void FabricUIManagerBinding::installFabricUIManager( auto runtimeExecutor = runtimeExecutorHolder->cthis()->get(); - auto runtimeScheduler = runtimeSchedulerHolder->cthis()->get().lock(); - if (runtimeScheduler) { - runtimeExecutor = - [runtimeScheduler]( - std::function&& callback) { - runtimeScheduler->scheduleWork(std::move(callback)); - }; - contextContainer->insert( - "RuntimeScheduler", std::weak_ptr(runtimeScheduler)); + if (runtimeSchedulerHolder) { + auto runtimeScheduler = runtimeSchedulerHolder->cthis()->get().lock(); + if (runtimeScheduler) { + runtimeExecutor = + [runtimeScheduler]( + std::function&& callback) { + runtimeScheduler->scheduleWork(std::move(callback)); + }; + contextContainer->insert( + "RuntimeScheduler", + std::weak_ptr(runtimeScheduler)); + } } EventBeat::Factory eventBeatFactory = - [eventBeatManager, &runtimeScheduler, globalJavaUiManager]( + [eventBeatManager, runtimeExecutor, globalJavaUiManager]( std::shared_ptr ownerBox) -> std::unique_ptr { return std::make_unique( std::move(ownerBox), eventBeatManager, - *runtimeScheduler, + runtimeExecutor, globalJavaUiManager); }; diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventBeat.cpp b/packages/react-native/ReactCommon/react/renderer/core/EventBeat.cpp index 9a9fd5266d798a..2afbbfd52145f1 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventBeat.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/EventBeat.cpp @@ -7,15 +7,15 @@ #include "EventBeat.h" -#include #include namespace facebook::react { EventBeat::EventBeat( std::shared_ptr ownerBox, - RuntimeScheduler& runtimeScheduler) - : ownerBox_(std::move(ownerBox)), runtimeScheduler_(runtimeScheduler) {} + RuntimeExecutor runtimeExecutor) + : ownerBox_(std::move(ownerBox)), + runtimeExecutor_(std::move(runtimeExecutor)) {} void EventBeat::request() const { isRequested_ = true; @@ -33,18 +33,17 @@ void EventBeat::induce() const { isRequested_ = false; isBeatCallbackScheduled_ = true; - runtimeScheduler_.scheduleWork( - [this, ownerBox = ownerBox_](jsi::Runtime& runtime) { - auto owner = ownerBox->owner.lock(); - if (!owner) { - return; - } - - isBeatCallbackScheduled_ = false; - if (beatCallback_) { - beatCallback_(runtime); - } - }); + runtimeExecutor_([this, ownerBox = ownerBox_](jsi::Runtime& runtime) { + auto owner = ownerBox->owner.lock(); + if (!owner) { + return; + } + + isBeatCallbackScheduled_ = false; + if (beatCallback_) { + beatCallback_(runtime); + } + }); } } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventBeat.h b/packages/react-native/ReactCommon/react/renderer/core/EventBeat.h index a03a9f7cb874eb..6a3692737df9a6 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventBeat.h +++ b/packages/react-native/ReactCommon/react/renderer/core/EventBeat.h @@ -7,14 +7,11 @@ #pragma once +#include #include #include #include -namespace facebook::react { -class RuntimeScheduler; -} - namespace facebook::jsi { class Runtime; } @@ -59,7 +56,7 @@ class EventBeat { explicit EventBeat( std::shared_ptr ownerBox, - RuntimeScheduler& runtimeScheduler); + RuntimeExecutor runtimeExecutor); virtual ~EventBeat() = default; @@ -91,7 +88,7 @@ class EventBeat { mutable std::atomic isRequested_{false}; private: - RuntimeScheduler& runtimeScheduler_; + RuntimeExecutor runtimeExecutor_; mutable std::atomic isBeatCallbackScheduled_{false}; };