Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ NativeReanimatedModule::NativeReanimatedModule(
const std::shared_ptr<NativeWorkletsModule> &nativeWorkletsModule,
jsi::Runtime &rnRuntime,
const std::shared_ptr<JSScheduler> &jsScheduler,
const std::shared_ptr<MessageQueueThread> &jsQueue,
const std::shared_ptr<UIScheduler> &uiScheduler,
const PlatformDepMethodsHolder &platformDepMethodsHolder,
const bool isBridgeless,
Expand All @@ -64,14 +63,13 @@ 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<WorkletRuntime>(
rnRuntime,
jsQueue,
nativeWorkletsModule->getJSQueue(),
jsScheduler_,
"Reanimated UI runtime",
true /* supportsLocking */,
Expand Down Expand Up @@ -233,7 +231,7 @@ jsi::Value NativeReanimatedModule::createWorkletRuntime(
const jsi::Value &initializer) {
auto workletRuntime = std::make_shared<WorkletRuntime>(
rt,
jsQueue_,
nativeWorkletsModule_->getJSQueue(),
jsScheduler_,
name.asString(rt).utf8(rt),
false /* supportsLocking */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {
const std::shared_ptr<NativeWorkletsModule> &nativeWorkletsModule,
jsi::Runtime &rnRuntime,
const std::shared_ptr<JSScheduler> &jsScheduler,
const std::shared_ptr<MessageQueueThread> &jsQueue,
const std::shared_ptr<UIScheduler> &uiScheduler,
const PlatformDepMethodsHolder &platformDepMethodsHolder,
const bool isBridgeless,
Expand Down Expand Up @@ -194,7 +193,6 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {

const bool isBridgeless_;
const bool isReducedMotion_;
const std::shared_ptr<MessageQueueThread> jsQueue_;
const std::shared_ptr<NativeWorkletsModule> nativeWorkletsModule_;
const std::shared_ptr<JSScheduler> jsScheduler_;
const std::shared_ptr<UIScheduler> uiScheduler_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<MessageQueueThread> &jsQueue)
: NativeWorkletsModuleSpec(nullptr),
valueUnpackerCode_(valueUnpackerCode) {}
valueUnpackerCode_(valueUnpackerCode),
jsQueue_(jsQueue) {}

NativeWorkletsModule::~NativeWorkletsModule() {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,17 @@
#include <cxxreact/MessageQueueThread.h>
#include <worklets/NativeModules/NativeWorkletsModuleSpec.h>
#include <worklets/Tools/SingleInstanceChecker.h>
#include <worklets/WorkletRuntime/WorkletRuntime.h>
#include <memory>
#include <string>

namespace worklets {

class NativeWorkletsModule : public NativeWorkletsModuleSpec {
public:
explicit NativeWorkletsModule(const std::string &valueUnpackerCode);
explicit NativeWorkletsModule(
const std::string &valueUnpackerCode,
const std::shared_ptr<MessageQueueThread> &jsQueue);

~NativeWorkletsModule();

Expand All @@ -23,8 +27,13 @@ class NativeWorkletsModule : public NativeWorkletsModuleSpec {
return valueUnpackerCode_;
}

[[nodiscard]] inline std::shared_ptr<MessageQueueThread> getJSQueue() const {
return jsQueue_;
}

private:
const std::string valueUnpackerCode_;
const std::shared_ptr<MessageQueueThread> jsQueue_;
#ifndef NDEBUG
SingleInstanceChecker<NativeWorkletsModule> singleInstanceChecker_;
#endif // NDEBUG
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
#include <fbjni/fbjni.h>
#include <jsi/JSIDynamic.h>
#include <jsi/jsi.h>
#include <react/jni/JMessageQueueThread.h>
#include <react/jni/ReadableNativeArray.h>
#include <react/jni/ReadableNativeMap.h>

Expand All @@ -33,8 +32,7 @@ NativeProxy::NativeProxy(
jsi::Runtime *rnRuntime,
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
const std::shared_ptr<UIScheduler> &uiScheduler,
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -47,7 +45,6 @@ NativeProxy::NativeProxy(
nativeWorkletsModule,
*rnRuntime,
std::make_shared<JSScheduler>(*rnRuntime, jsCallInvoker),
std::make_shared<JMessageQueueThread>(messageQueueThread),
uiScheduler,
getPlatformDependentMethods(),
/* isBridgeless */ false,
Expand All @@ -66,7 +63,6 @@ NativeProxy::NativeProxy(
RuntimeExecutor runtimeExecutor,
const std::shared_ptr<UIScheduler> &uiScheduler,
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager)
: javaPart_(jni::make_global(jThis)),
Expand All @@ -75,7 +71,6 @@ NativeProxy::NativeProxy(
nativeWorkletsModule,
*rnRuntime,
std::make_shared<JSScheduler>(*rnRuntime, runtimeExecutor),
std::make_shared<JMessageQueueThread>(messageQueueThread),
uiScheduler,
getPlatformDependentMethods(),
/* isBridgeless */ true,
Expand Down Expand Up @@ -119,8 +114,7 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
jsCallInvokerHolder,
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -137,10 +131,9 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
(jsi::Runtime *)jsContext,
jsCallInvoker,
uiScheduler,
make_global(layoutAnimations),
messageQueueThread
make_global(layoutAnimations)
#ifdef RCT_NEW_ARCH_ENABLED
,
,
fabricUIManager
#endif
);
Expand All @@ -154,7 +147,6 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybridBridgeless(
jni::alias_ref<react::JRuntimeExecutor::javaobject> runtimeExecutorHolder,
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager) {
auto uiScheduler = androidUiScheduler->cthis()->getUIScheduler();
Expand All @@ -168,7 +160,6 @@ jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybridBridgeless(
runtimeExecutor,
uiScheduler,
make_global(layoutAnimations),
messageQueueThread,
fabricUIManager);
}
#endif // RCT_NEW_ARCH_ENABLED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <fbjni/fbjni.h>
#include <jsi/jsi.h>
#include <react/jni/CxxModuleWrapper.h>
#include <react/jni/JMessageQueueThread.h>
#include <react/jni/JavaScriptExecutorHolder.h>
#include <react/jni/WritableNativeMap.h>

Expand Down Expand Up @@ -155,8 +154,7 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
jni::alias_ref<facebook::react::CallInvokerHolder::javaobject>
jsCallInvokerHolder,
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -172,7 +170,6 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
jni::alias_ref<react::JRuntimeExecutor::javaobject> runtimeExecutorHolder,
jni::alias_ref<AndroidUIScheduler::javaobject> androidUiScheduler,
jni::alias_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager);
#endif // RCT_NEW_ARCH_ENABLED
Expand Down Expand Up @@ -282,8 +279,7 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
jsi::Runtime *rnRuntime,
const std::shared_ptr<facebook::react::CallInvoker> &jsCallInvoker,
const std::shared_ptr<UIScheduler> &uiScheduler,
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -299,7 +295,6 @@ class NativeProxy : public jni::HybridClass<NativeProxy> {
RuntimeExecutor runtimeExecutor,
const std::shared_ptr<UIScheduler> &uiScheduler,
jni::global_ref<LayoutAnimations::javaobject> layoutAnimations,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,23 @@ using namespace react;
WorkletsModule::WorkletsModule(
jni::alias_ref<WorkletsModule::javaobject> jThis,
jsi::Runtime *rnRuntime,
const std::string &valueUnpackerCode)
const std::string &valueUnpackerCode,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread)
: javaPart_(jni::make_global(jThis)),
rnRuntime_(rnRuntime),
nativeWorkletsModule_(
std::make_shared<NativeWorkletsModule>(valueUnpackerCode)) {
nativeWorkletsModule_(std::make_shared<NativeWorkletsModule>(
valueUnpackerCode,
std::make_shared<JMessageQueueThread>(messageQueueThread))) {
RNRuntimeWorkletDecorator::decorate(*rnRuntime_, nativeWorkletsModule_);
}

jni::local_ref<WorkletsModule::jhybriddata> WorkletsModule::initHybrid(
jni::alias_ref<jhybridobject> jThis,
jlong jsContext,
const std::string &valueUnpackerCode) {
return makeCxxInstance(jThis, (jsi::Runtime *)jsContext, valueUnpackerCode);
const std::string &valueUnpackerCode,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread) {
return makeCxxInstance(
jThis, (jsi::Runtime *)jsContext, valueUnpackerCode, messageQueueThread);
}

void WorkletsModule::registerNatives() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class WorkletsModule : public jni::HybridClass<WorkletsModule> {
static jni::local_ref<jhybriddata> initHybrid(
jni::alias_ref<jhybridobject> jThis,
jlong jsContext,
const std::string &valueUnpackerCode);
const std::string &valueUnpackerCode,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread);

static void registerNatives();

Expand All @@ -48,7 +49,8 @@ class WorkletsModule : public jni::HybridClass<WorkletsModule> {
explicit WorkletsModule(
jni::alias_ref<WorkletsModule::jhybridobject> jThis,
jsi::Runtime *rnRuntime,
const std::string &valueUnpackerCode);
const std::string &valueUnpackerCode,
jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread);
};

} // namespace worklets
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 =
Expand All @@ -44,7 +41,6 @@ public class NativeProxy extends NativeProxyCommon {
runtimeExecutor,
mAndroidUIScheduler,
LayoutAnimations,
messageQueueThread,
fabricUIManager);
} else {
CallInvokerHolderImpl callInvokerHolder =
Expand All @@ -56,7 +52,6 @@ public class NativeProxy extends NativeProxyCommon {
callInvokerHolder,
mAndroidUIScheduler,
LayoutAnimations,
messageQueueThread,
fabricUIManager);
}
prepareLayoutAnimations(LayoutAnimations);
Expand All @@ -72,7 +67,6 @@ private native HybridData initHybrid(
CallInvokerHolderImpl jsCallInvokerHolder,
AndroidUIScheduler androidUIScheduler,
LayoutAnimations LayoutAnimations,
MessageQueueThread messageQueueThread,
FabricUIManager fabricUIManager);

private native HybridData initHybridBridgeless(
Expand All @@ -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);
Expand Down
Loading