From e52ddc9b69889fc3cfd261d9fe1f8c654ed74f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBelawski?= Date: Thu, 21 Nov 2024 12:18:52 +0100 Subject: [PATCH 1/3] refactor: move MessageQueueThread to Worklets --- .../NativeModules/NativeReanimatedModule.cpp | 10 ++++--- .../NativeModules/NativeReanimatedModule.h | 5 ++-- .../NativeModules/NativeWorkletsModule.cpp | 9 ++++-- .../NativeModules/NativeWorkletsModule.h | 11 ++++++- .../cpp/reanimated/android/NativeProxy.cpp | 29 ++++++++++--------- .../main/cpp/reanimated/android/NativeProxy.h | 16 +++++----- .../cpp/worklets/android/WorkletsModule.cpp | 14 +++++---- .../cpp/worklets/android/WorkletsModule.h | 6 ++-- .../swmansion/worklets/WorkletsModule.java | 10 +++++-- .../com/swmansion/reanimated/NativeProxy.java | 15 ++++++---- .../reanimated/apple/native/NativeProxy.mm | 18 ++++++------ .../native/PlatformDepMethodsHolderImpl.mm | 2 +- .../apple}/REAMessageThread.h | 0 .../apple}/REAMessageThread.mm | 8 ++--- .../apple/worklets/apple/WorkletsModule.mm | 6 +++- 15 files changed, 100 insertions(+), 59 deletions(-) rename packages/react-native-reanimated/apple/{reanimated/apple/native => worklets/apple}/REAMessageThread.h (100%) rename packages/react-native-reanimated/apple/{reanimated/apple/native => worklets/apple}/REAMessageThread.mm (82%) diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp index 404ca6b64933..d001af7c52ae 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp @@ -55,7 +55,7 @@ NativeReanimatedModule::NativeReanimatedModule( const std::shared_ptr &nativeWorkletsModule, jsi::Runtime &rnRuntime, const std::shared_ptr &jsScheduler, - const std::shared_ptr &jsQueue, + // const std::shared_ptr &jsQueue, const std::shared_ptr &uiScheduler, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, @@ -64,14 +64,15 @@ NativeReanimatedModule::NativeReanimatedModule( isBridgeless ? nullptr : jsScheduler->getJSCallInvoker()), isBridgeless_(isBridgeless), isReducedMotion_(isReducedMotion), - jsQueue_(jsQueue), + // jsQueue_(jsQueue), nativeWorkletsModule_(nativeWorkletsModule), jsScheduler_(jsScheduler), uiScheduler_(uiScheduler), valueUnpackerCode_(nativeWorkletsModule->getValueUnpackerCode()), uiWorkletRuntime_(std::make_shared( rnRuntime, - jsQueue, + // jsQueue, + nativeWorkletsModule->getJSQueue(), jsScheduler_, "Reanimated UI runtime", true /* supportsLocking */, @@ -233,7 +234,8 @@ jsi::Value NativeReanimatedModule::createWorkletRuntime( const jsi::Value &initializer) { auto workletRuntime = std::make_shared( rt, - jsQueue_, + // jsQueue_, + nativeWorkletsModule_->getJSQueue(), jsScheduler_, name.asString(rt).utf8(rt), false /* supportsLocking */, diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h index 41af8f2e0d99..ebeac101064b 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h @@ -36,7 +36,7 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const std::shared_ptr &nativeWorkletsModule, jsi::Runtime &rnRuntime, const std::shared_ptr &jsScheduler, - const std::shared_ptr &jsQueue, + // const std::shared_ptr &jsQueue, const std::shared_ptr &uiScheduler, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, @@ -200,7 +200,8 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const bool isBridgeless_; const bool isReducedMotion_; - const std::shared_ptr jsQueue_; + + // const std::shared_ptr jsQueue_; const std::shared_ptr nativeWorkletsModule_; const std::shared_ptr jsScheduler_; const std::shared_ptr uiScheduler_; diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp index 1a776bf88126..fd7ddb898d45 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp @@ -6,6 +6,7 @@ #endif // RCT_NEW_ARCH_ENABLED #include +#include #ifdef __ANDROID__ #include @@ -17,9 +18,13 @@ using namespace facebook; namespace worklets { -NativeWorkletsModule::NativeWorkletsModule(const std::string &valueUnpackerCode) +NativeWorkletsModule::NativeWorkletsModule( + const std::string &valueUnpackerCode, + const std::shared_ptr &jsQueue) : NativeWorkletsModuleSpec(nullptr), - valueUnpackerCode_(valueUnpackerCode) {} + valueUnpackerCode_(valueUnpackerCode), + jsQueue_(jsQueue) {} NativeWorkletsModule::~NativeWorkletsModule() {} + } // namespace worklets diff --git a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h index 15e8d7a271a7..f22d6997862c 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.h @@ -2,13 +2,17 @@ #include #include +#include +#include #include namespace worklets { class NativeWorkletsModule : public NativeWorkletsModuleSpec { public: - explicit NativeWorkletsModule(const std::string &valueUnpackerCode); + explicit NativeWorkletsModule( + const std::string &valueUnpackerCode, + const std::shared_ptr &jsQueue); ~NativeWorkletsModule(); @@ -16,8 +20,13 @@ class NativeWorkletsModule : public NativeWorkletsModuleSpec { return valueUnpackerCode_; } + [[nodiscard]] inline std::shared_ptr getJSQueue() const { + return jsQueue_; + } + private: const std::string valueUnpackerCode_; + const std::shared_ptr jsQueue_; }; } // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp index 42b1f21ce14b..b9a6588c45db 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +// #include #include #include @@ -33,8 +33,9 @@ NativeProxy::NativeProxy( jsi::Runtime *rnRuntime, const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, - jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread + jni::global_ref layoutAnimations +// , +// jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -47,7 +48,7 @@ NativeProxy::NativeProxy( nativeWorkletsModule, *rnRuntime, std::make_shared(*rnRuntime, jsCallInvoker), - std::make_shared(messageQueueThread), + // std::make_shared(messageQueueThread), uiScheduler, getPlatformDependentMethods(), /* isBridgeless */ false, @@ -66,7 +67,7 @@ NativeProxy::NativeProxy( RuntimeExecutor runtimeExecutor, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread, + // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager) : javaPart_(jni::make_global(jThis)), @@ -75,7 +76,7 @@ NativeProxy::NativeProxy( nativeWorkletsModule, *rnRuntime, std::make_shared(*rnRuntime, runtimeExecutor), - std::make_shared(messageQueueThread), + // std::make_shared(messageQueueThread), uiScheduler, getPlatformDependentMethods(), /* isBridgeless */ true, @@ -119,8 +120,9 @@ jni::local_ref NativeProxy::initHybrid( jni::alias_ref jsCallInvokerHolder, jni::alias_ref androidUiScheduler, - jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread + jni::alias_ref layoutAnimations +// , +// jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -137,10 +139,11 @@ jni::local_ref NativeProxy::initHybrid( (jsi::Runtime *)jsContext, jsCallInvoker, uiScheduler, - make_global(layoutAnimations), - messageQueueThread + make_global(layoutAnimations) + // , + // messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED - , + , fabricUIManager #endif ); @@ -154,7 +157,7 @@ jni::local_ref NativeProxy::initHybridBridgeless( jni::alias_ref runtimeExecutorHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread, + // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager) { auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler(); @@ -168,7 +171,7 @@ jni::local_ref NativeProxy::initHybridBridgeless( runtimeExecutor, uiScheduler, make_global(layoutAnimations), - messageQueueThread, + // messageQueueThread, fabricUIManager); } #endif // RCT_NEW_ARCH_ENABLED diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h index 1f2ac757987b..b17c67330915 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h @@ -12,7 +12,7 @@ #include #include #include -#include +// #include #include #include @@ -155,8 +155,9 @@ class NativeProxy : public jni::HybridClass { jni::alias_ref jsCallInvokerHolder, jni::alias_ref androidUiScheduler, - jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread + jni::alias_ref layoutAnimations + // , + // jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -172,7 +173,7 @@ class NativeProxy : public jni::HybridClass { jni::alias_ref runtimeExecutorHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - jni::alias_ref messageQueueThread, + // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager); #endif // RCT_NEW_ARCH_ENABLED @@ -282,8 +283,9 @@ class NativeProxy : public jni::HybridClass { jsi::Runtime *rnRuntime, const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, - jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread + jni::global_ref layoutAnimations + // , + // jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -299,7 +301,7 @@ class NativeProxy : public jni::HybridClass { RuntimeExecutor runtimeExecutor, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - jni::alias_ref messageQueueThread, + // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager); diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp index 6be7b73349d1..833c5a36cbf1 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.cpp @@ -20,19 +20,23 @@ using namespace react; WorkletsModule::WorkletsModule( jni::alias_ref jThis, jsi::Runtime *rnRuntime, - const std::string &valueUnpackerCode) + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread) : javaPart_(jni::make_global(jThis)), rnRuntime_(rnRuntime), - nativeWorkletsModule_( - std::make_shared(valueUnpackerCode)) { + nativeWorkletsModule_(std::make_shared( + valueUnpackerCode, + std::make_shared(messageQueueThread))) { RNRuntimeWorkletDecorator::decorate(*rnRuntime_, nativeWorkletsModule_); } jni::local_ref WorkletsModule::initHybrid( jni::alias_ref jThis, jlong jsContext, - const std::string &valueUnpackerCode) { - return makeCxxInstance(jThis, (jsi::Runtime *)jsContext, valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread) { + return makeCxxInstance( + jThis, (jsi::Runtime *)jsContext, valueUnpackerCode, messageQueueThread); } void WorkletsModule::registerNatives() { diff --git a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h index 349853b1edb3..e367780de3ca 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h +++ b/packages/react-native-reanimated/android/src/main/cpp/worklets/android/WorkletsModule.h @@ -31,7 +31,8 @@ class WorkletsModule : public jni::HybridClass { static jni::local_ref initHybrid( jni::alias_ref jThis, jlong jsContext, - const std::string &valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread); static void registerNatives(); @@ -48,7 +49,8 @@ class WorkletsModule : public jni::HybridClass { explicit WorkletsModule( jni::alias_ref jThis, jsi::Runtime *rnRuntime, - const std::string &valueUnpackerCode); + const std::string &valueUnpackerCode, + jni::alias_ref messageQueueThread); }; } // namespace worklets diff --git a/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java index 2da67792f66f..31c74a6e5602 100644 --- a/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java +++ b/packages/react-native-reanimated/android/src/main/java/com/swmansion/worklets/WorkletsModule.java @@ -5,10 +5,12 @@ import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.module.annotations.ReactModule; import com.facebook.soloader.SoLoader; import com.swmansion.reanimated.NativeWorkletsModuleSpec; +import com.swmansion.reanimated.ReanimatedMessageQueueThread; import java.util.Objects; @ReactModule(name = WorkletsModule.NAME) @@ -28,11 +30,15 @@ protected HybridData getHybridData() { return mHybridData; } + private final ReanimatedMessageQueueThread mMessageQueueThread = + new ReanimatedMessageQueueThread(); + /** * @noinspection JavaJniMissingFunction */ @OptIn(markerClass = FrameworkAPI.class) - private native HybridData initHybrid(long jsContext, String valueUnpackerCode); + private native HybridData initHybrid( + long jsContext, String valueUnpackerCode, MessageQueueThread messageQueueThread); public WorkletsModule(ReactApplicationContext reactContext) { super(reactContext); @@ -44,7 +50,7 @@ public boolean installTurboModule(String valueUnpackerCode) { var context = getReactApplicationContext(); var jsContext = Objects.requireNonNull(context.getJavaScriptContextHolder()).get(); - mHybridData = initHybrid(jsContext, valueUnpackerCode); + mHybridData = initHybrid(jsContext, valueUnpackerCode, mMessageQueueThread); return true; } diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java index f4bfa2c555c1..50c1b0a36c4a 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java @@ -6,7 +6,6 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; @@ -27,15 +26,17 @@ public NativeProxy(ReactApplicationContext context, WorkletsModule workletsModul super(context); CallInvokerHolderImpl holder = (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); + // ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); mHybridData = initHybrid( workletsModule, Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), holder, mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread); + LayoutAnimations + // , + // messageQueueThread + ); prepareLayoutAnimations(LayoutAnimations); installJSIBindings(); if (BuildConfig.DEBUG) { @@ -49,8 +50,10 @@ private native HybridData initHybrid( long jsContext, CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread); + LayoutAnimations LayoutAnimations + // , + // MessageQueueThread messageQueueThread + ); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm index b960c6c642b6..5e30965536a8 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm @@ -14,7 +14,7 @@ #import #import #import -#import + #import #ifndef NDEBUG @@ -22,6 +22,7 @@ #endif #import +#import #ifdef RCT_NEW_ARCH_ENABLED #import @@ -65,9 +66,9 @@ static inline bool getIsReducedMotion() jsi::Runtime &rnRuntime = *reinterpret_cast(reaModule.bridge.runtime); - auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - throw error; - }); + // auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { + // throw error; + // }); PlatformDepMethodsHolder platformDepMethodsHolder = makePlatformDepMethodsHolder(bridge, nodesManager, reaModule); @@ -81,7 +82,6 @@ static inline bool getIsReducedMotion() nativeWorkletsModule, rnRuntime, jsScheduler, - jsQueue, uiScheduler, platformDepMethodsHolder, isBridgeless, @@ -110,9 +110,9 @@ static inline bool getIsReducedMotion() { auto nodesManager = reaModule.nodesManager; - auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - throw error; - }); + // auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { + // throw error; + // }); PlatformDepMethodsHolder platformDepMethodsHolder = makePlatformDepMethodsHolderBridgeless(moduleRegistry, nodesManager, reaModule); @@ -126,7 +126,7 @@ static inline bool getIsReducedMotion() nativeWorkletsModule, runtime, jsScheduler, - jsQueue, + // jsQueue, uiScheduler, platformDepMethodsHolder, isBridgeless, diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm index c1a6789aaabe..4f2f3ac611be 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/PlatformDepMethodsHolderImpl.mm @@ -12,7 +12,6 @@ #import #import #import -#import #import #ifndef NDEBUG @@ -20,6 +19,7 @@ #endif #import +#import #ifdef RCT_NEW_ARCH_ENABLED #import diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.h b/packages/react-native-reanimated/apple/worklets/apple/REAMessageThread.h similarity index 100% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.h rename to packages/react-native-reanimated/apple/worklets/apple/REAMessageThread.h diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm b/packages/react-native-reanimated/apple/worklets/apple/REAMessageThread.mm similarity index 82% rename from packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm rename to packages/react-native-reanimated/apple/worklets/apple/REAMessageThread.mm index be19a904ef4e..0df1e2f17947 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/REAMessageThread.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/REAMessageThread.mm @@ -1,4 +1,4 @@ -#import +#import #import #import @@ -12,9 +12,9 @@ // Essentially the same as RCTMessageThread, but with public fields. struct REAMessageThreadPublic { - // I don't know why we need three vtables (if you know then feel free to - // explain it instead of this message), but this is what makes the casts in - // quitSynchronous() work correctly. + // I don't know why we need three vtables (if you know then feel free to#import + // explain it instead of this message), but this is what makes the casts + // in quitSynchronous() work correctly. void *vtable1; void *vtable2; void *vtable3; diff --git a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm index 78b1759f5c93..3e7b1a97a9cd 100644 --- a/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm +++ b/packages/react-native-reanimated/apple/worklets/apple/WorkletsModule.mm @@ -1,5 +1,6 @@ #import #import +#import #import using worklets::NativeWorkletsModule; @@ -31,7 +32,10 @@ @implementation WorkletsModule { { auto *bridge = self.bridge; auto &rnRuntime = *(jsi::Runtime *)bridge.runtime; - nativeWorkletsModule_ = std::make_shared(std::string([valueUnpackerCode UTF8String])); + auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { + throw error; + }); + nativeWorkletsModule_ = std::make_shared(std::string([valueUnpackerCode UTF8String]), jsQueue); RNRuntimeWorkletDecorator::decorate(rnRuntime, nativeWorkletsModule_); return @YES; From bc0bd9e5df19d36a6f4699dd709bf8e65f9c8d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBelawski?= Date: Thu, 21 Nov 2024 13:26:28 +0100 Subject: [PATCH 2/3] chore: cleanup --- .../NativeModules/NativeReanimatedModule.cpp | 4 ---- .../NativeModules/NativeReanimatedModule.h | 3 --- .../src/main/cpp/reanimated/android/NativeProxy.cpp | 12 ------------ .../src/main/cpp/reanimated/android/NativeProxy.h | 7 ------- .../latest/com/swmansion/reanimated/NativeProxy.java | 11 ++--------- .../apple/reanimated/apple/native/NativeProxy.mm | 9 --------- 6 files changed, 2 insertions(+), 44 deletions(-) diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp index d001af7c52ae..4eae0aa99c3e 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp @@ -55,7 +55,6 @@ NativeReanimatedModule::NativeReanimatedModule( const std::shared_ptr &nativeWorkletsModule, jsi::Runtime &rnRuntime, const std::shared_ptr &jsScheduler, - // const std::shared_ptr &jsQueue, const std::shared_ptr &uiScheduler, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, @@ -64,14 +63,12 @@ NativeReanimatedModule::NativeReanimatedModule( isBridgeless ? nullptr : jsScheduler->getJSCallInvoker()), isBridgeless_(isBridgeless), isReducedMotion_(isReducedMotion), - // jsQueue_(jsQueue), nativeWorkletsModule_(nativeWorkletsModule), jsScheduler_(jsScheduler), uiScheduler_(uiScheduler), valueUnpackerCode_(nativeWorkletsModule->getValueUnpackerCode()), uiWorkletRuntime_(std::make_shared( rnRuntime, - // jsQueue, nativeWorkletsModule->getJSQueue(), jsScheduler_, "Reanimated UI runtime", @@ -234,7 +231,6 @@ jsi::Value NativeReanimatedModule::createWorkletRuntime( const jsi::Value &initializer) { auto workletRuntime = std::make_shared( rt, - // jsQueue_, nativeWorkletsModule_->getJSQueue(), jsScheduler_, name.asString(rt).utf8(rt), diff --git a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h index ebeac101064b..45cdeb9bfa3e 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h @@ -36,7 +36,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const std::shared_ptr &nativeWorkletsModule, jsi::Runtime &rnRuntime, const std::shared_ptr &jsScheduler, - // const std::shared_ptr &jsQueue, const std::shared_ptr &uiScheduler, const PlatformDepMethodsHolder &platformDepMethodsHolder, const bool isBridgeless, @@ -200,8 +199,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec { const bool isBridgeless_; const bool isReducedMotion_; - - // const std::shared_ptr jsQueue_; const std::shared_ptr nativeWorkletsModule_; const std::shared_ptr jsScheduler_; const std::shared_ptr uiScheduler_; diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp index b9a6588c45db..61fd25338fc0 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.cpp @@ -14,7 +14,6 @@ #include #include #include -// #include #include #include @@ -34,8 +33,6 @@ NativeProxy::NativeProxy( const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations -// , -// jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -48,7 +45,6 @@ NativeProxy::NativeProxy( nativeWorkletsModule, *rnRuntime, std::make_shared(*rnRuntime, jsCallInvoker), - // std::make_shared(messageQueueThread), uiScheduler, getPlatformDependentMethods(), /* isBridgeless */ false, @@ -67,7 +63,6 @@ NativeProxy::NativeProxy( RuntimeExecutor runtimeExecutor, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager) : javaPart_(jni::make_global(jThis)), @@ -76,7 +71,6 @@ NativeProxy::NativeProxy( nativeWorkletsModule, *rnRuntime, std::make_shared(*rnRuntime, runtimeExecutor), - // std::make_shared(messageQueueThread), uiScheduler, getPlatformDependentMethods(), /* isBridgeless */ true, @@ -121,8 +115,6 @@ jni::local_ref NativeProxy::initHybrid( jsCallInvokerHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations -// , -// jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -140,8 +132,6 @@ jni::local_ref NativeProxy::initHybrid( jsCallInvoker, uiScheduler, make_global(layoutAnimations) - // , - // messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , fabricUIManager @@ -157,7 +147,6 @@ jni::local_ref NativeProxy::initHybridBridgeless( jni::alias_ref runtimeExecutorHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager) { auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler(); @@ -171,7 +160,6 @@ jni::local_ref NativeProxy::initHybridBridgeless( runtimeExecutor, uiScheduler, make_global(layoutAnimations), - // messageQueueThread, fabricUIManager); } #endif // RCT_NEW_ARCH_ENABLED diff --git a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h index b17c67330915..ea2507296441 100644 --- a/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h +++ b/packages/react-native-reanimated/android/src/main/cpp/reanimated/android/NativeProxy.h @@ -12,7 +12,6 @@ #include #include #include -// #include #include #include @@ -156,8 +155,6 @@ class NativeProxy : public jni::HybridClass { jsCallInvokerHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations - // , - // jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -173,7 +170,6 @@ class NativeProxy : public jni::HybridClass { jni::alias_ref runtimeExecutorHolder, jni::alias_ref androidUiScheduler, jni::alias_ref layoutAnimations, - // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager); #endif // RCT_NEW_ARCH_ENABLED @@ -284,8 +280,6 @@ class NativeProxy : public jni::HybridClass { const std::shared_ptr &jsCallInvoker, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations - // , - // jni::alias_ref messageQueueThread #ifdef RCT_NEW_ARCH_ENABLED , jni::alias_ref @@ -301,7 +295,6 @@ class NativeProxy : public jni::HybridClass { RuntimeExecutor runtimeExecutor, const std::shared_ptr &uiScheduler, jni::global_ref layoutAnimations, - // jni::alias_ref messageQueueThread, jni::alias_ref fabricUIManager); diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java index 50c1b0a36c4a..09068804bb3a 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/latest/com/swmansion/reanimated/NativeProxy.java @@ -26,17 +26,13 @@ public NativeProxy(ReactApplicationContext context, WorkletsModule workletsModul super(context); CallInvokerHolderImpl holder = (CallInvokerHolderImpl) context.getJSCallInvokerHolder(); LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - // ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); mHybridData = initHybrid( workletsModule, Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), holder, mAndroidUIScheduler, - LayoutAnimations - // , - // messageQueueThread - ); + LayoutAnimations); prepareLayoutAnimations(LayoutAnimations); installJSIBindings(); if (BuildConfig.DEBUG) { @@ -50,10 +46,7 @@ private native HybridData initHybrid( long jsContext, CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations - // , - // MessageQueueThread messageQueueThread - ); + LayoutAnimations LayoutAnimations); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); diff --git a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm index 5e30965536a8..eba24c8a15c5 100644 --- a/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm +++ b/packages/react-native-reanimated/apple/reanimated/apple/native/NativeProxy.mm @@ -66,10 +66,6 @@ static inline bool getIsReducedMotion() jsi::Runtime &rnRuntime = *reinterpret_cast(reaModule.bridge.runtime); - // auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - // throw error; - // }); - PlatformDepMethodsHolder platformDepMethodsHolder = makePlatformDepMethodsHolder(bridge, nodesManager, reaModule); std::shared_ptr uiScheduler = std::make_shared(); @@ -110,10 +106,6 @@ static inline bool getIsReducedMotion() { auto nodesManager = reaModule.nodesManager; - // auto jsQueue = std::make_shared([NSRunLoop currentRunLoop], ^(NSError *error) { - // throw error; - // }); - PlatformDepMethodsHolder platformDepMethodsHolder = makePlatformDepMethodsHolderBridgeless(moduleRegistry, nodesManager, reaModule); @@ -126,7 +118,6 @@ static inline bool getIsReducedMotion() nativeWorkletsModule, runtime, jsScheduler, - // jsQueue, uiScheduler, platformDepMethodsHolder, isBridgeless, From 382f1e2f611e0ac30c3c0f72da0442e878f84aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBelawski?= Date: Thu, 21 Nov 2024 14:20:07 +0100 Subject: [PATCH 3/3] chore: update source sets --- .../74/com/swmansion/reanimated/NativeProxy.java | 7 ------- .../latest/com/swmansion/reanimated/NativeProxy.java | 7 ------- .../74/com/swmansion/reanimated/NativeProxy.java | 8 ++------ 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java index 1f732ab91f1e..5cd43091f229 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/74/com/swmansion/reanimated/NativeProxy.java @@ -5,7 +5,6 @@ import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.RuntimeExecutor; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.fabric.FabricUIManager; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; @@ -33,8 +32,6 @@ public class NativeProxy extends NativeProxyCommon { LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); - if (context.isBridgeless()) { RuntimeExecutor runtimeExecutor = context.getRuntimeExecutor(); mHybridData = @@ -44,7 +41,6 @@ public class NativeProxy extends NativeProxyCommon { runtimeExecutor, mAndroidUIScheduler, LayoutAnimations, - messageQueueThread, fabricUIManager); } else { CallInvokerHolderImpl callInvokerHolder = @@ -56,7 +52,6 @@ public class NativeProxy extends NativeProxyCommon { callInvokerHolder, mAndroidUIScheduler, LayoutAnimations, - messageQueueThread, fabricUIManager); } prepareLayoutAnimations(LayoutAnimations); @@ -72,7 +67,6 @@ private native HybridData initHybrid( CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, FabricUIManager fabricUIManager); private native HybridData initHybridBridgeless( @@ -81,7 +75,6 @@ private native HybridData initHybridBridgeless( RuntimeExecutor runtimeExecutor, AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, FabricUIManager fabricUIManager); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java index ddfb00aceb5b..16f95043f786 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyFabric/latest/com/swmansion/reanimated/NativeProxy.java @@ -5,7 +5,6 @@ import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.RuntimeExecutor; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.fabric.FabricUIManager; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; @@ -33,8 +32,6 @@ public class NativeProxy extends NativeProxyCommon { LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); - if (context.isBridgeless()) { RuntimeExecutor runtimeExecutor = context.getCatalystInstance().getRuntimeExecutor(); mHybridData = @@ -44,7 +41,6 @@ public class NativeProxy extends NativeProxyCommon { runtimeExecutor, mAndroidUIScheduler, LayoutAnimations, - messageQueueThread, fabricUIManager); } else { CallInvokerHolderImpl callInvokerHolder = @@ -56,7 +52,6 @@ public class NativeProxy extends NativeProxyCommon { callInvokerHolder, mAndroidUIScheduler, LayoutAnimations, - messageQueueThread, fabricUIManager); } prepareLayoutAnimations(LayoutAnimations); @@ -72,7 +67,6 @@ private native HybridData initHybrid( CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, FabricUIManager fabricUIManager); private native HybridData initHybridBridgeless( @@ -81,7 +75,6 @@ private native HybridData initHybridBridgeless( RuntimeExecutor runtimeExecutor, AndroidUIScheduler androidUIScheduler, LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread, FabricUIManager fabricUIManager); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag); diff --git a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java index 9078f5486c6f..418ff7fc8906 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/NativeProxyPaper/74/com/swmansion/reanimated/NativeProxy.java @@ -6,7 +6,6 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.queue.MessageQueueThread; import com.facebook.react.common.annotations.FrameworkAPI; import com.facebook.react.turbomodule.core.CallInvokerHolderImpl; import com.swmansion.reanimated.layoutReanimation.LayoutAnimations; @@ -28,15 +27,13 @@ public NativeProxy(ReactApplicationContext context, WorkletsModule workletsModul CallInvokerHolderImpl holder = (CallInvokerHolderImpl) context.getCatalystInstance().getJSCallInvokerHolder(); LayoutAnimations LayoutAnimations = new LayoutAnimations(context); - ReanimatedMessageQueueThread messageQueueThread = new ReanimatedMessageQueueThread(); mHybridData = initHybrid( workletsModule, Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), holder, mAndroidUIScheduler, - LayoutAnimations, - messageQueueThread); + LayoutAnimations); prepareLayoutAnimations(LayoutAnimations); installJSIBindings(); if (BuildConfig.DEBUG) { @@ -50,8 +47,7 @@ private native HybridData initHybrid( long jsContext, CallInvokerHolderImpl jsCallInvokerHolder, AndroidUIScheduler androidUIScheduler, - LayoutAnimations LayoutAnimations, - MessageQueueThread messageQueueThread); + LayoutAnimations LayoutAnimations); public native boolean isAnyHandlerWaitingForEvent(String eventName, int emitterReactTag);