mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add option to use RuntimeScheduler in TurboModules
Summary: changelog: [internal] Reviewed By: RSNara Differential Revision: D31145372 fbshipit-source-id: b1d9473d5006d055d1116f71f65899293fb85c56
This commit is contained in:
committed by
Facebook GitHub Bot
parent
3516090174
commit
ea3e244668
@@ -1368,10 +1368,6 @@ public class ReactInstanceManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (ReactFeatureFlags.enableRuntimeScheduler) {
|
||||
catalystInstance.installRuntimeScheduler();
|
||||
}
|
||||
|
||||
if (mJSIModulePackage != null) {
|
||||
catalystInstance.addJSIModules(
|
||||
mJSIModulePackage.getJSIModules(
|
||||
|
||||
@@ -113,8 +113,6 @@ public interface CatalystInstance
|
||||
|
||||
RuntimeScheduler getRuntimeScheduler();
|
||||
|
||||
void installRuntimeScheduler();
|
||||
|
||||
void addJSIModules(List<JSIModuleSpec> jsiModules);
|
||||
|
||||
/**
|
||||
|
||||
@@ -108,7 +108,8 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
// C++ parts
|
||||
private final HybridData mHybridData;
|
||||
|
||||
private static native HybridData initHybrid();
|
||||
private static native HybridData initHybrid(
|
||||
boolean enableRuntimeScheduler, boolean enableRuntimeSchedulerInTurboModule);
|
||||
|
||||
public native CallInvokerHolderImpl getJSCallInvokerHolder();
|
||||
|
||||
@@ -123,7 +124,15 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
FLog.d(ReactConstants.TAG, "Initializing React Xplat Bridge.");
|
||||
Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "createCatalystInstanceImpl");
|
||||
|
||||
mHybridData = initHybrid();
|
||||
if (ReactFeatureFlags.enableRuntimeSchedulerInTurboModule
|
||||
&& !ReactFeatureFlags.enableRuntimeScheduler) {
|
||||
Assertions.assertUnreachable();
|
||||
}
|
||||
|
||||
mHybridData =
|
||||
initHybrid(
|
||||
ReactFeatureFlags.enableRuntimeScheduler,
|
||||
ReactFeatureFlags.enableRuntimeSchedulerInTurboModule);
|
||||
|
||||
mReactQueueConfiguration =
|
||||
ReactQueueConfigurationImpl.create(
|
||||
@@ -560,8 +569,6 @@ public class CatalystInstanceImpl implements CatalystInstance {
|
||||
|
||||
public native RuntimeScheduler getRuntimeScheduler();
|
||||
|
||||
public native void installRuntimeScheduler();
|
||||
|
||||
@Override
|
||||
public void addJSIModules(List<JSIModuleSpec> jsiModules) {
|
||||
mJSIModuleRegistry.registerModules(jsiModules);
|
||||
|
||||
@@ -72,6 +72,8 @@ public class ReactFeatureFlags {
|
||||
|
||||
public static boolean enableRuntimeScheduler = false;
|
||||
|
||||
public static boolean enableRuntimeSchedulerInTurboModule = false;
|
||||
|
||||
/** Enables a more aggressive cleanup during destruction of ReactContext */
|
||||
public static boolean enableReactContextCleanupFix = false;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <glog/logging.h>
|
||||
#include <react/renderer/runtimescheduler/RuntimeScheduler.h>
|
||||
#include <react/renderer/runtimescheduler/RuntimeSchedulerBinding.h>
|
||||
#include <react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h>
|
||||
|
||||
#include <logger/react_native_log.h>
|
||||
|
||||
@@ -92,12 +93,21 @@ class JInstanceCallback : public InstanceCallback {
|
||||
} // namespace
|
||||
|
||||
jni::local_ref<CatalystInstanceImpl::jhybriddata>
|
||||
CatalystInstanceImpl::initHybrid(jni::alias_ref<jclass>) {
|
||||
return makeCxxInstance();
|
||||
CatalystInstanceImpl::initHybrid(
|
||||
jni::alias_ref<jclass>,
|
||||
bool enableRuntimeScheduler,
|
||||
bool enableRuntimeSchedulerInTurboModule) {
|
||||
return makeCxxInstance(
|
||||
enableRuntimeScheduler, enableRuntimeSchedulerInTurboModule);
|
||||
}
|
||||
|
||||
CatalystInstanceImpl::CatalystInstanceImpl()
|
||||
: instance_(std::make_unique<Instance>()) {}
|
||||
CatalystInstanceImpl::CatalystInstanceImpl(
|
||||
bool enableRuntimeScheduler,
|
||||
bool enableRuntimeSchedulerInTurboModule)
|
||||
: instance_(std::make_unique<Instance>()),
|
||||
enableRuntimeScheduler_(enableRuntimeScheduler),
|
||||
enableRuntimeSchedulerInTurboModule_(
|
||||
enableRuntimeScheduler && enableRuntimeSchedulerInTurboModule) {}
|
||||
|
||||
void CatalystInstanceImpl::warnOnLegacyNativeModuleSystemUse() {
|
||||
CxxNativeModule::setShouldWarnOnUse(true);
|
||||
@@ -140,9 +150,6 @@ void CatalystInstanceImpl::registerNatives() {
|
||||
"getRuntimeExecutor", CatalystInstanceImpl::getRuntimeExecutor),
|
||||
makeNativeMethod(
|
||||
"getRuntimeScheduler", CatalystInstanceImpl::getRuntimeScheduler),
|
||||
makeNativeMethod(
|
||||
"installRuntimeScheduler",
|
||||
CatalystInstanceImpl::installRuntimeScheduler),
|
||||
makeNativeMethod(
|
||||
"warnOnLegacyNativeModuleSystemUse",
|
||||
CatalystInstanceImpl::warnOnLegacyNativeModuleSystemUse),
|
||||
@@ -347,10 +354,18 @@ void CatalystInstanceImpl::handleMemoryPressure(int pressureLevel) {
|
||||
jni::alias_ref<CallInvokerHolder::javaobject>
|
||||
CatalystInstanceImpl::getJSCallInvokerHolder() {
|
||||
if (!jsCallInvokerHolder_) {
|
||||
jsCallInvokerHolder_ = jni::make_global(
|
||||
CallInvokerHolder::newObjectCxxArgs(instance_->getJSCallInvoker()));
|
||||
if (enableRuntimeSchedulerInTurboModule_) {
|
||||
auto runtimeScheduler = getRuntimeScheduler();
|
||||
auto runtimeSchedulerCallInvoker =
|
||||
std::make_shared<RuntimeSchedulerCallInvoker>(
|
||||
runtimeScheduler->cthis()->get());
|
||||
jsCallInvokerHolder_ = jni::make_global(
|
||||
CallInvokerHolder::newObjectCxxArgs(runtimeSchedulerCallInvoker));
|
||||
} else {
|
||||
jsCallInvokerHolder_ = jni::make_global(
|
||||
CallInvokerHolder::newObjectCxxArgs(instance_->getJSCallInvoker()));
|
||||
}
|
||||
}
|
||||
|
||||
return jsCallInvokerHolder_;
|
||||
}
|
||||
|
||||
@@ -397,11 +412,7 @@ CatalystInstanceImpl::getRuntimeExecutor() {
|
||||
|
||||
jni::alias_ref<JRuntimeScheduler::javaobject>
|
||||
CatalystInstanceImpl::getRuntimeScheduler() {
|
||||
return runtimeScheduler_;
|
||||
}
|
||||
|
||||
void CatalystInstanceImpl::installRuntimeScheduler() {
|
||||
if (!runtimeScheduler_) {
|
||||
if (enableRuntimeScheduler_ && !runtimeScheduler_) {
|
||||
auto runtimeExecutor = instance_->getRuntimeExecutor();
|
||||
auto runtimeScheduler = std::make_shared<RuntimeScheduler>(runtimeExecutor);
|
||||
|
||||
@@ -413,6 +424,8 @@ void CatalystInstanceImpl::installRuntimeScheduler() {
|
||||
runtime, runtimeScheduler);
|
||||
});
|
||||
}
|
||||
|
||||
return runtimeScheduler_;
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -37,7 +37,10 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
|
||||
static constexpr auto kJavaDescriptor =
|
||||
"Lcom/facebook/react/bridge/CatalystInstanceImpl;";
|
||||
|
||||
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jclass>);
|
||||
static jni::local_ref<jhybriddata> initHybrid(
|
||||
jni::alias_ref<jclass>,
|
||||
bool enableRuntimeScheduler,
|
||||
bool enableRuntimeSchedulerInTurboModule);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
@@ -48,7 +51,9 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
|
||||
private:
|
||||
friend HybridBase;
|
||||
|
||||
CatalystInstanceImpl();
|
||||
CatalystInstanceImpl(
|
||||
bool enableRuntimeScheduler,
|
||||
bool enableRuntimeSchedulerInTurboModule);
|
||||
|
||||
void initializeBridge(
|
||||
jni::alias_ref<ReactCallback::javaobject> callback,
|
||||
@@ -100,11 +105,12 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
|
||||
jni::alias_ref<CallInvokerHolder::javaobject> getNativeCallInvokerHolder();
|
||||
jni::alias_ref<JRuntimeExecutor::javaobject> getRuntimeExecutor();
|
||||
jni::alias_ref<JRuntimeScheduler::javaobject> getRuntimeScheduler();
|
||||
void installRuntimeScheduler();
|
||||
void setGlobalVariable(std::string propName, std::string &&jsonValue);
|
||||
jlong getJavaScriptContext();
|
||||
void handleMemoryPressure(int pressureLevel);
|
||||
|
||||
void createAndInstallRuntimeSchedulerIfNecessary();
|
||||
|
||||
// This should be the only long-lived strong reference, but every C++ class
|
||||
// will have a weak reference.
|
||||
std::shared_ptr<Instance> instance_;
|
||||
@@ -114,6 +120,9 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
|
||||
jni::global_ref<CallInvokerHolder::javaobject> nativeCallInvokerHolder_;
|
||||
jni::global_ref<JRuntimeExecutor::javaobject> runtimeExecutor_;
|
||||
jni::global_ref<JRuntimeScheduler::javaobject> runtimeScheduler_;
|
||||
|
||||
bool const enableRuntimeScheduler_;
|
||||
bool const enableRuntimeSchedulerInTurboModule_;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
|
||||
Reference in New Issue
Block a user