Skip to content

Commit 7c27f5d

Browse files
authored
refactor(Worklets): Move shareable creation to Worklets (#6576)
<!-- 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 `makeShareableClone` function from `NativeReanimatedModule` to `NativeWorkletsModule`. ## Test plan CI
1 parent e6ef338 commit 7c27f5d

File tree

16 files changed

+119
-159
lines changed

16 files changed

+119
-159
lines changed

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -253,15 +253,6 @@ jsi::Value NativeReanimatedModule::scheduleOnRuntime(
253253
return jsi::Value::undefined();
254254
}
255255

256-
jsi::Value NativeReanimatedModule::makeShareableClone(
257-
jsi::Runtime &rt,
258-
const jsi::Value &value,
259-
const jsi::Value &shouldRetainRemote,
260-
const jsi::Value &nativeStateSource) {
261-
return reanimated::makeShareableClone(
262-
rt, value, shouldRetainRemote, nativeStateSource);
263-
}
264-
265256
jsi::Value NativeReanimatedModule::registerEventHandler(
266257
jsi::Runtime &rt,
267258
const jsi::Value &worklet,

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {
4444

4545
~NativeReanimatedModule();
4646

47-
jsi::Value makeShareableClone(
48-
jsi::Runtime &rt,
49-
const jsi::Value &value,
50-
const jsi::Value &shouldRetainRemote,
51-
const jsi::Value &nativeStateSource) override;
52-
5347
void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) override;
5448
jsi::Value executeOnUIRuntimeSync(jsi::Runtime &rt, const jsi::Value &worklet)
5549
override;

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

Lines changed: 36 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,14 @@
22

33
#include <utility>
44

5-
#define SPEC_PREFIX(FN_NAME) __hostFunction_NativeReanimatedModuleSpec_##FN_NAME
5+
#define REANIMATED_SPEC_PREFIX(FN_NAME) \
6+
__hostFunction_NativeReanimatedModuleSpec_##FN_NAME
67

78
namespace reanimated {
89

9-
// SharedValue
10-
11-
static jsi::Value SPEC_PREFIX(makeShareableClone)(
12-
jsi::Runtime &rt,
13-
TurboModule &turboModule,
14-
const jsi::Value *args,
15-
size_t) {
16-
return static_cast<NativeReanimatedModuleSpec *>(&turboModule)
17-
->makeShareableClone(
18-
rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
19-
}
20-
2110
// scheduler
2211

23-
static jsi::Value SPEC_PREFIX(scheduleOnUI)(
12+
static jsi::Value REANIMATED_SPEC_PREFIX(scheduleOnUI)(
2413
jsi::Runtime &rt,
2514
TurboModule &turboModule,
2615
const jsi::Value *args,
@@ -30,7 +19,7 @@ static jsi::Value SPEC_PREFIX(scheduleOnUI)(
3019
return jsi::Value::undefined();
3120
}
3221

33-
static jsi::Value SPEC_PREFIX(executeOnUIRuntimeSync)(
22+
static jsi::Value REANIMATED_SPEC_PREFIX(executeOnUIRuntimeSync)(
3423
jsi::Runtime &rt,
3524
TurboModule &turboModule,
3625
const jsi::Value *args,
@@ -39,7 +28,7 @@ static jsi::Value SPEC_PREFIX(executeOnUIRuntimeSync)(
3928
->executeOnUIRuntimeSync(rt, std::move(args[0]));
4029
}
4130

42-
static jsi::Value SPEC_PREFIX(createWorkletRuntime)(
31+
static jsi::Value REANIMATED_SPEC_PREFIX(createWorkletRuntime)(
4332
jsi::Runtime &rt,
4433
TurboModule &turboModule,
4534
const jsi::Value *args,
@@ -48,7 +37,7 @@ static jsi::Value SPEC_PREFIX(createWorkletRuntime)(
4837
->createWorkletRuntime(rt, std::move(args[0]), std::move(args[1]));
4938
}
5039

51-
static jsi::Value SPEC_PREFIX(scheduleOnRuntime)(
40+
static jsi::Value REANIMATED_SPEC_PREFIX(scheduleOnRuntime)(
5241
jsi::Runtime &rt,
5342
TurboModule &turboModule,
5443
const jsi::Value *args,
@@ -57,7 +46,7 @@ static jsi::Value SPEC_PREFIX(scheduleOnRuntime)(
5746
->scheduleOnRuntime(rt, std::move(args[0]), std::move(args[1]));
5847
}
5948

60-
static jsi::Value SPEC_PREFIX(registerEventHandler)(
49+
static jsi::Value REANIMATED_SPEC_PREFIX(registerEventHandler)(
6150
jsi::Runtime &rt,
6251
TurboModule &turboModule,
6352
const jsi::Value *args,
@@ -67,7 +56,7 @@ static jsi::Value SPEC_PREFIX(registerEventHandler)(
6756
rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
6857
}
6958

70-
static jsi::Value SPEC_PREFIX(unregisterEventHandler)(
59+
static jsi::Value REANIMATED_SPEC_PREFIX(unregisterEventHandler)(
7160
jsi::Runtime &rt,
7261
TurboModule &turboModule,
7362
const jsi::Value *args,
@@ -77,7 +66,7 @@ static jsi::Value SPEC_PREFIX(unregisterEventHandler)(
7766
return jsi::Value::undefined();
7867
}
7968

80-
static jsi::Value SPEC_PREFIX(getViewProp)(
69+
static jsi::Value REANIMATED_SPEC_PREFIX(getViewProp)(
8170
jsi::Runtime &rt,
8271
TurboModule &turboModule,
8372
const jsi::Value *args,
@@ -88,7 +77,7 @@ static jsi::Value SPEC_PREFIX(getViewProp)(
8877
return jsi::Value::undefined();
8978
}
9079

91-
static jsi::Value SPEC_PREFIX(enableLayoutAnimations)(
80+
static jsi::Value REANIMATED_SPEC_PREFIX(enableLayoutAnimations)(
9281
jsi::Runtime &rt,
9382
TurboModule &turboModule,
9483
const jsi::Value *args,
@@ -98,7 +87,7 @@ static jsi::Value SPEC_PREFIX(enableLayoutAnimations)(
9887
return jsi::Value::undefined();
9988
}
10089

101-
static jsi::Value SPEC_PREFIX(registerSensor)(
90+
static jsi::Value REANIMATED_SPEC_PREFIX(registerSensor)(
10291
jsi::Runtime &rt,
10392
TurboModule &turboModule,
10493
const jsi::Value *args,
@@ -112,7 +101,7 @@ static jsi::Value SPEC_PREFIX(registerSensor)(
112101
std::move(args[3]));
113102
}
114103

115-
static jsi::Value SPEC_PREFIX(unregisterSensor)(
104+
static jsi::Value REANIMATED_SPEC_PREFIX(unregisterSensor)(
116105
jsi::Runtime &rt,
117106
TurboModule &turboModule,
118107
const jsi::Value *args,
@@ -122,7 +111,7 @@ static jsi::Value SPEC_PREFIX(unregisterSensor)(
122111
return jsi::Value::undefined();
123112
}
124113

125-
static jsi::Value SPEC_PREFIX(configureProps)(
114+
static jsi::Value REANIMATED_SPEC_PREFIX(configureProps)(
126115
jsi::Runtime &rt,
127116
TurboModule &turboModule,
128117
const jsi::Value *args,
@@ -132,7 +121,7 @@ static jsi::Value SPEC_PREFIX(configureProps)(
132121
return jsi::Value::undefined();
133122
}
134123

135-
static jsi::Value SPEC_PREFIX(subscribeForKeyboardEvents)(
124+
static jsi::Value REANIMATED_SPEC_PREFIX(subscribeForKeyboardEvents)(
136125
jsi::Runtime &rt,
137126
TurboModule &turboModule,
138127
const jsi::Value *args,
@@ -142,7 +131,7 @@ static jsi::Value SPEC_PREFIX(subscribeForKeyboardEvents)(
142131
rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
143132
}
144133

145-
static jsi::Value SPEC_PREFIX(unsubscribeFromKeyboardEvents)(
134+
static jsi::Value REANIMATED_SPEC_PREFIX(unsubscribeFromKeyboardEvents)(
146135
jsi::Runtime &rt,
147136
TurboModule &turboModule,
148137
const jsi::Value *args,
@@ -152,7 +141,7 @@ static jsi::Value SPEC_PREFIX(unsubscribeFromKeyboardEvents)(
152141
return jsi::Value::undefined();
153142
}
154143

155-
static jsi::Value SPEC_PREFIX(configureLayoutAnimationBatch)(
144+
static jsi::Value REANIMATED_SPEC_PREFIX(configureLayoutAnimationBatch)(
156145
jsi::Runtime &rt,
157146
TurboModule &turboModule,
158147
const jsi::Value *args,
@@ -161,7 +150,7 @@ static jsi::Value SPEC_PREFIX(configureLayoutAnimationBatch)(
161150
->configureLayoutAnimationBatch(rt, std::move(args[0]));
162151
}
163152

164-
static jsi::Value SPEC_PREFIX(setShouldAnimateExiting)(
153+
static jsi::Value REANIMATED_SPEC_PREFIX(setShouldAnimateExiting)(
165154
jsi::Runtime &rt,
166155
TurboModule &turboModule,
167156
const jsi::Value *args,
@@ -174,37 +163,38 @@ static jsi::Value SPEC_PREFIX(setShouldAnimateExiting)(
174163
NativeReanimatedModuleSpec::NativeReanimatedModuleSpec(
175164
const std::shared_ptr<CallInvoker> &jsInvoker)
176165
: TurboModule("NativeReanimated", jsInvoker) {
177-
methodMap_["makeShareableClone"] =
178-
MethodMetadata{2, SPEC_PREFIX(makeShareableClone)};
179-
180-
methodMap_["scheduleOnUI"] = MethodMetadata{1, SPEC_PREFIX(scheduleOnUI)};
166+
methodMap_["scheduleOnUI"] =
167+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(scheduleOnUI)};
181168
methodMap_["executeOnUIRuntimeSync"] =
182-
MethodMetadata{1, SPEC_PREFIX(executeOnUIRuntimeSync)};
169+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(executeOnUIRuntimeSync)};
183170
methodMap_["createWorkletRuntime"] =
184-
MethodMetadata{2, SPEC_PREFIX(createWorkletRuntime)};
171+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(createWorkletRuntime)};
185172
methodMap_["scheduleOnRuntime"] =
186-
MethodMetadata{2, SPEC_PREFIX(scheduleOnRuntime)};
173+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(scheduleOnRuntime)};
187174

188175
methodMap_["registerEventHandler"] =
189-
MethodMetadata{3, SPEC_PREFIX(registerEventHandler)};
176+
MethodMetadata{3, REANIMATED_SPEC_PREFIX(registerEventHandler)};
190177
methodMap_["unregisterEventHandler"] =
191-
MethodMetadata{1, SPEC_PREFIX(unregisterEventHandler)};
178+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(unregisterEventHandler)};
192179

193-
methodMap_["getViewProp"] = MethodMetadata{3, SPEC_PREFIX(getViewProp)};
180+
methodMap_["getViewProp"] =
181+
MethodMetadata{3, REANIMATED_SPEC_PREFIX(getViewProp)};
194182
methodMap_["enableLayoutAnimations"] =
195-
MethodMetadata{2, SPEC_PREFIX(enableLayoutAnimations)};
196-
methodMap_["registerSensor"] = MethodMetadata{4, SPEC_PREFIX(registerSensor)};
183+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(enableLayoutAnimations)};
184+
methodMap_["registerSensor"] =
185+
MethodMetadata{4, REANIMATED_SPEC_PREFIX(registerSensor)};
197186
methodMap_["unregisterSensor"] =
198-
MethodMetadata{1, SPEC_PREFIX(unregisterSensor)};
199-
methodMap_["configureProps"] = MethodMetadata{2, SPEC_PREFIX(configureProps)};
187+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(unregisterSensor)};
188+
methodMap_["configureProps"] =
189+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(configureProps)};
200190
methodMap_["subscribeForKeyboardEvents"] =
201-
MethodMetadata{2, SPEC_PREFIX(subscribeForKeyboardEvents)};
191+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(subscribeForKeyboardEvents)};
202192
methodMap_["unsubscribeFromKeyboardEvents"] =
203-
MethodMetadata{1, SPEC_PREFIX(unsubscribeFromKeyboardEvents)};
193+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(unsubscribeFromKeyboardEvents)};
204194

205195
methodMap_["configureLayoutAnimationBatch"] =
206-
MethodMetadata{1, SPEC_PREFIX(configureLayoutAnimationBatch)};
196+
MethodMetadata{1, REANIMATED_SPEC_PREFIX(configureLayoutAnimationBatch)};
207197
methodMap_["setShouldAnimateExitingForTag"] =
208-
MethodMetadata{2, SPEC_PREFIX(setShouldAnimateExiting)};
198+
MethodMetadata{2, REANIMATED_SPEC_PREFIX(setShouldAnimateExiting)};
209199
}
210200
} // namespace reanimated

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ class JSI_EXPORT NativeReanimatedModuleSpec : public TurboModule {
1818
const std::shared_ptr<CallInvoker> &jsInvoker);
1919

2020
public:
21-
// SharedValue
22-
virtual jsi::Value makeShareableClone(
23-
jsi::Runtime &rt,
24-
const jsi::Value &value,
25-
const jsi::Value &shouldRetainRemote,
26-
const jsi::Value &nativeStateSource) = 0;
27-
2821
// Scheduling
2922
virtual void scheduleOnUI(jsi::Runtime &rt, const jsi::Value &worklet) = 0;
3023
virtual jsi::Value executeOnUIRuntimeSync(

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#endif // RCT_NEW_ARCH_ENABLED
77

88
#include <worklets/NativeModules/NativeWorkletsModule.h>
9+
#include <worklets/SharedItems/Shareables.h>
910

1011
#ifdef __ANDROID__
1112
#include <fbjni/fbjni.h>
@@ -22,4 +23,16 @@ NativeWorkletsModule::NativeWorkletsModule(const std::string &valueUnpackerCode)
2223
valueUnpackerCode_(valueUnpackerCode) {}
2324

2425
NativeWorkletsModule::~NativeWorkletsModule() {}
26+
27+
jsi::Value NativeWorkletsModule::makeShareableClone(
28+
jsi::Runtime &rt,
29+
const jsi::Value &value,
30+
const jsi::Value &shouldRetainRemote,
31+
const jsi::Value &nativeStateSource) {
32+
// TODO: It might be a good idea to rename one of these methods to avoid
33+
// confusion.
34+
return worklets::makeShareableClone(
35+
rt, value, shouldRetainRemote, nativeStateSource);
36+
}
37+
2538
} // namespace worklets

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ class NativeWorkletsModule : public NativeWorkletsModuleSpec {
1313

1414
~NativeWorkletsModule();
1515

16+
jsi::Value makeShareableClone(
17+
jsi::Runtime &rt,
18+
const jsi::Value &value,
19+
const jsi::Value &shouldRetainRemote,
20+
const jsi::Value &nativeStateSource) override;
21+
1622
[[nodiscard]] inline std::string getValueUnpackerCode() const {
1723
return valueUnpackerCode_;
1824
}
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
#include <worklets/NativeModules/NativeWorkletsModuleSpec.h>
22

3+
#include <utility>
4+
5+
#define WORKLETS_SPEC_PREFIX(FN_NAME) \
6+
__hostFunction_NativeWorkletsModuleSpec_##FN_NAME
7+
38
namespace worklets {
49

10+
static jsi::Value WORKLETS_SPEC_PREFIX(makeShareableClone)(
11+
jsi::Runtime &rt,
12+
TurboModule &turboModule,
13+
const jsi::Value *args,
14+
size_t) {
15+
return static_cast<NativeWorkletsModuleSpec *>(&turboModule)
16+
->makeShareableClone(
17+
rt, std::move(args[0]), std::move(args[1]), std::move(args[2]));
18+
}
19+
520
NativeWorkletsModuleSpec::NativeWorkletsModuleSpec(
621
const std::shared_ptr<CallInvoker> jsInvoker)
7-
: TurboModule("NativeWorklets", jsInvoker) {}
22+
: TurboModule("NativeWorklets", jsInvoker) {
23+
methodMap_["makeShareableClone"] =
24+
MethodMetadata{2, WORKLETS_SPEC_PREFIX(makeShareableClone)};
25+
}
826

927
} // namespace worklets

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ class JSI_EXPORT NativeWorkletsModuleSpec : public TurboModule {
1313
protected:
1414
explicit NativeWorkletsModuleSpec(
1515
const std::shared_ptr<CallInvoker> jsInvoker);
16+
17+
public:
18+
virtual jsi::Value makeShareableClone(
19+
jsi::Runtime &rt,
20+
const jsi::Value &value,
21+
const jsi::Value &shouldRetainRemote,
22+
const jsi::Value &nativeStateSource) = 0;
1623
};
1724

1825
} // namespace worklets

packages/react-native-reanimated/src/ReanimatedModule/NativeReanimated.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,6 @@ See https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooti
6464
this.#reanimatedModuleProxy = global.__reanimatedModuleProxy;
6565
}
6666

67-
makeShareableClone<T>(
68-
value: T,
69-
shouldPersistRemote: boolean,
70-
nativeStateSource?: object
71-
) {
72-
return this.#reanimatedModuleProxy.makeShareableClone(
73-
value,
74-
shouldPersistRemote,
75-
nativeStateSource
76-
);
77-
}
78-
7967
scheduleOnUI<T>(shareable: ShareableRef<T>) {
8068
return this.#reanimatedModuleProxy.scheduleOnUI(shareable);
8169
}

packages/react-native-reanimated/src/ReanimatedModule/js-reanimated/JSReanimated.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,6 @@ class JSReanimated implements IReanimatedModule {
4242
sensors = new Map<number, WebSensor>();
4343
platform?: Platform = undefined;
4444

45-
makeShareableClone<T>(): ShareableRef<T> {
46-
throw new ReanimatedError(
47-
'makeShareableClone should never be called in JSReanimated.'
48-
);
49-
}
50-
5145
scheduleOnUI<T>(worklet: ShareableRef<T>) {
5246
// @ts-ignore web implementation has still not been updated after the rewrite, this will be addressed once the web implementation updates are ready
5347
requestAnimationFrameImpl(worklet);

0 commit comments

Comments
 (0)