Skip to content

Commit 4f70c14

Browse files
javachefacebook-github-bot
authored andcommitted
Decouple TimerExecutor creation from ReactInstance (facebook#53569)
Summary: Simplify construction to save a JNI call, slightly more efficient on binary size too (1KiB hah) Changelog: [Internal] Differential Revision: D81445834
1 parent b2b992c commit 4f70c14

File tree

6 files changed

+20
-25
lines changed

6 files changed

+20
-25
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/JSTimerExecutor.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,20 @@
77

88
package com.facebook.react.runtime
99

10-
import com.facebook.jni.HybridData
11-
import com.facebook.jni.annotations.DoNotStripAny
10+
import com.facebook.jni.HybridClassBase
11+
import com.facebook.jni.annotations.DoNotStrip
1212
import com.facebook.react.bridge.WritableArray
1313
import com.facebook.react.bridge.WritableNativeArray
1414
import com.facebook.react.modules.core.JavaScriptTimerExecutor
1515
import com.facebook.soloader.SoLoader
1616

17-
@DoNotStripAny
18-
internal class JSTimerExecutor(private val mHybridData: HybridData) : JavaScriptTimerExecutor {
17+
@DoNotStrip
18+
internal class JSTimerExecutor() : HybridClassBase(), JavaScriptTimerExecutor {
19+
init {
20+
initHybrid()
21+
}
22+
23+
private external fun initHybrid()
1924

2025
private external fun callTimers(timerIDs: WritableNativeArray)
2126

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ import java.util.ArrayList
7676
import java.util.HashMap
7777
import java.util.HashSet
7878
import kotlin.collections.Collection
79-
import kotlin.jvm.JvmStatic
8079

8180
/**
8281
* A replacement for [com.facebook.react.bridge.CatalystInstance] responsible for creating and
@@ -126,7 +125,7 @@ internal class ReactInstance(
126125
ReactChoreographer.initialize(AndroidChoreographerProvider.getInstance())
127126
devSupportManager.startInspector()
128127

129-
val jsTimerExecutor = createJSTimerExecutor()
128+
val jsTimerExecutor = JSTimerExecutor()
130129
javaTimerManager =
131130
JavaTimerManager(
132131
context,
@@ -182,7 +181,6 @@ internal class ReactInstance(
182181
getJSCallInvokerHolder(),
183182
getNativeMethodCallInvokerHolder(),
184183
)
185-
186184
Systrace.endSection(Systrace.TRACE_TAG_REACT)
187185

188186
// Set up Fabric
@@ -633,7 +631,5 @@ internal class ReactInstance(
633631
SystraceMessage.endSection(Systrace.TRACE_TAG_REACT).flush()
634632
}
635633
}
636-
637-
@JvmStatic @DoNotStrip private external fun createJSTimerExecutor(): JSTimerExecutor
638634
}
639635
}

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JJSTimerExecutor.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212

1313
namespace facebook::react {
1414

15+
void JJSTimerExecutor::initHybrid(
16+
jni::alias_ref<JJSTimerExecutor::jhybridobject> jobj) {
17+
setCxxInstance(jobj);
18+
}
19+
1520
void JJSTimerExecutor::setTimerManager(
1621
std::weak_ptr<TimerManager> timerManager) {
1722
timerManager_ = timerManager;
@@ -28,6 +33,7 @@ void JJSTimerExecutor::callTimers(WritableNativeArray* timerIDs) {
2833
void JJSTimerExecutor::registerNatives() {
2934
registerHybrid({
3035
makeNativeMethod("callTimers", JJSTimerExecutor::callTimers),
36+
makeNativeMethod("initHybrid", JJSTimerExecutor::initHybrid),
3137
});
3238
}
3339

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JJSTimerExecutor.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,20 @@ namespace facebook::react {
1717

1818
class JJSTimerExecutor : public jni::HybridClass<JJSTimerExecutor> {
1919
public:
20-
JJSTimerExecutor() = default;
21-
2220
constexpr static auto kJavaDescriptor =
2321
"Lcom/facebook/react/runtime/JSTimerExecutor;";
2422

2523
static void registerNatives();
2624

25+
static void initHybrid(jni::alias_ref<jhybridobject> jobj);
26+
2727
void setTimerManager(std::weak_ptr<TimerManager> timerManager);
2828

2929
void callTimers(WritableNativeArray* timerIDs);
3030

3131
private:
32+
JJSTimerExecutor() = default;
33+
3234
friend HybridBase;
3335

3436
std::weak_ptr<TimerManager> timerManager_;

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,6 @@ JReactInstance::getNativeMethodCallInvokerHolder() {
168168
return nativeMethodCallInvokerHolder_;
169169
}
170170

171-
jni::global_ref<JJSTimerExecutor::javaobject>
172-
JReactInstance::createJSTimerExecutor(
173-
jni::alias_ref<jhybridobject> /* unused */) {
174-
return jni::make_global(JJSTimerExecutor::newObjectCxxArgs());
175-
}
176-
177171
void JReactInstance::callFunctionOnModule(
178172
const std::string& moduleName,
179173
const std::string& methodName,
@@ -217,8 +211,6 @@ void JReactInstance::unregisterFromInspector() {
217211
void JReactInstance::registerNatives() {
218212
registerHybrid({
219213
makeNativeMethod("initHybrid", JReactInstance::initHybrid),
220-
makeNativeMethod(
221-
"createJSTimerExecutor", JReactInstance::createJSTimerExecutor),
222214
makeNativeMethod(
223215
"loadJSBundleFromAssets", JReactInstance::loadJSBundleFromAssets),
224216
makeNativeMethod(

packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,6 @@ class JReactInstance : public jni::HybridClass<JReactInstance> {
5050
jni::alias_ref<JReactHostInspectorTarget::javaobject>
5151
jReactHostInspectorTarget);
5252

53-
/*
54-
* Instantiates and returns an instance of `JSTimerExecutor`.
55-
*/
56-
static jni::global_ref<JJSTimerExecutor::javaobject> createJSTimerExecutor(
57-
jni::alias_ref<jhybridobject> /* unused */);
58-
5953
static void registerNatives();
6054

6155
void loadJSBundleFromAssets(

0 commit comments

Comments
 (0)