Skip to content

Commit ea6c7b8

Browse files
committed
refactor(Worklets): Move messageQueue to Worklets (#6577)
<!-- Thanks for submitting a pull request! We appreciate you spending the time to work on these changes. Please follow the template so that the reviewers can easily understand what the code changes affect. --> ## Summary Moving `MessageQueueThread` to Worklets. It still has the name `REAMessageThread` or similar in some places. This will be addressed in the following PR. ## Test plan - [x] iOS 0.76 paper/fabric - [x] android 0.76 paper/fabric CI does the rest.
1 parent e9363bc commit ea6c7b8

File tree

18 files changed

+60
-81
lines changed

18 files changed

+60
-81
lines changed

packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ NativeReanimatedModule::NativeReanimatedModule(
5555
const std::shared_ptr<NativeWorkletsModule> &nativeWorkletsModule,
5656
jsi::Runtime &rnRuntime,
5757
const std::shared_ptr<JSScheduler> &jsScheduler,
58-
const std::shared_ptr<MessageQueueThread> &jsQueue,
5958
const std::shared_ptr<UIScheduler> &uiScheduler,
6059
const PlatformDepMethodsHolder &platformDepMethodsHolder,
6160
const bool isBridgeless,
@@ -64,14 +63,13 @@ NativeReanimatedModule::NativeReanimatedModule(
6463
isBridgeless ? nullptr : jsScheduler->getJSCallInvoker()),
6564
isBridgeless_(isBridgeless),
6665
isReducedMotion_(isReducedMotion),
67-
jsQueue_(jsQueue),
6866
nativeWorkletsModule_(nativeWorkletsModule),
6967
jsScheduler_(jsScheduler),
7068
uiScheduler_(uiScheduler),
7169
valueUnpackerCode_(nativeWorkletsModule->getValueUnpackerCode()),
7270
uiWorkletRuntime_(std::make_shared<WorkletRuntime>(
7371
rnRuntime,
74-
jsQueue,
72+
nativeWorkletsModule->getJSQueue(),
7573
jsScheduler_,
7674
"Reanimated UI runtime",
7775
true /* supportsLocking */,
@@ -233,7 +231,7 @@ jsi::Value NativeReanimatedModule::createWorkletRuntime(
233231
const jsi::Value &initializer) {
234232
auto workletRuntime = std::make_shared<WorkletRuntime>(
235233
rt,
236-
jsQueue_,
234+
nativeWorkletsModule_->getJSQueue(),
237235
jsScheduler_,
238236
name.asString(rt).utf8(rt),
239237
false /* supportsLocking */,

packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {
3636
const std::shared_ptr<NativeWorkletsModule> &nativeWorkletsModule,
3737
jsi::Runtime &rnRuntime,
3838
const std::shared_ptr<JSScheduler> &jsScheduler,
39-
const std::shared_ptr<MessageQueueThread> &jsQueue,
4039
const std::shared_ptr<UIScheduler> &uiScheduler,
4140
const PlatformDepMethodsHolder &platformDepMethodsHolder,
4241
const bool isBridgeless,
@@ -194,7 +193,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {
194193

195194
const bool isBridgeless_;
196195
const bool isReducedMotion_;
197-
const std::shared_ptr<MessageQueueThread> jsQueue_;
198196
const std::shared_ptr<NativeWorkletsModule> nativeWorkletsModule_;
199197
const std::shared_ptr<JSScheduler> jsScheduler_;
200198
const std::shared_ptr<UIScheduler> uiScheduler_;

packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ using namespace facebook;
1818

1919
namespace worklets {
2020

21-
NativeWorkletsModule::NativeWorkletsModule(const std::string &valueUnpackerCode)
21+
NativeWorkletsModule::NativeWorkletsModule(
22+
const std::string &valueUnpackerCode,
23+
const std::shared_ptr<MessageQueueThread> &jsQueue)
2224
: NativeWorkletsModuleSpec(nullptr),
23-
valueUnpackerCode_(valueUnpackerCode) {}
25+
valueUnpackerCode_(valueUnpackerCode),
26+
jsQueue_(jsQueue) {}
2427

2528
NativeWorkletsModule::~NativeWorkletsModule() {}
2629

packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
#include <cxxreact/MessageQueueThread.h>
44
#include <worklets/NativeModules/NativeWorkletsModuleSpec.h>
55
#include <worklets/Tools/SingleInstanceChecker.h>
6+
#include <worklets/WorkletRuntime/WorkletRuntime.h>
7+
#include <memory>
68
#include <string>
79

810
namespace worklets {
911

1012
class NativeWorkletsModule : public NativeWorkletsModuleSpec {
1113
public:
12-
explicit NativeWorkletsModule(const std::string &valueUnpackerCode);
14+
explicit NativeWorkletsModule(
15+
const std::string &valueUnpackerCode,
16+
const std::shared_ptr<MessageQueueThread> &jsQueue);
1317

1418
~NativeWorkletsModule();
1519

@@ -23,8 +27,13 @@ class NativeWorkletsModule : public NativeWorkletsModuleSpec {
2327
return valueUnpackerCode_;
2428
}
2529

30+
[[nodiscard]] inline std::shared_ptr<MessageQueueThread> getJSQueue() const {
31+
return jsQueue_;
32+
}
33+
2634
private:
2735
const std::string valueUnpackerCode_;
36+
const std::shared_ptr<MessageQueueThread> jsQueue_;
2837
#ifndef NDEBUG
2938
SingleInstanceChecker<NativeWorkletsModule> singleInstanceChecker_;
3039
#endif // NDEBUG

packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <fbjni/fbjni.h>
1515
#include <jsi/JSIDynamic.h>
1616
#include <jsi/jsi.h>
17-
#include <react/jni/JMessageQueueThread.h>
1817
#include <react/jni/ReadableNativeArray.h>
1918
#include <react/jni/ReadableNativeMap.h>
2019

@@ -33,8 +32,7 @@ NativeProxy::NativeProxy(
3332
jsi::Runtime *rnRuntime,
3433
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
3534
const std::shared_ptr<UIScheduler> &uiScheduler,
36-
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
37-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
35+
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations
3836
#ifdef RCT_NEW_ARCH_ENABLED
3937
,
4038
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
@@ -47,7 +45,6 @@ NativeProxy::NativeProxy(
4745
nativeWorkletsModule,
4846
*rnRuntime,
4947
std::make_shared<JSScheduler>(*rnRuntime, jsCallInvoker),
50-
std::make_shared<JMessageQueueThread>(messageQueueThread),
5148
uiScheduler,
5249
getPlatformDependentMethods(),
5350
/* isBridgeless */ false,
@@ -66,7 +63,6 @@ NativeProxy::NativeProxy(
6663
RuntimeExecutor runtimeExecutor,
6764
const std::shared_ptr<UIScheduler> &uiScheduler,
6865
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
69-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
7066
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
7167
fabricUIManager)
7268
: javaPart_(jni::make_global(jThis)),
@@ -75,7 +71,6 @@ NativeProxy::NativeProxy(
7571
nativeWorkletsModule,
7672
*rnRuntime,
7773
std::make_shared<JSScheduler>(*rnRuntime, runtimeExecutor),
78-
std::make_shared<JMessageQueueThread>(messageQueueThread),
7974
uiScheduler,
8075
getPlatformDependentMethods(),
8176
/* isBridgeless */ true,
@@ -119,8 +114,7 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
119114
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
120115
jsCallInvokerHolder,
121116
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
122-
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
123-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
117+
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations
124118
#ifdef RCT_NEW_ARCH_ENABLED
125119
,
126120
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
@@ -137,10 +131,9 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
137131
(jsi::Runtime *)jsContext,
138132
jsCallInvoker,
139133
uiScheduler,
140-
make_global(layoutAnimations),
141-
messageQueueThread
134+
make_global(layoutAnimations)
142135
#ifdef RCT_NEW_ARCH_ENABLED
143-
,
136+
,
144137
fabricUIManager
145138
#endif
146139
);
@@ -154,7 +147,6 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybridBridgeless(
154147
jni::alias_ref<react::JRuntimeExecutor::javaobject> runtimeExecutorHolder,
155148
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
156149
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
157-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
158150
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
159151
fabricUIManager) {
160152
auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler();
@@ -168,7 +160,6 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybridBridgeless(
168160
runtimeExecutor,
169161
uiScheduler,
170162
make_global(layoutAnimations),
171-
messageQueueThread,
172163
fabricUIManager);
173164
}
174165
#endif // RCT_NEW_ARCH_ENABLED

packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include <fbjni/fbjni.h>
1313
#include <jsi/jsi.h>
1414
#include <react/jni/CxxModuleWrapper.h>
15-
#include <react/jni/JMessageQueueThread.h>
1615
#include <react/jni/JavaScriptExecutorHolder.h>
1716
#include <react/jni/WritableNativeMap.h>
1817

@@ -155,8 +154,7 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
155154
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
156155
jsCallInvokerHolder,
157156
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
158-
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
159-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
157+
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations
160158
#ifdef RCT_NEW_ARCH_ENABLED
161159
,
162160
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
@@ -172,7 +170,6 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
172170
jni::alias_ref<react::JRuntimeExecutor::javaobject> runtimeExecutorHolder,
173171
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
174172
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
175-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
176173
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
177174
fabricUIManager);
178175
#endif // RCT_NEW_ARCH_ENABLED
@@ -282,8 +279,7 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
282279
jsi::Runtime *rnRuntime,
283280
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
284281
const std::shared_ptr<UIScheduler> &uiScheduler,
285-
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
286-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
282+
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations
287283
#ifdef RCT_NEW_ARCH_ENABLED
288284
,
289285
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
@@ -299,7 +295,6 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
299295
RuntimeExecutor runtimeExecutor,
300296
const std::shared_ptr<UIScheduler> &uiScheduler,
301297
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
302-
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
303298
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
304299
fabricUIManager);
305300

packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,23 @@ using namespace react;
2020
WorkletsModule::WorkletsModule(
2121
jni::alias_ref<WorkletsModule::javaobject> jThis,
2222
jsi::Runtime *rnRuntime,
23-
const std::string &valueUnpackerCode)
23+
const std::string &valueUnpackerCode,
24+
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread)
2425
: javaPart_(jni::make_global(jThis)),
2526
rnRuntime_(rnRuntime),
26-
nativeWorkletsModule_(
27-
std::make_shared<NativeWorkletsModule>(valueUnpackerCode)) {
27+
nativeWorkletsModule_(std::make_shared<NativeWorkletsModule>(
28+
valueUnpackerCode,
29+
std::make_shared<JMessageQueueThread>(messageQueueThread))) {
2830
RNRuntimeWorkletDecorator::decorate(*rnRuntime_, nativeWorkletsModule_);
2931
}
3032

3133
jni::local_ref<WorkletsModule::jhybriddata> WorkletsModule::initHybrid(
3234
jni::alias_ref<jhybridobject> jThis,
3335
jlong jsContext,
34-
const std::string &valueUnpackerCode) {
35-
return makeCxxInstance(jThis, (jsi::Runtime *)jsContext, valueUnpackerCode);
36+
const std::string &valueUnpackerCode,
37+
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread) {
38+
return makeCxxInstance(
39+
jThis, (jsi::Runtime *)jsContext, valueUnpackerCode, messageQueueThread);
3640
}
3741

3842
void WorkletsModule::registerNatives() {

packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class WorkletsModule : public jni::HybridClass<WorkletsModule> {
3131
static jni::local_ref<jhybriddata> initHybrid(
3232
jni::alias_ref<jhybridobject> jThis,
3333
jlong jsContext,
34-
const std::string &valueUnpackerCode);
34+
const std::string &valueUnpackerCode,
35+
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread);
3536

3637
static void registerNatives();
3738

@@ -48,7 +49,8 @@ class WorkletsModule : public jni::HybridClass<WorkletsModule> {
4849
explicit WorkletsModule(
4950
jni::alias_ref<WorkletsModule::jhybridobject> jThis,
5051
jsi::Runtime *rnRuntime,
51-
const std::string &valueUnpackerCode);
52+
const std::string &valueUnpackerCode,
53+
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread);
5254
};
5355

5456
} // namespace worklets

packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
import com.facebook.proguard.annotations.DoNotStrip;
66
import com.facebook.react.bridge.ReactApplicationContext;
77
import com.facebook.react.bridge.ReactMethod;
8+
import com.facebook.react.bridge.queue.MessageQueueThread;
89
import com.facebook.react.common.annotations.FrameworkAPI;
910
import com.facebook.react.module.annotations.ReactModule;
1011
import com.facebook.soloader.SoLoader;
1112
import com.swmansion.reanimated.NativeWorkletsModuleSpec;
13+
import com.swmansion.reanimated.ReanimatedMessageQueueThread;
1214
import java.util.Objects;
1315

1416
@ReactModule(name = WorkletsModule.NAME)
@@ -28,11 +30,15 @@ protected HybridData getHybridData() {
2830
return mHybridData;
2931
}
3032

33+
private final ReanimatedMessageQueueThread mMessageQueueThread =
34+
new ReanimatedMessageQueueThread();
35+
3136
/**
3237
* @noinspection JavaJniMissingFunction
3338
*/
3439
@OptIn(markerClass = FrameworkAPI.class)
35-
private native HybridData initHybrid(long jsContext, String valueUnpackerCode);
40+
private native HybridData initHybrid(
41+
long jsContext, String valueUnpackerCode, MessageQueueThread messageQueueThread);
3642

3743
public WorkletsModule(ReactApplicationContext reactContext) {
3844
super(reactContext);
@@ -44,7 +50,7 @@ public boolean installTurboModule(String valueUnpackerCode) {
4450
var context = getReactApplicationContext();
4551
var jsContext = Objects.requireNonNull(context.getJavaScriptContextHolder()).get();
4652

47-
mHybridData = initHybrid(jsContext, valueUnpackerCode);
53+
mHybridData = initHybrid(jsContext, valueUnpackerCode, mMessageQueueThread);
4854

4955
return true;
5056
}

packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.facebook.proguard.annotations.DoNotStrip;
66
import com.facebook.react.bridge.ReactApplicationContext;
77
import com.facebook.react.bridge.RuntimeExecutor;
8-
import com.facebook.react.bridge.queue.MessageQueueThread;
98
import com.facebook.react.common.annotations.FrameworkAPI;
109
import com.facebook.react.fabric.FabricUIManager;
1110
import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
@@ -33,8 +32,6 @@ public class NativeProxy extends NativeProxyCommon {
3332

3433
LayoutAnimations LayoutAnimations = new LayoutAnimations(context);
3534

36-
ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread();
37-
3835
if (context.isBridgeless()) {
3936
RuntimeExecutor runtimeExecutor = context.getRuntimeExecutor();
4037
mHybridData =
@@ -44,7 +41,6 @@ public class NativeProxy extends NativeProxyCommon {
4441
runtimeExecutor,
4542
mAndroidUIScheduler,
4643
LayoutAnimations,
47-
messageQueueThread,
4844
fabricUIManager);
4945
} else {
5046
CallInvokerHolderImpl callInvokerHolder =
@@ -56,7 +52,6 @@ public class NativeProxy extends NativeProxyCommon {
5652
callInvokerHolder,
5753
mAndroidUIScheduler,
5854
LayoutAnimations,
59-
messageQueueThread,
6055
fabricUIManager);
6156
}
6257
prepareLayoutAnimations(LayoutAnimations);
@@ -72,7 +67,6 @@ private native HybridData initHybrid(
7267
CallInvokerHolderImpl jsCallInvokerHolder,
7368
AndroidUIScheduler androidUIScheduler,
7469
LayoutAnimations LayoutAnimations,
75-
MessageQueueThread messageQueueThread,
7670
FabricUIManager fabricUIManager);
7771

7872
private native HybridData initHybridBridgeless(
@@ -81,7 +75,6 @@ private native HybridData initHybridBridgeless(
8175
RuntimeExecutor runtimeExecutor,
8276
AndroidUIScheduler androidUIScheduler,
8377
LayoutAnimations LayoutAnimations,
84-
MessageQueueThread messageQueueThread,
8578
FabricUIManager fabricUIManager);
8679

8780
public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag);

0 commit comments

Comments
 (0)