From 4abc97fe1b3c1616b48c03f14522b29990626574 Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Thu, 2 Jun 2022 00:26:21 +0530 Subject: [PATCH 01/10] added a new builder method with a Boolean argument that tells the Constructor which engine to load at app startup. --- .../facebook/react/ReactInstanceManager.java | 6 ++ .../react/ReactInstanceManagerBuilder.java | 69 ++++++++++--------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index feed1ca6d0bd4e..b6f58805a891f8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -212,6 +212,12 @@ public static ReactInstanceManagerBuilder builder() { return new ReactInstanceManagerBuilder(); } + /** Creates a builder that is capable of creating an instance of {@link ReactInstanceManager}. + * and specifies weather to load with hermes or jsc */ + public static ReactInstanceManagerBuilder builder(Boolean hermesEnabled) { + return new ReactInstanceManagerBuilder(hermesEnabled); + } + /* package */ ReactInstanceManager( Context applicationContext, @Nullable Activity currentActivity, diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index d7450a14ce5c9e..746f096561b313 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -66,8 +66,17 @@ public class ReactInstanceManagerBuilder { private @Nullable Map mCustomPackagerCommandHandlers; private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; + private Boolean hermesEnabled = null; - /* package protected */ ReactInstanceManagerBuilder() {} + /* package protected Deafault Constructor */ + ReactInstanceManagerBuilder() {} + + /** + * Constructor that takes a Boolean specifying weather to load hermes or jsc + */ + ReactInstanceManagerBuilder(Boolean hermesEnabled) { + this.hermesEnabled = hermesEnabled; + } /** Sets a provider of {@link UIImplementation}. Uses default provider if null is passed. */ public ReactInstanceManagerBuilder setUIImplementationProvider( @@ -344,42 +353,36 @@ public ReactInstanceManager build() { } private JavaScriptExecutorFactory getDefaultJSExecutorFactory( - String appName, String deviceName, Context applicationContext) { - try { - // If JSC is included, use it as normal - initializeSoLoaderIfNecessary(applicationContext); - JSCExecutor.loadLibrary(); - return new JSCExecutorFactory(appName, deviceName); - } catch (UnsatisfiedLinkError jscE) { - // https://github.com/facebook/hermes/issues/78 shows that - // people who aren't trying to use Hermes are having issues. - // https://github.com/facebook/react-native/issues/25923#issuecomment-554295179 - // includes the actual JSC error in at least one case. - // - // So, if "__cxa_bad_typeid" shows up in the jscE exception - // message, then we will assume that's the failure and just - // throw now. - - if (jscE.getMessage().contains("__cxa_bad_typeid")) { - throw jscE; - } - - // Otherwise use Hermes + String appName, String deviceName, Context applicationContext) { + + // Relying solely on try catch block and loading jsc even when + // project is using hermes can lead to launchtime crashes expecially in + // monorepo architectures and hybrid apps using both native android + // and react native. + // So we can use the value of enableHermes receved by the constructor + // to decide which library to load at launch + + // if nothing is specified, use old loading method + // else load the required engine + if (hermesEnabled == null) { try { + // If JSC is included, use it as normal + initializeSoLoaderIfNecessary(applicationContext); + JSCExecutor.loadLibrary(); + return new JSCExecutorFactory(appName, deviceName); + } catch (UnsatisfiedLinkError jscE) { + if (jscE.getMessage().contains("__cxa_bad_typeid")) { + throw jscE; + } HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); - } catch (UnsatisfiedLinkError hermesE) { - // If we get here, either this is a JSC build, and of course - // Hermes failed (since it's not in the APK), or it's a Hermes - // build, and Hermes had a problem. - - // We suspect this is a JSC issue (it's the default), so we - // will throw that exception, but we will print hermesE first, - // since it could be a Hermes issue and we don't want to - // swallow that. - hermesE.printStackTrace(); - throw jscE; } + } else if (hermesEnabled == true) { + HermesExecutor.loadLibrary(); + return new HermesExecutorFactory(); + } else { + JSCExecutor.loadLibrary(); + return new JSCExecutorFactory(appName, deviceName); } } } From 96221403779507c8fb0e279c76c9e2646086bb09 Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Thu, 16 Jun 2022 23:04:30 +0530 Subject: [PATCH 02/10] fixed comment --- .../java/com/facebook/react/ReactInstanceManagerBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index 746f096561b313..771622ffc75274 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -72,7 +72,7 @@ public class ReactInstanceManagerBuilder { ReactInstanceManagerBuilder() {} /** - * Constructor that takes a Boolean specifying weather to load hermes or jsc + * Constructor that takes a Boolean specifying whether to load hermes or jsc */ ReactInstanceManagerBuilder(Boolean hermesEnabled) { this.hermesEnabled = hermesEnabled; From b964aeb4b5ef201dba7c174dfd96be072d2bc0b6 Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sat, 18 Jun 2022 20:53:50 +0530 Subject: [PATCH 03/10] using enum instead of Boolean to fix jsEngine loading --- .../react/ReactInstanceManagerBuilder.java | 43 +++++++++++++------ .../facebook/react/util/JSInterpreter.java | 12 ++++++ 2 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index 771622ffc75274..d9911b500bb9ca 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -34,6 +34,8 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.packagerconnection.RequestHandler; import com.facebook.react.uimanager.UIImplementationProvider; +import com.facebook.react.util.JSInterpreter; + import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -66,18 +68,11 @@ public class ReactInstanceManagerBuilder { private @Nullable Map mCustomPackagerCommandHandlers; private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; - private Boolean hermesEnabled = null; + private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; /* package protected Deafault Constructor */ ReactInstanceManagerBuilder() {} - /** - * Constructor that takes a Boolean specifying whether to load hermes or jsc - */ - ReactInstanceManagerBuilder(Boolean hermesEnabled) { - this.hermesEnabled = hermesEnabled; - } - /** Sets a provider of {@link UIImplementation}. Uses default provider if null is passed. */ public ReactInstanceManagerBuilder setUIImplementationProvider( @Nullable UIImplementationProvider uiImplementationProvider) { @@ -134,6 +129,30 @@ public ReactInstanceManagerBuilder setJSBundleLoader(JSBundleLoader jsBundleLoad return this; } + /** + * Sets the jsEngine as JSC or HERMES as per the setJsEngineAsHermes call + * Uses the enum {@link JSInterpreter} + * @param jsEngine + */ + private void setJSEngine(JSInterpreter jsEngine){ + this.jsEngine = jsEngine; + } + + /** + * Utility setter to set the required JSEngine as HERMES or JSC + * Defaults to OLD_LOGIC if not called by the host app + * @param hermesEnabled + * hermesEnabled = true sets the JS Engine as HERMES and JSC otherwise + */ + public void setJsEngineAsHermes(boolean hermesEnabled){ + if(hermesEnabled){ + setJSEngine(JSInterpreter.HERMES); + } + else{ + setJSEngine(JSInterpreter.JSC); + } + } + /** * Path to your app's main module on Metro. This is used when reloading JS during development. All * paths are relative to the root folder the packager is serving files from. Examples: {@code @@ -356,15 +375,15 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( String appName, String deviceName, Context applicationContext) { // Relying solely on try catch block and loading jsc even when - // project is using hermes can lead to launchtime crashes expecially in + // project is using hermes can lead to launch-time crashes especially in // monorepo architectures and hybrid apps using both native android // and react native. - // So we can use the value of enableHermes receved by the constructor + // So we can use the value of enableHermes received by the constructor // to decide which library to load at launch // if nothing is specified, use old loading method // else load the required engine - if (hermesEnabled == null) { + if (jsEngine == JSInterpreter.OLD_LOGIC) { try { // If JSC is included, use it as normal initializeSoLoaderIfNecessary(applicationContext); @@ -377,7 +396,7 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); } - } else if (hermesEnabled == true) { + } else if (jsEngine == JSInterpreter.HERMES) { HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); } else { diff --git a/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java b/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java new file mode 100644 index 00000000000000..2b5fa3aaa133de --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java @@ -0,0 +1,12 @@ +package com.facebook.react.util; + +/** + * An enum that specifies the JS Interpreter to be used in the app + * Old Logic uses the legacy code + * JSC/HERMES loads the respective engine using the revamped logic + */ +public enum JSInterpreter { + OLD_LOGIC, + JSC, + HERMES +} From fa83992e7aa09ec806a0f13be9660fe47acc9d9c Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sat, 18 Jun 2022 21:05:52 +0530 Subject: [PATCH 04/10] removed other builder method --- .../main/java/com/facebook/react/ReactInstanceManager.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index b6f58805a891f8..feed1ca6d0bd4e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -212,12 +212,6 @@ public static ReactInstanceManagerBuilder builder() { return new ReactInstanceManagerBuilder(); } - /** Creates a builder that is capable of creating an instance of {@link ReactInstanceManager}. - * and specifies weather to load with hermes or jsc */ - public static ReactInstanceManagerBuilder builder(Boolean hermesEnabled) { - return new ReactInstanceManagerBuilder(hermesEnabled); - } - /* package */ ReactInstanceManager( Context applicationContext, @Nullable Activity currentActivity, From 534db739096c4a29f76ea5407aac11a01fa4fe8b Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sat, 18 Jun 2022 22:44:03 +0530 Subject: [PATCH 05/10] fixed return type --- .../com/facebook/react/ReactInstanceManagerBuilder.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index d9911b500bb9ca..ff213c51ed699c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -35,7 +35,6 @@ import com.facebook.react.packagerconnection.RequestHandler; import com.facebook.react.uimanager.UIImplementationProvider; import com.facebook.react.util.JSInterpreter; - import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -70,8 +69,7 @@ public class ReactInstanceManagerBuilder { private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; - /* package protected Deafault Constructor */ - ReactInstanceManagerBuilder() {} + /* package protected */ ReactInstanceManagerBuilder() {} /** Sets a provider of {@link UIImplementation}. Uses default provider if null is passed. */ public ReactInstanceManagerBuilder setUIImplementationProvider( @@ -144,13 +142,14 @@ private void setJSEngine(JSInterpreter jsEngine){ * @param hermesEnabled * hermesEnabled = true sets the JS Engine as HERMES and JSC otherwise */ - public void setJsEngineAsHermes(boolean hermesEnabled){ + public ReactInstanceManagerBuilder setJsEngineAsHermes(boolean hermesEnabled){ if(hermesEnabled){ setJSEngine(JSInterpreter.HERMES); } else{ setJSEngine(JSInterpreter.JSC); } + return this; } /** From 75be3881c14e51697b164542bcb33d3b706817cd Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sat, 18 Jun 2022 23:05:37 +0530 Subject: [PATCH 06/10] updated comment --- .../src/main/java/com/facebook/react/util/JSInterpreter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java b/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java index 2b5fa3aaa133de..6d83ec9786c369 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java +++ b/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java @@ -1,7 +1,7 @@ package com.facebook.react.util; /** - * An enum that specifies the JS Interpreter to be used in the app + * An enum that specifies the JS Engine to be used in the app * Old Logic uses the legacy code * JSC/HERMES loads the respective engine using the revamped logic */ From 7f76e588b45ab9d02d0f7e91af397fff88fe75d8 Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sat, 18 Jun 2022 23:07:05 +0530 Subject: [PATCH 07/10] fixed indentation --- .../java/com/facebook/react/ReactInstanceManagerBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index ff213c51ed699c..1993bafe42ae8b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -67,7 +67,7 @@ public class ReactInstanceManagerBuilder { private @Nullable Map mCustomPackagerCommandHandlers; private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; - private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; + private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; /* package protected */ ReactInstanceManagerBuilder() {} From c7205169eba6f608f90e8e176c3dbbc234baea54 Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Sun, 19 Jun 2022 18:24:04 +0530 Subject: [PATCH 08/10] moved JSInterpreter enum to ReactInstanceManagerBuilder --- .../facebook/react/ReactInstanceManagerBuilder.java | 11 ++++++++++- .../java/com/facebook/react/util/JSInterpreter.java | 12 ------------ 2 files changed, 10 insertions(+), 13 deletions(-) delete mode 100644 ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index 1993bafe42ae8b..51f6bf7736c9a4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -34,7 +34,6 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.packagerconnection.RequestHandler; import com.facebook.react.uimanager.UIImplementationProvider; -import com.facebook.react.util.JSInterpreter; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -67,6 +66,16 @@ public class ReactInstanceManagerBuilder { private @Nullable Map mCustomPackagerCommandHandlers; private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; + /** + * An enum that specifies the JS Engine to be used in the app + * Old Logic uses the legacy code + * JSC/HERMES loads the respective engine using the revamped logic + */ + public enum JSInterpreter { + OLD_LOGIC, + JSC, + HERMES + } private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; /* package protected */ ReactInstanceManagerBuilder() {} diff --git a/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java b/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java deleted file mode 100644 index 6d83ec9786c369..00000000000000 --- a/ReactAndroid/src/main/java/com/facebook/react/util/JSInterpreter.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.facebook.react.util; - -/** - * An enum that specifies the JS Engine to be used in the app - * Old Logic uses the legacy code - * JSC/HERMES loads the respective engine using the revamped logic - */ -public enum JSInterpreter { - OLD_LOGIC, - JSC, - HERMES -} From 07fe589867f30dbdde8fc516381a86687b2c3bdb Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Tue, 21 Jun 2022 00:23:50 +0530 Subject: [PATCH 09/10] renamed jsEngine as jsInterpreter --- .../facebook/react/ReactInstanceManagerBuilder.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index 51f6bf7736c9a4..3ad78d8d759f65 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -76,7 +76,7 @@ public enum JSInterpreter { JSC, HERMES } - private JSInterpreter jsEngine = JSInterpreter.OLD_LOGIC; + private JSInterpreter jsInterpreter = JSInterpreter.OLD_LOGIC; /* package protected */ ReactInstanceManagerBuilder() {} @@ -139,10 +139,10 @@ public ReactInstanceManagerBuilder setJSBundleLoader(JSBundleLoader jsBundleLoad /** * Sets the jsEngine as JSC or HERMES as per the setJsEngineAsHermes call * Uses the enum {@link JSInterpreter} - * @param jsEngine + * @param jsInterpreter */ - private void setJSEngine(JSInterpreter jsEngine){ - this.jsEngine = jsEngine; + private void setJSEngine(JSInterpreter jsInterpreter){ + this.jsInterpreter = jsInterpreter; } /** @@ -391,7 +391,7 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( // if nothing is specified, use old loading method // else load the required engine - if (jsEngine == JSInterpreter.OLD_LOGIC) { + if (jsInterpreter == JSInterpreter.OLD_LOGIC) { try { // If JSC is included, use it as normal initializeSoLoaderIfNecessary(applicationContext); @@ -404,7 +404,7 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory( HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); } - } else if (jsEngine == JSInterpreter.HERMES) { + } else if (jsInterpreter == JSInterpreter.HERMES) { HermesExecutor.loadLibrary(); return new HermesExecutorFactory(); } else { From 6ddbca8826060322ba1e713ca9370b889071c4ba Mon Sep 17 00:00:00 2001 From: Kunal Farmah Date: Wed, 22 Jun 2022 19:00:41 +0530 Subject: [PATCH 10/10] moved jsInterpreter to react package as a stanalone enum class --- .../main/java/com/facebook/react/JSInterpreter.java | 12 ++++++++++++ .../facebook/react/ReactInstanceManagerBuilder.java | 10 ---------- 2 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 ReactAndroid/src/main/java/com/facebook/react/JSInterpreter.java diff --git a/ReactAndroid/src/main/java/com/facebook/react/JSInterpreter.java b/ReactAndroid/src/main/java/com/facebook/react/JSInterpreter.java new file mode 100644 index 00000000000000..482a71e770fb36 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/JSInterpreter.java @@ -0,0 +1,12 @@ +package com.facebook.react; + +/** + * An enum that specifies the JS Engine to be used in the app + * Old Logic uses the legacy code + * JSC/HERMES loads the respective engine using the revamped logic + */ +public enum JSInterpreter { + OLD_LOGIC, + JSC, + HERMES +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java index 3ad78d8d759f65..5536c14ca21a33 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java @@ -66,16 +66,6 @@ public class ReactInstanceManagerBuilder { private @Nullable Map mCustomPackagerCommandHandlers; private @Nullable ReactPackageTurboModuleManagerDelegate.Builder mTMMDelegateBuilder; private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory; - /** - * An enum that specifies the JS Engine to be used in the app - * Old Logic uses the legacy code - * JSC/HERMES loads the respective engine using the revamped logic - */ - public enum JSInterpreter { - OLD_LOGIC, - JSC, - HERMES - } private JSInterpreter jsInterpreter = JSInterpreter.OLD_LOGIC; /* package protected */ ReactInstanceManagerBuilder() {}