Skip to content

Commit

Permalink
chore: WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
tjzel committed Oct 5, 2024
1 parent f143d25 commit f50fb59
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ 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<MessageQueueThread> &jsQueue,
const std::shared_ptr<UIScheduler> &uiScheduler,
const PlatformDepMethodsHolder &platformDepMethodsHolder,
const bool isBridgeless,
Expand All @@ -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<WorkletRuntime>(
rnRuntime,
jsQueue,
// jsQueue,
nativeWorkletsModule->getJSQueue(),
jsScheduler_,
"Reanimated UI runtime",
true /* supportsLocking */,
Expand Down Expand Up @@ -234,7 +235,8 @@ jsi::Value NativeReanimatedModule::createWorkletRuntime(
const jsi::Value &initializer) {
auto workletRuntime = std::make_shared<WorkletRuntime>(
rt,
jsQueue_,
// 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 @@ -38,7 +38,7 @@ 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<MessageQueueThread> &jsQueue,
const std::shared_ptr<UIScheduler> &uiScheduler,
const PlatformDepMethodsHolder &platformDepMethodsHolder,
const bool isBridgeless,
Expand Down Expand Up @@ -196,7 +196,8 @@ class NativeReanimatedModule : public NativeReanimatedModuleSpec {

const bool isBridgeless_;
const bool isReducedMotion_;
const std::shared_ptr<MessageQueueThread> jsQueue_;

// 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 @@ -2,13 +2,16 @@

#include <cxxreact/MessageQueueThread.h>
#include <worklets/NativeModules/NativeWorkletsModuleSpec.h>
#include <worklets/WorkletRuntime/WorkletRuntime.h>
#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 @@ -22,8 +25,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_;
};

} // namespace worklets
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ 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
// ,
// jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -47,7 +48,7 @@ NativeProxy::NativeProxy(
NativeWorkletsModule,
*rnRuntime,
std::make_shared<JSScheduler>(*rnRuntime, jsCallInvoker),
std::make_shared<JMessageQueueThread>(messageQueueThread),
// std::make_shared<JMessageQueueThread>(messageQueueThread),
uiScheduler,
getPlatformDependentMethods(),
/* isBridgeless */ false,
Expand Down Expand Up @@ -75,7 +76,7 @@ NativeProxy::NativeProxy(
NativeWorkletsModule,
*rnRuntime,
std::make_shared<JSScheduler>(*rnRuntime, runtimeExecutor),
std::make_shared<JMessageQueueThread>(messageQueueThread),
// std::make_shared<JMessageQueueThread>(messageQueueThread),
uiScheduler,
getPlatformDependentMethods(),
/* isBridgeless */ true,
Expand Down Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#include <fbjni/fbjni.h>
#include <jsi/jsi.h>
#include <react/jni/CxxModuleWrapper.h>
#include <react/jni/JMessageQueueThread.h>
// #include <react/jni/JMessageQueueThread.h>
#include <react/jni/JavaScriptExecutorHolder.h>
#include <react/jni/WritableNativeMap.h>

Expand Down Expand Up @@ -160,8 +160,9 @@ 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
// ,
// jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -177,7 +178,7 @@ 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<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager);
#endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED
Expand Down Expand Up @@ -287,8 +288,9 @@ 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
// ,
// jni::alias_ref<JavaMessageQueueThread::javaobject> messageQueueThread
#ifdef RCT_NEW_ARCH_ENABLED
,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
Expand All @@ -304,7 +306,7 @@ 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<JavaMessageQueueThread::javaobject> messageQueueThread,
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
fabricUIManager);
#endif // REACT_NATIVE_MINOR_VERSION >= 74 && defined(RCT_NEW_ARCH_ENABLED
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 @@ -33,7 +33,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 @@ -50,7 +51,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 @@ -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) {
Expand All @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand All @@ -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;
}
Expand Down

0 comments on commit f50fb59

Please sign in to comment.