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
2 changes: 1 addition & 1 deletion ReactAndroid/src/main/jni/react/jni/ProxyExecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ ProxyExecutor::~ProxyExecutor() {
m_executor.reset();
}

void ProxyExecutor::setupEnvironment(std::function<void(std::string, bool)> loadBundle,
void ProxyExecutor::setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) {
// TODO: what is this ProxyExecutor?
}
Expand Down
7 changes: 3 additions & 4 deletions ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ class ProxyExecutor : public JSExecutor {
ProxyExecutor(jni::global_ref<jobject>&& executorInstance,
std::shared_ptr<ExecutorDelegate> delegate);
virtual ~ProxyExecutor() override;
virtual void setupEnvironment(std::function<void(std::string, bool)> loadBundle,
virtual void setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) override;
virtual void loadScript(
std::unique_ptr<const JSBigString> script,
std::string sourceURL) override;
virtual void loadScript(std::unique_ptr<const JSBigString> script,
std::string sourceURL) override;
virtual void callFunction(
const std::string& moduleId,
const std::string& methodId,
Expand Down
19 changes: 16 additions & 3 deletions ReactCommon/cxxreact/BundleRegistry.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "BundleRegistry.h"
#include <folly/dynamic.h>

namespace facebook {
namespace react {
Expand Down Expand Up @@ -160,18 +161,30 @@ BundleRegistry::GetModuleLambda BundleRegistry::makeGetModuleLambda(std::string
}

BundleRegistry::LoadBundleLambda BundleRegistry::makeLoadBundleLambda(std::string environmentId) {
return [this, environmentId](std::string bundleName, bool inCurrentEnvironment) mutable {
return [this, environmentId](std::string bundleName, bool sync, bool inCurrentEnvironment) mutable {
std::shared_ptr<BundleExecutionEnvironment> execEnv = getEnvironment(environmentId).lock();
std::string bundleURL = bundleLoader_->getBundleURLFromName(bundleName);
execEnv->jsQueue->runOnQueueSync([this, bundleURL, execEnv]() mutable {

std::function<void()> loadAndEvalBundle = [this, bundleName, bundleURL, execEnv, sync]() mutable {
std::unique_ptr<const Bundle> additionalBundle = bundleLoader_->getBundle(bundleURL);
bundles_[bundleURL] = std::move(additionalBundle);
std::shared_ptr<const Bundle> bundle = bundles_[bundleURL];
std::unique_ptr<const JSBigString> script = getScriptFromBundle(bundle);

execEnv->nativeToJsBridge->loadScriptSync(std::move(script),
bundle->getSourceURL());
});
if (!sync) {
execEnv->nativeToJsBridge->callFunction("BundleRegistry",
"bundleRegistryOnLoad",
folly::dynamic::array(bundleName));
}
};

if (sync) {
execEnv->jsQueue->runOnQueueSync(std::move(loadAndEvalBundle));
} else {
execEnv->jsQueue->runOnQueue(std::move(loadAndEvalBundle));
}
};
}

Expand Down
2 changes: 1 addition & 1 deletion ReactCommon/cxxreact/BundleRegistry.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class ModuleRegistry;

class BundleRegistry {
public:
using LoadBundleLambda = std::function<void(std::string bundleName, bool inCurrentEnvironment)>;
using LoadBundleLambda = std::function<void(std::string bundleName, bool sync, bool inCurrentEnvironment)>;
using GetModuleLambda = std::function<RAMBundle::Module(uint32_t moduleId, std::string bundleName)>;

struct BundleExecutionEnvironment {
Expand Down
2 changes: 1 addition & 1 deletion ReactCommon/cxxreact/JSExecutor.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class RN_EXPORT JSExecutor {
* Should be called only once per JSContext.
* Sets: nativeRequire (if bundle is RAM), bundleRegistryLoad
*/
virtual void setupEnvironment(std::function<void(std::string, bool)> loadBundle,
virtual void setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) = 0;

/**
Expand Down
4 changes: 2 additions & 2 deletions ReactCommon/cxxreact/NativeToJsBridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,14 +98,14 @@ NativeToJsBridge::~NativeToJsBridge() {
"NativeToJsBridge::destroy() must be called before deallocating the NativeToJsBridge!";
}

void NativeToJsBridge::setupEnvironment(std::function<void(std::string, bool)> loadBundle,
void NativeToJsBridge::setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) {
runOnExecutorQueue([this, loadBundle, getModule](JSExecutor* executor) mutable {
m_executor->setupEnvironment(loadBundle, getModule);
});
}

void NativeToJsBridge::setupEnvironmentSync(std::function<void(std::string, bool)> loadBundle,
void NativeToJsBridge::setupEnvironmentSync(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) {
m_executor->setupEnvironment(loadBundle, getModule);
}
Expand Down
4 changes: 2 additions & 2 deletions ReactCommon/cxxreact/NativeToJsBridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ class NativeToJsBridge {
* Prepare JSExecutor environment for evaluating JS.
* Should be called only once per JSExecutor.
*/
void setupEnvironment(std::function<void(std::string, bool)> loadBundle,
void setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule);

void setupEnvironmentSync(std::function<void(std::string, bool)> loadBundle,
void setupEnvironmentSync(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule);

/**
Expand Down
9 changes: 5 additions & 4 deletions ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ JSIExecutor::JSIExecutor(
*runtime, "__jsiExecutorDescription", runtime->description());
}

void JSIExecutor::setupEnvironment(std::function<void(std::string, bool)> loadBundle,
void JSIExecutor::setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) {
SystraceSection s("JSIExecutor::setupEnvironment");

Expand Down Expand Up @@ -117,18 +117,19 @@ void JSIExecutor::setupEnvironment(std::function<void(std::string, bool)> loadBu
Function::createFromHostFunction(
*runtime_,
PropNameID::forAscii(*runtime_, "bundleRegistryLoad"),
2,
3,
[this, loadBundle](jsi::Runtime&,
const jsi::Value&,
const jsi::Value* args,
size_t count) {
if (count != 2) {
if (count != 3) {
throw std::invalid_argument("Got wrong number of args");
}

std::string bundleName = args[0].getString(*runtime_).utf8(*runtime_);
bool sync = args[1].getBool();
bool inCurrentEnvironment = args[1].getBool();
loadBundle(bundleName, inCurrentEnvironment);
loadBundle(bundleName, sync, inCurrentEnvironment);

return facebook::jsi::Value();
}));
Expand Down
7 changes: 3 additions & 4 deletions ReactCommon/jsiexecutor/jsireact/JSIExecutor.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,10 @@ class JSIExecutor : public JSExecutor {
Logger logger,
const JSIScopedTimeoutInvoker& timeoutInvoker,
RuntimeInstaller runtimeInstaller);
void setupEnvironment(std::function<void(std::string, bool)> loadBundle,
void setupEnvironment(std::function<void(std::string, bool, bool)> loadBundle,
std::function<RAMBundle::Module(uint32_t, std::string)> getModule) override;
void loadScript(
std::unique_ptr<const JSBigString> script,
std::string sourceURL) override;
void loadScript(std::unique_ptr<const JSBigString> script,
std::string sourceURL) override;
void callFunction(
const std::string& moduleId,
const std::string& methodId,
Expand Down