mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Move QPL bindings to internal
Summary: Changelog: [Android][Changed] - Move QPL bindings to internal Reviewed By: RSNara Differential Revision: D45046703 fbshipit-source-id: 6383c718bf75dd6436136cdc881c9f59f18a452f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
dd8454b689
commit
244c9ff549
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and 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.bridgeless;
|
||||
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
import com.facebook.proguard.annotations.DoNotStripAny;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
@DoNotStripAny
|
||||
public abstract class BindingsInstaller {
|
||||
static {
|
||||
SoLoader.loadLibrary("rninstance");
|
||||
}
|
||||
|
||||
@DoNotStrip private final HybridData mHybridData;
|
||||
|
||||
protected BindingsInstaller(HybridData hybridData) {
|
||||
mHybridData = hybridData;
|
||||
}
|
||||
}
|
||||
+3
@@ -149,6 +149,7 @@ public final class ReactInstance {
|
||||
});
|
||||
|
||||
JSEngineInstance jsEngineInstance = mDelegate.getJSEngineInstance(mBridgelessReactContext);
|
||||
BindingsInstaller bindingsInstaller = mDelegate.getBindingsInstaller();
|
||||
// Notify JS if profiling is enabled
|
||||
boolean isProfiling =
|
||||
Systrace.isTracing(Systrace.TRACE_TAG_REACT_APPS | Systrace.TRACE_TAG_REACT_JS_VM_CALLS);
|
||||
@@ -160,6 +161,7 @@ public final class ReactInstance {
|
||||
mJavaTimerManager,
|
||||
jsTimerExecutor,
|
||||
reactExceptionManager,
|
||||
bindingsInstaller,
|
||||
isProfiling);
|
||||
|
||||
RuntimeExecutor unbufferedRuntimeExecutor = getUnbufferedRuntimeExecutor();
|
||||
@@ -386,6 +388,7 @@ public final class ReactInstance {
|
||||
JavaTimerManager timerManager,
|
||||
JSTimerExecutor jsTimerExecutor,
|
||||
ReactJsExceptionHandler jReactExceptionsManager,
|
||||
BindingsInstaller jBindingsInstaller,
|
||||
boolean isProfiling);
|
||||
|
||||
@DoNotStrip
|
||||
|
||||
+2
@@ -24,6 +24,8 @@ public interface ReactInstanceDelegate {
|
||||
|
||||
JSBundleLoader getJSBundleLoader(Context context);
|
||||
|
||||
BindingsInstaller getBindingsInstaller();
|
||||
|
||||
TurboModuleManagerDelegate getTurboModuleManagerDelegate(ReactApplicationContext context);
|
||||
|
||||
List<ViewManager> getViewManagers(ReactApplicationContext context);
|
||||
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <ReactCommon/RuntimeExecutor.h>
|
||||
#include <react/bridgeless/ReactInstance.h>
|
||||
|
||||
#include <qpljsibindings/QuickPerformanceLoggerJSIBindings.h>
|
||||
#include <qpljsibindings/UserFlowJSIBindings.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class BindingsInstaller {
|
||||
public:
|
||||
ReactInstance::BindingsInstallFunc getBindingsInstallFunc() {
|
||||
auto installBindings = [](jsi::Runtime &runtime) {
|
||||
jsi::installQPLBindings(runtime);
|
||||
jsi::installUserFlowBindings(runtime);
|
||||
};
|
||||
return installBindings;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fb/fbjni.h>
|
||||
#include <jni.h>
|
||||
#include <jsi/jsi.h>
|
||||
#include <react/bridgeless/BindingsInstaller.h>
|
||||
#include <react/bridgeless/ReactInstance.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class JBindingsInstaller : public jni::HybridClass<JBindingsInstaller>,
|
||||
public BindingsInstaller {
|
||||
public:
|
||||
static constexpr auto kJavaDescriptor =
|
||||
"Lcom/facebook/react/bridgeless/BindingsInstaller;";
|
||||
|
||||
~JBindingsInstaller() {}
|
||||
|
||||
private:
|
||||
friend HybridBase;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
+17
-14
@@ -11,7 +11,6 @@
|
||||
#include <fbsystrace.h>
|
||||
#endif
|
||||
|
||||
#include <BindingsInstaller.h>
|
||||
#include <cxxreact/JSBigString.h>
|
||||
#include <cxxreact/RecoverableError.h>
|
||||
#include <fb/fbjni.h>
|
||||
@@ -37,6 +36,7 @@ JReactInstance::JReactInstance(
|
||||
jni::alias_ref<JJavaTimerManager::javaobject> javaTimerManager,
|
||||
jni::alias_ref<JJSTimerExecutor::javaobject> jsTimerExecutor,
|
||||
jni::alias_ref<JReactExceptionManager::javaobject> jReactExceptionManager,
|
||||
jni::alias_ref<JBindingsInstaller::javaobject> jBindingsInstaller,
|
||||
bool isProfiling) noexcept {
|
||||
// TODO(janzer): Lazily create runtime
|
||||
auto sharedJSMessageQueueThread =
|
||||
@@ -50,10 +50,6 @@ JReactInstance::JReactInstance(
|
||||
auto timerManager = std::make_shared<TimerManager>(std::move(timerRegistry));
|
||||
jsTimerExecutor->cthis()->setTimerManager(timerManager);
|
||||
|
||||
// Create the instance
|
||||
std::unique_ptr<BindingsInstaller> bindingsInstaller =
|
||||
std::make_unique<BindingsInstaller>();
|
||||
|
||||
jReactExceptionManager_ = jni::make_global(jReactExceptionManager);
|
||||
auto jsErrorHandlingFunc = [this](MapBuffer errorMap) noexcept {
|
||||
if (jReactExceptionManager_ != nullptr) {
|
||||
@@ -63,26 +59,31 @@ JReactInstance::JReactInstance(
|
||||
}
|
||||
};
|
||||
|
||||
jBindingsInstaller_ = jni::make_global(jBindingsInstaller);
|
||||
|
||||
instance_ = std::make_unique<ReactInstance>(
|
||||
jsEngineInstance->cthis()->createJSRuntime(),
|
||||
sharedJSMessageQueueThread,
|
||||
timerManager,
|
||||
std::move(jsErrorHandlingFunc));
|
||||
auto appBindingInstaller = bindingsInstaller->getBindingsInstallFunc();
|
||||
|
||||
auto bufferedRuntimeExecutor = instance_->getBufferedRuntimeExecutor();
|
||||
timerManager->setRuntimeExecutor(bufferedRuntimeExecutor);
|
||||
|
||||
ReactInstance::JSRuntimeFlags options = {.isProfiling = isProfiling};
|
||||
instance_->initializeRuntime(
|
||||
options,
|
||||
[appBindingInstaller, instance = instance_.get()](jsi::Runtime &runtime) {
|
||||
react::Logger androidLogger =
|
||||
static_cast<void (*)(const std::string &, unsigned int)>(
|
||||
&reactAndroidLoggingHook);
|
||||
react::bindNativeLogger(runtime, androidLogger);
|
||||
instance_->initializeRuntime(options, [this](jsi::Runtime &runtime) {
|
||||
react::Logger androidLogger =
|
||||
static_cast<void (*)(const std::string &, unsigned int)>(
|
||||
&reactAndroidLoggingHook);
|
||||
react::bindNativeLogger(runtime, androidLogger);
|
||||
if (jBindingsInstaller_ != nullptr) {
|
||||
auto appBindingInstaller =
|
||||
jBindingsInstaller_->cthis()->getBindingsInstallFunc();
|
||||
if (appBindingInstaller != nullptr) {
|
||||
appBindingInstaller(runtime);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
auto unbufferedRuntimeExecutor = instance_->getUnbufferedRuntimeExecutor();
|
||||
// Set up the JS and native modules call invokers (for TurboModules)
|
||||
@@ -112,6 +113,7 @@ jni::local_ref<JReactInstance::jhybriddata> JReactInstance::initHybrid(
|
||||
jni::alias_ref<JJavaTimerManager::javaobject> javaTimerManager,
|
||||
jni::alias_ref<JJSTimerExecutor::javaobject> jsTimerExecutor,
|
||||
jni::alias_ref<JReactExceptionManager::javaobject> jReactExceptionManager,
|
||||
jni::alias_ref<JBindingsInstaller::javaobject> jBindingsInstaller,
|
||||
bool isProfiling) {
|
||||
return makeCxxInstance(
|
||||
jsEngineInstance,
|
||||
@@ -120,6 +122,7 @@ jni::local_ref<JReactInstance::jhybriddata> JReactInstance::initHybrid(
|
||||
javaTimerManager,
|
||||
jsTimerExecutor,
|
||||
jReactExceptionManager,
|
||||
jBindingsInstaller,
|
||||
isProfiling);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <react/jni/JSLoader.h>
|
||||
#include <react/jni/ReadableNativeMap.h>
|
||||
|
||||
#include "JBindingsInstaller.h"
|
||||
#include "JJSEngineInstance.h"
|
||||
#include "JJSTimerExecutor.h"
|
||||
#include "JJavaTimerManager.h"
|
||||
@@ -43,6 +44,7 @@ class JReactInstance : public jni::HybridClass<JReactInstance> {
|
||||
jni::alias_ref<JJavaTimerManager::javaobject> javaTimerManager,
|
||||
jni::alias_ref<JJSTimerExecutor::javaobject> jsTimerExecutor,
|
||||
jni::alias_ref<JReactExceptionManager::javaobject> jReactExceptionManager,
|
||||
jni::alias_ref<JBindingsInstaller::javaobject> jBindingsInstaller,
|
||||
bool isProfiling);
|
||||
|
||||
/*
|
||||
@@ -87,6 +89,7 @@ class JReactInstance : public jni::HybridClass<JReactInstance> {
|
||||
jni::alias_ref<JJavaTimerManager::javaobject> javaTimerManager,
|
||||
jni::alias_ref<JJSTimerExecutor::javaobject> jsTimerExecutor,
|
||||
jni::alias_ref<JReactExceptionManager::javaobject> jReactExceptionManager,
|
||||
jni::alias_ref<JBindingsInstaller::javaobject> jBindingsInstaller,
|
||||
bool isProfiling) noexcept;
|
||||
|
||||
jni::alias_ref<CallInvokerHolder::javaobject> getJSCallInvokerHolder();
|
||||
@@ -99,6 +102,7 @@ class JReactInstance : public jni::HybridClass<JReactInstance> {
|
||||
jni::global_ref<CallInvokerHolder::javaobject> jsCallInvokerHolder_;
|
||||
jni::global_ref<CallInvokerHolder::javaobject> nativeCallInvokerHolder_;
|
||||
jni::global_ref<JReactExceptionManager::javaobject> jReactExceptionManager_;
|
||||
jni::global_ref<JBindingsInstaller::javaobject> jBindingsInstaller_;
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <react/bridgeless/ReactInstance.h>
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class BindingsInstaller {
|
||||
public:
|
||||
virtual ReactInstance::BindingsInstallFunc getBindingsInstallFunc() {
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
Reference in New Issue
Block a user