mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Decouple TimerExecutor creation from ReactInstance (#53569)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53569 Simplify construction to save a JNI call, slightly more efficient on binary size too (1KiB hah) Changelog: [Internal] Reviewed By: rshest Differential Revision: D81445834 fbshipit-source-id: b0ec84d5e04d364e34eef4c3b712c62f878325cf
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f170db412b
commit
dc54eaebac
+9
-4
@@ -7,15 +7,20 @@
|
||||
|
||||
package com.facebook.react.runtime
|
||||
|
||||
import com.facebook.jni.HybridData
|
||||
import com.facebook.jni.annotations.DoNotStripAny
|
||||
import com.facebook.jni.HybridClassBase
|
||||
import com.facebook.jni.annotations.DoNotStrip
|
||||
import com.facebook.react.bridge.WritableArray
|
||||
import com.facebook.react.bridge.WritableNativeArray
|
||||
import com.facebook.react.modules.core.JavaScriptTimerExecutor
|
||||
import com.facebook.soloader.SoLoader
|
||||
|
||||
@DoNotStripAny
|
||||
internal class JSTimerExecutor(private val mHybridData: HybridData) : JavaScriptTimerExecutor {
|
||||
@DoNotStrip
|
||||
internal class JSTimerExecutor() : HybridClassBase(), JavaScriptTimerExecutor {
|
||||
init {
|
||||
initHybrid()
|
||||
}
|
||||
|
||||
private external fun initHybrid()
|
||||
|
||||
private external fun callTimers(timerIDs: WritableNativeArray)
|
||||
|
||||
|
||||
+1
-5
@@ -76,7 +76,6 @@ import java.util.ArrayList
|
||||
import java.util.HashMap
|
||||
import java.util.HashSet
|
||||
import kotlin.collections.Collection
|
||||
import kotlin.jvm.JvmStatic
|
||||
|
||||
/**
|
||||
* A replacement for [com.facebook.react.bridge.CatalystInstance] responsible for creating and
|
||||
@@ -126,7 +125,7 @@ internal class ReactInstance(
|
||||
ReactChoreographer.initialize(AndroidChoreographerProvider.getInstance())
|
||||
devSupportManager.startInspector()
|
||||
|
||||
val jsTimerExecutor = createJSTimerExecutor()
|
||||
val jsTimerExecutor = JSTimerExecutor()
|
||||
javaTimerManager =
|
||||
JavaTimerManager(
|
||||
context,
|
||||
@@ -182,7 +181,6 @@ internal class ReactInstance(
|
||||
getJSCallInvokerHolder(),
|
||||
getNativeMethodCallInvokerHolder(),
|
||||
)
|
||||
|
||||
Systrace.endSection(Systrace.TRACE_TAG_REACT)
|
||||
|
||||
// Set up Fabric
|
||||
@@ -633,7 +631,5 @@ internal class ReactInstance(
|
||||
SystraceMessage.endSection(Systrace.TRACE_TAG_REACT).flush()
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic @DoNotStrip private external fun createJSTimerExecutor(): JSTimerExecutor
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
|
||||
namespace facebook::react {
|
||||
|
||||
void JJSTimerExecutor::initHybrid(
|
||||
jni::alias_ref<JJSTimerExecutor::jhybridobject> jobj) {
|
||||
setCxxInstance(jobj);
|
||||
}
|
||||
|
||||
void JJSTimerExecutor::setTimerManager(
|
||||
std::weak_ptr<TimerManager> timerManager) {
|
||||
timerManager_ = timerManager;
|
||||
@@ -28,6 +33,7 @@ void JJSTimerExecutor::callTimers(WritableNativeArray* timerIDs) {
|
||||
void JJSTimerExecutor::registerNatives() {
|
||||
registerHybrid({
|
||||
makeNativeMethod("callTimers", JJSTimerExecutor::callTimers),
|
||||
makeNativeMethod("initHybrid", JJSTimerExecutor::initHybrid),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -17,18 +17,20 @@ namespace facebook::react {
|
||||
|
||||
class JJSTimerExecutor : public jni::HybridClass<JJSTimerExecutor> {
|
||||
public:
|
||||
JJSTimerExecutor() = default;
|
||||
|
||||
constexpr static auto kJavaDescriptor =
|
||||
"Lcom/facebook/react/runtime/JSTimerExecutor;";
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
static void initHybrid(jni::alias_ref<jhybridobject> jobj);
|
||||
|
||||
void setTimerManager(std::weak_ptr<TimerManager> timerManager);
|
||||
|
||||
void callTimers(WritableNativeArray* timerIDs);
|
||||
|
||||
private:
|
||||
JJSTimerExecutor() = default;
|
||||
|
||||
friend HybridBase;
|
||||
|
||||
std::weak_ptr<TimerManager> timerManager_;
|
||||
|
||||
@@ -168,12 +168,6 @@ JReactInstance::getNativeMethodCallInvokerHolder() {
|
||||
return nativeMethodCallInvokerHolder_;
|
||||
}
|
||||
|
||||
jni::global_ref<JJSTimerExecutor::javaobject>
|
||||
JReactInstance::createJSTimerExecutor(
|
||||
jni::alias_ref<jhybridobject> /* unused */) {
|
||||
return jni::make_global(JJSTimerExecutor::newObjectCxxArgs());
|
||||
}
|
||||
|
||||
void JReactInstance::callFunctionOnModule(
|
||||
const std::string& moduleName,
|
||||
const std::string& methodName,
|
||||
@@ -217,8 +211,6 @@ void JReactInstance::unregisterFromInspector() {
|
||||
void JReactInstance::registerNatives() {
|
||||
registerHybrid({
|
||||
makeNativeMethod("initHybrid", JReactInstance::initHybrid),
|
||||
makeNativeMethod(
|
||||
"createJSTimerExecutor", JReactInstance::createJSTimerExecutor),
|
||||
makeNativeMethod(
|
||||
"loadJSBundleFromAssets", JReactInstance::loadJSBundleFromAssets),
|
||||
makeNativeMethod(
|
||||
|
||||
@@ -50,12 +50,6 @@ class JReactInstance : public jni::HybridClass<JReactInstance> {
|
||||
jni::alias_ref<JReactHostInspectorTarget::javaobject>
|
||||
jReactHostInspectorTarget);
|
||||
|
||||
/*
|
||||
* Instantiates and returns an instance of `JSTimerExecutor`.
|
||||
*/
|
||||
static jni::global_ref<JJSTimerExecutor::javaobject> createJSTimerExecutor(
|
||||
jni::alias_ref<jhybridobject> /* unused */);
|
||||
|
||||
static void registerNatives();
|
||||
|
||||
void loadJSBundleFromAssets(
|
||||
|
||||
Reference in New Issue
Block a user