Pass RuntimeScheduler to Binding

Summary: changelog: [internal]

Reviewed By: ShikaSD

Differential Revision: D30487037

fbshipit-source-id: 3956606891a313577fd013ae5c2a9f1f90ac5903
This commit is contained in:
Samuel Susla
2021-09-06 05:42:30 -07:00
committed by Facebook GitHub Bot
parent cf561b4052
commit f679891bd6
15 changed files with 143 additions and 3 deletions
@@ -1360,6 +1360,10 @@ public class ReactInstanceManager {
}
}
if (ReactFeatureFlags.enableRuntimeScheduler) {
catalystInstance.installRuntimeScheduler();
}
if (mJSIModulePackage != null) {
catalystInstance.addJSIModules(
mJSIModulePackage.getJSIModules(
@@ -111,6 +111,10 @@ public interface CatalystInstance
RuntimeExecutor getRuntimeExecutor();
RuntimeScheduler getRuntimeScheduler();
void installRuntimeScheduler();
void addJSIModules(List<JSIModuleSpec> jsiModules);
/**
@@ -558,6 +558,10 @@ public class CatalystInstanceImpl implements CatalystInstance {
public native RuntimeExecutor getRuntimeExecutor();
public native RuntimeScheduler getRuntimeScheduler();
public native void installRuntimeScheduler();
@Override
public void addJSIModules(List<JSIModuleSpec> jsiModules) {
mJSIModuleRegistry.registerModules(jsiModules);
@@ -0,0 +1,21 @@
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.bridge;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
/** A Java holder for a C++ RuntimeScheduler. */
public class RuntimeScheduler {
@DoNotStrip private HybridData mHybridData;
public RuntimeScheduler(HybridData hybridData) {
mHybridData = hybridData;
}
}
@@ -9,11 +9,13 @@ package com.facebook.react.fabric;
import android.annotation.SuppressLint;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.facebook.jni.HybridData;
import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.bridge.NativeMap;
import com.facebook.react.bridge.ReadableNativeMap;
import com.facebook.react.bridge.RuntimeExecutor;
import com.facebook.react.bridge.RuntimeScheduler;
import com.facebook.react.bridge.queue.MessageQueueThread;
import com.facebook.react.fabric.events.EventBeatManager;
import com.facebook.react.fabric.events.EventEmitterWrapper;
@@ -37,6 +39,7 @@ public class Binding {
private native void installFabricUIManager(
RuntimeExecutor runtimeExecutor,
RuntimeScheduler runtimeScheduler,
Object uiManager,
EventBeatManager eventBeatManager,
MessageQueueThread jsMessageQueueThread,
@@ -83,6 +86,7 @@ public class Binding {
public void register(
@NonNull RuntimeExecutor runtimeExecutor,
@Nullable RuntimeScheduler runtimeScheduler,
@NonNull FabricUIManager fabricUIManager,
@NonNull EventBeatManager eventBeatManager,
@NonNull MessageQueueThread jsMessageQueueThread,
@@ -91,6 +95,7 @@ public class Binding {
fabricUIManager.setBinding(this);
installFabricUIManager(
runtimeExecutor,
runtimeScheduler,
fabricUIManager,
eventBeatManager,
jsMessageQueueThread,
@@ -55,6 +55,7 @@ public class FabricJSIModuleProvider implements JSIModuleProvider<UIManager> {
binding.register(
mReactApplicationContext.getCatalystInstance().getRuntimeExecutor(),
mReactApplicationContext.getCatalystInstance().getRuntimeScheduler(),
uiManager,
eventBeatManager,
jsMessageQueueThread,
@@ -11,7 +11,7 @@ LOCAL_MODULE := fabricjni
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SHARED_LIBRARIES := libjsi libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry
LOCAL_SHARED_LIBRARIES := libjsi libreactconfig librrc_slider librrc_progressbar librrc_switch librrc_modal libyoga libglog libfb libfbjni libglog_init libfolly_json libfolly_futures libreact_render_mounting libreactnativeutilsjni libreact_utils libreact_render_debug libreact_render_graphics libreact_render_core react_render_componentregistry librrc_view librrc_unimplementedview librrc_root librrc_scrollview libbetter libreact_render_attributedstring libreact_render_uimanager libreact_render_templateprocessor libreact_render_scheduler libreact_render_animations libreact_render_imagemanager libreact_render_textlayoutmanager libreact_codegen_rncore rrc_text librrc_image librrc_textinput libreact_debug libreact_render_mapbuffer libmapbufferjni libreact_render_telemetry libreact_render_runtimescheduler
LOCAL_STATIC_LIBRARIES :=
@@ -56,6 +56,7 @@ $(call import-module,react/renderer/graphics)
$(call import-module,react/renderer/imagemanager)
$(call import-module,react/renderer/mapbuffer)
$(call import-module,react/renderer/mounting)
$(call import-module,react/renderer/runtimescheduler)
$(call import-module,react/renderer/scheduler)
$(call import-module,react/renderer/templateprocessor)
$(call import-module,react/renderer/textlayoutmanager)
@@ -493,6 +493,7 @@ bool isMapBufferSerializationEnabled() {
void Binding::installFabricUIManager(
jni::alias_ref<JRuntimeExecutor::javaobject> runtimeExecutorHolder,
jni::alias_ref<JRuntimeScheduler::javaobject> runtimeSchedulerHolder,
jni::alias_ref<jobject> javaUIManager,
EventBeatManager *eventBeatManager,
jni::alias_ref<JavaMessageQueueThread::javaobject> jsMessageQueueThread,
@@ -527,6 +528,17 @@ void Binding::installFabricUIManager(
std::make_shared<JMessageQueueThread>(jsMessageQueueThread);
auto runtimeExecutor = runtimeExecutorHolder->cthis()->get();
if (runtimeSchedulerHolder) {
auto runtimeScheduler = runtimeSchedulerHolder->cthis()->get();
if (runtimeScheduler) {
runtimeExecutor =
[runtimeScheduler](
std::function<void(jsi::Runtime & runtime)> &&callback) {
runtimeScheduler->scheduleWork(std::move(callback));
};
}
}
// TODO: T31905686 Create synchronous Event Beat
jni::global_ref<jobject> localJavaUIManager = javaUIManager_;
EventBeat::Factory synchronousBeatFactory =
@@ -10,6 +10,7 @@
#include <fbjni/fbjni.h>
#include <react/jni/JMessageQueueThread.h>
#include <react/jni/JRuntimeExecutor.h>
#include <react/jni/JRuntimeScheduler.h>
#include <react/jni/ReadableNativeMap.h>
#include <react/renderer/animations/LayoutAnimationDriver.h>
#include <react/renderer/scheduler/Scheduler.h>
@@ -105,6 +106,7 @@ class Binding : public jni::HybridClass<Binding>,
void installFabricUIManager(
jni::alias_ref<JRuntimeExecutor::javaobject> runtimeExecutorHolder,
jni::alias_ref<JRuntimeScheduler::javaobject> runtimeSchedulerHolder,
jni::alias_ref<jobject> javaUIManager,
EventBeatManager *eventBeatManager,
jni::alias_ref<JavaMessageQueueThread::javaobject> jsMessageQueueThread,