From f50fb59e209d85fd9649c9c334b4c6f7d3709830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBelawski?= Date: Sat, 5 Oct 2024 22:59:46 +0200 Subject: [PATCH] chore: WIP --- .../NativeModules/NativeReanimatedModule.cpp | 10 ++++--- .../NativeModules/NativeReanimatedModule.h | 5 ++-- .../NativeModules/NativeWorkletsModule.cpp | 7 +++-- .../NativeModules/NativeWorkletsModule.h | 10 ++++++- .../cpp/reanimated/android/NativeProxy.cpp | 28 +++++++++---------- .../main/cpp/reanimated/android/NativeProxy.h | 16 ++++++----- .../cpp/worklets/android/WorkletsModule.cpp | 14 ++++++---- .../cpp/worklets/android/WorkletsModule.h | 6 ++-- .../com/swmansion/reanimated/NativeProxy.java | 14 ++++++---- .../swmansion/worklets/WorkletsModule.java | 8 ++++-- 10 files changed, 74 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 835f92d3718..c61f27c32b8 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.cpp @@ -56,7 +56,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, @@ -65,14 +65,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 */, @@ -234,7 +235,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 bb65b875662..3be9ac0e55c 100644 --- a/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h +++ b/packages/react-native-reanimated/Common/cpp/reanimated/NativeModules/NativeReanimatedModule.h @@ -38,7 +38,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, @@ -196,7 +196,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 67d66bbf09d..4798fdd30b1 100644 --- a/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp +++ b/packages/react-native-reanimated/Common/cpp/worklets/NativeModules/NativeWorkletsModule.cpp @@ -18,9 +18,12 @@ 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() {} 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 26787d13f06..7bd6e0281bc 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,16 @@ #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(); @@ -22,8 +25,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 a47598b299a..70cdf1a57e2 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 @@ -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, @@ -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, @@ -246,18 +247,17 @@ bool NativeProxy::getIsReducedMotion() { } void NativeProxy::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", NativeProxy::initHybrid), + registerHybrid( + {makeNativeMethod("initHybrid", NativeProxy::initHybrid), #if REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED) - makeNativeMethod( - "initHybridBridgeless", NativeProxy::initHybridBridgeless), + makeNativeMethod( + "initHybridBridgeless", NativeProxy::initHybridBridgeless), #endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED) - makeNativeMethod("installJSIBindings", NativeProxy::installJSIBindings), - makeNativeMethod( - "isAnyHandlerWaitingForEvent", - NativeProxy::isAnyHandlerWaitingForEvent), - makeNativeMethod("performOperations", NativeProxy::performOperations) - }); + makeNativeMethod("installJSIBindings", NativeProxy::installJSIBindings), + makeNativeMethod( + "isAnyHandlerWaitingForEvent", + NativeProxy::isAnyHandlerWaitingForEvent), + makeNativeMethod("performOperations", NativeProxy::performOperations)}); } void NativeProxy::requestRender( 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 b7e23243996..35aa08f6e40 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 @@ -160,8 +160,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 @@ -177,7 +178,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 // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED @@ -287,8 +288,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 @@ -304,7 +306,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); #endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED 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 7fde44be4bb..f36a5af032f 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 0f0de771f54..40ab55cbaf7 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 @@ -33,7 +33,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(); @@ -50,7 +51,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/paper/java/com/swmansion/reanimated/NativeProxy.java b/packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java index 90d56fa66d3..9cad635e1f2 100644 --- a/packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java +++ b/packages/react-native-reanimated/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java @@ -30,15 +30,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) { @@ -52,8 +54,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/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/worklets/WorkletsModule.java b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/worklets/WorkletsModule.java index b3ed1c890bc..6d34bd12a48 100644 --- a/packages/react-native-reanimated/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/worklets/WorkletsModule.java +++ b/packages/react-native-reanimated/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/worklets/WorkletsModule.java @@ -9,6 +9,8 @@ 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,13 @@ 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, ReanimatedMessageQueueThread messageQueueThread); public WorkletsModule(ReactApplicationContext reactContext) { super(reactContext); @@ -46,7 +50,7 @@ public boolean installTurboModule(String valueUnpackerCode) { mHybridData = initHybrid( - Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), valueUnpackerCode); + Objects.requireNonNull(context.getJavaScriptContextHolder()).get(), valueUnpackerCode, mMessageQueueThread); return true; }