diff --git a/ReactAndroid/src/main/jni/react/Bridge.cpp b/ReactAndroid/src/main/jni/react/Bridge.cpp index 0e6982af5..e4645f37e 100644 --- a/ReactAndroid/src/main/jni/react/Bridge.cpp +++ b/ReactAndroid/src/main/jni/react/Bridge.cpp @@ -13,7 +13,7 @@ using fbsystrace::FbSystraceSection; namespace facebook { namespace react { -Bridge::Bridge(const RefPtr& jsExecutorFactory, Callback callback) : +Bridge::Bridge(const RefPtr& jsExecutorFactory, Callback callback) : m_callback(std::move(callback)), m_destroyed(std::shared_ptr(new bool(false))) { diff --git a/ReactAndroid/src/main/jni/react/Bridge.h b/ReactAndroid/src/main/jni/react/Bridge.h index 33f7a4a99..eab3ee89a 100644 --- a/ReactAndroid/src/main/jni/react/Bridge.h +++ b/ReactAndroid/src/main/jni/react/Bridge.h @@ -22,11 +22,14 @@ struct dynamic; namespace facebook { namespace react { +class CountableJSExecutorFactory : public JSExecutorFactory, public Countable { +}; + class Bridge : public Countable { public: typedef std::function, bool isEndOfBatch)> Callback; - Bridge(const RefPtr& jsExecutorFactory, Callback callback); + Bridge(const RefPtr& jsExecutorFactory, Callback callback); virtual ~Bridge(); /** diff --git a/ReactAndroid/src/main/jni/react/Executor.h b/ReactAndroid/src/main/jni/react/Executor.h index b4697d6d5..2cd891ac1 100644 --- a/ReactAndroid/src/main/jni/react/Executor.h +++ b/ReactAndroid/src/main/jni/react/Executor.h @@ -5,7 +5,6 @@ #include #include #include -#include #include "JSModulesUnbundle.h" namespace folly { @@ -21,7 +20,7 @@ class JSExecutor; typedef std::function FlushImmediateCallback; -class JSExecutorFactory : public Countable { +class JSExecutorFactory { public: virtual std::unique_ptr createJSExecutor(FlushImmediateCallback cb) = 0; virtual ~JSExecutorFactory() {}; diff --git a/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp b/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp index 1acaa4175..4abc78f20 100644 --- a/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +++ b/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp @@ -627,7 +627,7 @@ static void create(JNIEnv* env, jobject obj, jobject executor, jobject callback, auto bridgeCallback = [weakCallback, weakCallbackQueueThread] (std::vector calls, bool isEndOfBatch) { dispatchCallbacksToJava(weakCallback, weakCallbackQueueThread, std::move(calls), isEndOfBatch); }; - auto nativeExecutorFactory = extractRefPtr(env, executor); + auto nativeExecutorFactory = extractRefPtr(env, executor); auto bridge = createNew(nativeExecutorFactory, bridgeCallback); setCountableForJava(env, obj, std::move(bridge)); } @@ -774,8 +774,14 @@ static void handleMemoryPressureCritical(JNIEnv* env, jobject obj) { namespace executors { +struct CountableJSCExecutorFactory : CountableJSExecutorFactory { + virtual std::unique_ptr createJSExecutor(FlushImmediateCallback cb) override { + return JSCExecutorFactory().createJSExecutor(cb); + } +}; + static void createJSCExecutor(JNIEnv *env, jobject obj) { - auto executor = createNew(); + auto executor = createNew(); setCountableForJava(env, obj, std::move(executor)); } diff --git a/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h b/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h index d88fc3d11..5e168db83 100644 --- a/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h +++ b/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h @@ -2,6 +2,7 @@ #pragma once +#include #include #include #include @@ -14,7 +15,7 @@ namespace react { * This executor factory can only create a single executor instance because it moves * executorInstance global reference to the executor instance it creates. */ -class ProxyExecutorOneTimeFactory : public JSExecutorFactory { +class ProxyExecutorOneTimeFactory : public CountableJSExecutorFactory { public: ProxyExecutorOneTimeFactory(jni::global_ref&& executorInstance) : m_executor(std::move(executorInstance)) {}