Skip to content

Commit 2288977

Browse files
javachemeta-codesync[bot]
authored andcommitted
Remove RuntimeSchedulerCallInvoker
Summary: Remove the deprecated `RuntimeSchedulerCallInvoker` implementation now that React instances expose their buffered `CallInvoker`. Make that invoker available through the runtime binding and migrate remaining consumers to use it. Changelog: [General][Breaking] - Remove the deprecated `RuntimeSchedulerCallInvoker` API Differential Revision: D123627753
1 parent 12e7ebb commit 2288977

15 files changed

Lines changed: 62 additions & 177 deletions

‎packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp‎

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,17 @@ namespace facebook::react {
2020
std::shared_ptr<RuntimeSchedulerBinding>
2121
RuntimeSchedulerBinding::createAndInstallIfNeeded(
2222
jsi::Runtime& runtime,
23-
const std::shared_ptr<RuntimeScheduler>& runtimeScheduler) {
23+
const std::shared_ptr<RuntimeScheduler>& runtimeScheduler,
24+
std::shared_ptr<CallInvoker> callInvoker) {
2425
auto runtimeSchedulerModuleName = "nativeRuntimeScheduler";
2526

2627
auto runtimeSchedulerValue =
2728
runtime.global().getProperty(runtime, runtimeSchedulerModuleName);
2829
if (runtimeSchedulerValue.isUndefined()) {
2930
// The global namespace does not have an instance of the binding;
3031
// we need to create, install and return it.
31-
auto runtimeSchedulerBinding =
32-
std::make_shared<RuntimeSchedulerBinding>(runtimeScheduler);
32+
auto runtimeSchedulerBinding = std::make_shared<RuntimeSchedulerBinding>(
33+
runtimeScheduler, std::move(callInvoker));
3334
auto object =
3435
jsi::Object::createFromHostObject(runtime, runtimeSchedulerBinding);
3536
runtime.global().setProperty(
@@ -40,7 +41,12 @@ RuntimeSchedulerBinding::createAndInstallIfNeeded(
4041
// The global namespace already has an instance of the binding;
4142
// we need to return that.
4243
auto runtimeSchedulerObject = runtimeSchedulerValue.asObject(runtime);
43-
return runtimeSchedulerObject.getHostObject<RuntimeSchedulerBinding>(runtime);
44+
auto runtimeSchedulerBinding =
45+
runtimeSchedulerObject.getHostObject<RuntimeSchedulerBinding>(runtime);
46+
if (callInvoker) {
47+
runtimeSchedulerBinding->callInvoker_ = std::move(callInvoker);
48+
}
49+
return runtimeSchedulerBinding;
4450
}
4551

4652
std::shared_ptr<RuntimeSchedulerBinding> RuntimeSchedulerBinding::getBinding(
@@ -58,14 +64,21 @@ std::shared_ptr<RuntimeSchedulerBinding> RuntimeSchedulerBinding::getBinding(
5864
}
5965

6066
RuntimeSchedulerBinding::RuntimeSchedulerBinding(
61-
std::shared_ptr<RuntimeScheduler> runtimeScheduler)
62-
: runtimeScheduler_(std::move(runtimeScheduler)) {}
67+
std::shared_ptr<RuntimeScheduler> runtimeScheduler,
68+
std::shared_ptr<CallInvoker> callInvoker)
69+
: runtimeScheduler_(std::move(runtimeScheduler)),
70+
callInvoker_(std::move(callInvoker)) {}
6371

6472
std::shared_ptr<RuntimeScheduler>
6573
RuntimeSchedulerBinding::getRuntimeScheduler() noexcept {
6674
return runtimeScheduler_;
6775
}
6876

77+
std::shared_ptr<CallInvoker>
78+
RuntimeSchedulerBinding::getCallInvoker() noexcept {
79+
return callInvoker_;
80+
}
81+
6982
jsi::Value RuntimeSchedulerBinding::get(
7083
jsi::Runtime& runtime,
7184
const jsi::PropNameID& name) {

‎packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.h‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@
1313

1414
namespace facebook::react {
1515

16+
class CallInvoker;
1617
class RuntimeScheduler;
1718

1819
/*
1920
* Exposes RuntimeScheduler to JavaScript realm.
2021
*/
2122
class RuntimeSchedulerBinding : public jsi::HostObject {
2223
public:
23-
RuntimeSchedulerBinding(std::shared_ptr<RuntimeScheduler> runtimeScheduler);
24+
RuntimeSchedulerBinding(
25+
std::shared_ptr<RuntimeScheduler> runtimeScheduler,
26+
std::shared_ptr<CallInvoker> callInvoker = nullptr);
2427

2528
/*
2629
* Installs RuntimeSchedulerBinding into JavaScript runtime if needed.
@@ -30,7 +33,8 @@ class RuntimeSchedulerBinding : public jsi::HostObject {
3033
*/
3134
static std::shared_ptr<RuntimeSchedulerBinding> createAndInstallIfNeeded(
3235
jsi::Runtime &runtime,
33-
const std::shared_ptr<RuntimeScheduler> &runtimeScheduler);
36+
const std::shared_ptr<RuntimeScheduler> &runtimeScheduler,
37+
std::shared_ptr<CallInvoker> callInvoker = nullptr);
3438

3539
/*
3640
* Returns a shared pointer to RuntimeSchedulerBinding previously installed
@@ -43,13 +47,19 @@ class RuntimeSchedulerBinding : public jsi::HostObject {
4347
*/
4448
std::shared_ptr<RuntimeScheduler> getRuntimeScheduler() noexcept;
4549

50+
/*
51+
* Returns the CallInvoker associated with the React instance, if available.
52+
*/
53+
std::shared_ptr<CallInvoker> getCallInvoker() noexcept;
54+
4655
/*
4756
* `jsi::HostObject` specific overloads.
4857
*/
4958
jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override;
5059

5160
private:
5261
std::shared_ptr<RuntimeScheduler> runtimeScheduler_;
62+
std::shared_ptr<CallInvoker> callInvoker_;
5363
};
5464

5565
} // namespace facebook::react

‎packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp‎

Lines changed: 0 additions & 42 deletions
This file was deleted.

‎packages/react-native/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h‎

Lines changed: 0 additions & 40 deletions
This file was deleted.

‎packages/react-native/ReactCommon/react/runtime/CallInvokerImpl.cpp‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ void CallInvokerImpl::invokeAsync(CallFunc&& func) noexcept {
2121
// Held for the duration of the call: `BufferedRuntimeExecutor` reaches the
2222
// scheduler through a raw pointer, which is only safe while the instance that
2323
// owns it is alive. A CallInvoker outlives its instance routinely — a caller
24-
// can hold one across a reload — so the weak reference is what keeps this
25-
// from dispatching into a destroyed scheduler. Dropping the work matches what
26-
// `RuntimeSchedulerCallInvoker` does once its scheduler is gone.
24+
// can hold one across a reload — so guard dispatch with the weak scheduler.
25+
// If it has expired, there is no runtime left to receive the work.
2726
if (auto runtimeScheduler = runtimeScheduler_.lock()) {
28-
// No priority given, so this takes the executor's default — matching what
29-
// `RuntimeSchedulerCallInvoker` did via `scheduleWork`.
27+
// No priority was given, so use the executor's default.
3028
bufferedRuntimeExecutor_->execute(std::move(func));
3129
}
3230
}

‎packages/react-native/ReactCommon/react/runtime/ReactInstance.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ void ReactInstance::initializeRuntime(
443443
bindNativePerformanceNow(runtime);
444444

445445
RuntimeSchedulerBinding::createAndInstallIfNeeded(
446-
runtime, runtimeScheduler_);
446+
runtime, runtimeScheduler_, createJSCallInvoker());
447447

448448
runtime_->unstable_initializeOnJsThread();
449449

‎scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4463,20 +4463,14 @@ class facebook::react::RuntimeSchedulerBase : public facebook::hermes::IEventLoo
44634463
}
44644464

44654465
class facebook::react::RuntimeSchedulerBinding : public facebook::jsi::HostObject {
4466-
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4467-
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler);
4466+
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
4467+
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
44684468
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> getBinding(facebook::jsi::Runtime& runtime);
4469+
public std::shared_ptr<facebook::react::CallInvoker> getCallInvoker() noexcept;
44694470
public std::shared_ptr<facebook::react::RuntimeScheduler> getRuntimeScheduler() noexcept;
44704471
public virtual facebook::jsi::Value get(facebook::jsi::Runtime& runtime, const facebook::jsi::PropNameID& name) override;
44714472
}
44724473

4473-
class facebook::react::RuntimeSchedulerCallInvoker : public facebook::react::CallInvoker {
4474-
public RuntimeSchedulerCallInvoker(std::weak_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4475-
public virtual void invokeAsync(facebook::react::CallFunc&& func) noexcept override;
4476-
public virtual void invokeAsync(facebook::react::SchedulerPriority priority, facebook::react::CallFunc&& func) noexcept override;
4477-
public virtual void invokeSync(facebook::react::CallFunc&& func) override;
4478-
}
4479-
44804474
class facebook::react::RuntimeSchedulerEventTimingDelegate {
44814475
public virtual void dispatchPendingEventTimingEntries(facebook::react::HighResTimeStamp taskEndTime, const std::unordered_set<facebook::react::SurfaceId>& surfaceIdsWithPendingRenderingUpdates) = 0;
44824476
public virtual ~RuntimeSchedulerEventTimingDelegate() = default;

‎scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4307,20 +4307,14 @@ class facebook::react::RuntimeSchedulerBase : public facebook::hermes::IEventLoo
43074307
}
43084308

43094309
class facebook::react::RuntimeSchedulerBinding : public facebook::jsi::HostObject {
4310-
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4311-
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler);
4310+
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
4311+
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
43124312
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> getBinding(facebook::jsi::Runtime& runtime);
4313+
public std::shared_ptr<facebook::react::CallInvoker> getCallInvoker() noexcept;
43134314
public std::shared_ptr<facebook::react::RuntimeScheduler> getRuntimeScheduler() noexcept;
43144315
public virtual facebook::jsi::Value get(facebook::jsi::Runtime& runtime, const facebook::jsi::PropNameID& name) override;
43154316
}
43164317

4317-
class facebook::react::RuntimeSchedulerCallInvoker : public facebook::react::CallInvoker {
4318-
public RuntimeSchedulerCallInvoker(std::weak_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4319-
public virtual void invokeAsync(facebook::react::CallFunc&& func) noexcept override;
4320-
public virtual void invokeAsync(facebook::react::SchedulerPriority priority, facebook::react::CallFunc&& func) noexcept override;
4321-
public virtual void invokeSync(facebook::react::CallFunc&& func) override;
4322-
}
4323-
43244318
class facebook::react::RuntimeSchedulerEventTimingDelegate {
43254319
public virtual void dispatchPendingEventTimingEntries(facebook::react::HighResTimeStamp taskEndTime, const std::unordered_set<facebook::react::SurfaceId>& surfaceIdsWithPendingRenderingUpdates) = 0;
43264320
public virtual ~RuntimeSchedulerEventTimingDelegate() = default;

‎scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4460,20 +4460,14 @@ class facebook::react::RuntimeSchedulerBase : public facebook::hermes::IEventLoo
44604460
}
44614461

44624462
class facebook::react::RuntimeSchedulerBinding : public facebook::jsi::HostObject {
4463-
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4464-
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler);
4463+
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
4464+
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
44654465
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> getBinding(facebook::jsi::Runtime& runtime);
4466+
public std::shared_ptr<facebook::react::CallInvoker> getCallInvoker() noexcept;
44664467
public std::shared_ptr<facebook::react::RuntimeScheduler> getRuntimeScheduler() noexcept;
44674468
public virtual facebook::jsi::Value get(facebook::jsi::Runtime& runtime, const facebook::jsi::PropNameID& name) override;
44684469
}
44694470

4470-
class facebook::react::RuntimeSchedulerCallInvoker : public facebook::react::CallInvoker {
4471-
public RuntimeSchedulerCallInvoker(std::weak_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
4472-
public virtual void invokeAsync(facebook::react::CallFunc&& func) noexcept override;
4473-
public virtual void invokeAsync(facebook::react::SchedulerPriority priority, facebook::react::CallFunc&& func) noexcept override;
4474-
public virtual void invokeSync(facebook::react::CallFunc&& func) override;
4475-
}
4476-
44774471
class facebook::react::RuntimeSchedulerEventTimingDelegate {
44784472
public virtual void dispatchPendingEventTimingEntries(facebook::react::HighResTimeStamp taskEndTime, const std::unordered_set<facebook::react::SurfaceId>& surfaceIdsWithPendingRenderingUpdates) = 0;
44794473
public virtual ~RuntimeSchedulerEventTimingDelegate() = default;

‎scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6621,20 +6621,14 @@ class facebook::react::RuntimeSchedulerBase : public facebook::hermes::IEventLoo
66216621
}
66226622

66236623
class facebook::react::RuntimeSchedulerBinding : public facebook::jsi::HostObject {
6624-
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
6625-
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler);
6624+
public RuntimeSchedulerBinding(std::shared_ptr<facebook::react::RuntimeScheduler> runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
6625+
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> createAndInstallIfNeeded(facebook::jsi::Runtime& runtime, const std::shared_ptr<facebook::react::RuntimeScheduler>& runtimeScheduler, std::shared_ptr<facebook::react::CallInvoker> callInvoker = nullptr);
66266626
public static std::shared_ptr<facebook::react::RuntimeSchedulerBinding> getBinding(facebook::jsi::Runtime& runtime);
6627+
public std::shared_ptr<facebook::react::CallInvoker> getCallInvoker() noexcept;
66276628
public std::shared_ptr<facebook::react::RuntimeScheduler> getRuntimeScheduler() noexcept;
66286629
public virtual facebook::jsi::Value get(facebook::jsi::Runtime& runtime, const facebook::jsi::PropNameID& name) override;
66296630
}
66306631

6631-
class facebook::react::RuntimeSchedulerCallInvoker : public facebook::react::CallInvoker {
6632-
public RuntimeSchedulerCallInvoker(std::weak_ptr<facebook::react::RuntimeScheduler> runtimeScheduler);
6633-
public virtual void invokeAsync(facebook::react::CallFunc&& func) noexcept override;
6634-
public virtual void invokeAsync(facebook::react::SchedulerPriority priority, facebook::react::CallFunc&& func) noexcept override;
6635-
public virtual void invokeSync(facebook::react::CallFunc&& func) override;
6636-
}
6637-
66386632
class facebook::react::RuntimeSchedulerEventTimingDelegate {
66396633
public virtual void dispatchPendingEventTimingEntries(facebook::react::HighResTimeStamp taskEndTime, const std::unordered_set<facebook::react::SurfaceId>& surfaceIdsWithPendingRenderingUpdates) = 0;
66406634
public virtual ~RuntimeSchedulerEventTimingDelegate() = default;

0 commit comments

Comments
 (0)