Skip to content

Commit f5a5da1

Browse files
authored
Getting rid of the legacy JS integration in favor of JSI with V8 impl… (#224)
* Getting rid of the legacy JS integration in favor of JSI with V8 implementation * Some cleanup * A few more cleanups including removing privatedata
1 parent e5460d3 commit f5a5da1

28 files changed

+53
-2269
lines changed

RNTester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterApplication.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.facebook.react.bridge.ReactMarkerConstants;
2222
import com.facebook.react.shell.MainReactPackage;
2323
import com.facebook.react.v8executor.V8ExecutorFactory;
24-
import com.facebook.react.jscexecutor.JSCExecutorFactory;
2524
import com.facebook.react.views.text.ReactFontManager;
2625

2726

@@ -73,30 +72,6 @@ public List<ReactPackage> getPackages() {
7372
new MainReactPackage()
7473
);
7574
}
76-
77-
@Override
78-
public JavaScriptExecutorFactory getJavaScriptExecutorFactory() {
79-
ReactMarker.addListener(new RNTesterReactMarker());
80-
// We use the name of the device and the app for debugging & metrics
81-
String appName = getPackageName();
82-
String deviceName = getFriendlyDeviceName();
83-
84-
File jseDir = getApplicationContext().getDir("jse", Context.MODE_PRIVATE);
85-
File jsDataStore = new File(jseDir, JSE_CACHING_DIRECTORY_NAME);
86-
String jseCacheDirectoryPath = "";
87-
if ((jsDataStore.exists() && jsDataStore.isDirectory()) || jsDataStore.mkdirs()) {
88-
jseCacheDirectoryPath = jsDataStore.getAbsolutePath();
89-
}
90-
if(BuildConfig.JS_ENGINE_USED.equals("V8")){
91-
return new V8ExecutorFactory(appName, deviceName, new V8ExecutorFactory.V8ConfigParams(jseCacheDirectoryPath, V8ExecutorFactory.V8ConfigParams.CacheType.CodeCache, false));
92-
}
93-
else if(BuildConfig.JS_ENGINE_USED.equals("JSC")){
94-
return new JSCExecutorFactory(appName, deviceName);
95-
}
96-
else{
97-
return null;
98-
}
99-
}
10075
};
10176

10277
@Override

ReactAndroid/ReactAndroid.nuspec

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@
3737
<file src="build\react-ndk\all\x86\libjsinspector.so" target="lib\droidx86"/>
3838
<file src="build\react-ndk\all\arm64-v8a\libjsinspector.so" target="lib\droidarm64"/>
3939

40-
<file src="build\react-ndk\all\x86_64\libprivatedata.so" target="lib\droidx64"/>
41-
<file src="build\react-ndk\all\armeabi-v7a\libprivatedata.so" target="lib\droidarm"/>
42-
<file src="build\react-ndk\all\x86\libprivatedata.so" target="lib\droidx86"/>
43-
<file src="build\react-ndk\all\arm64-v8a\libprivatedata.so" target="lib\droidarm64"/>
44-
4540
<file src="build\react-ndk\all\x86_64\libreactnativejni.so" target="lib\droidx64"/>
4641
<file src="build\react-ndk\all\armeabi-v7a\libreactnativejni.so" target="lib\droidarm"/>
4742
<file src="build\react-ndk\all\x86\libreactnativejni.so" target="lib\droidx86"/>
@@ -88,11 +83,6 @@
8883
<file src="build\tmp\buildReactNdkLib\local\x86\libjsinspector.so" target="lib\droidx86\unstripped"/>
8984
<file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libjsinspector.so" target="lib\droidarm64\unstripped"/>
9085

91-
<file src="build\tmp\buildReactNdkLib\local\x86_64\libprivatedata.so" target="lib\droidx64\unstripped"/>
92-
<file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libprivatedata.so" target="lib\droidarm\unstripped"/>
93-
<file src="build\tmp\buildReactNdkLib\local\x86\libprivatedata.so" target="lib\droidx86\unstripped"/>
94-
<file src="build\tmp\buildReactNdkLib\local\arm64-v8a\libprivatedata.so" target="lib\droidarm64\unstripped"/>
95-
9686
<file src="build\tmp\buildReactNdkLib\local\x86_64\libreactnativejni.so" target="lib\droidx64\unstripped"/>
9787
<file src="build\tmp\buildReactNdkLib\local\armeabi-v7a\libreactnativejni.so" target="lib\droidarm\unstripped"/>
9888
<file src="build\tmp\buildReactNdkLib\local\x86\libreactnativejni.so" target="lib\droidx86\unstripped"/>
@@ -124,7 +114,6 @@
124114
<file src="..\ReactCommon\yoga\yoga\**\*.h" target="inc\Yoga"/>
125115
<file src="..\folly\**\*.*" target="inc" />
126116
<file src="..\glog\src\glog\*.h" target="inc\glog" />
127-
<file src="..\ReactCommon\privatedata\PrivateDataBase.h" target="inc\privatedata" />
128117
<file src="..\jsc\jsc-headers\*.h" target="inc\jsc"/>
129118
</files>
130119
</package>

ReactAndroid/build.gradle

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,8 @@ def boostPath = dependenciesPath ?: System.getenv("REACT_NATIVE_BOOST_PATH") ?:
4040
def DoubleConversionPath = '../double-conversion'
4141
def FollyPath = '..'
4242
def GlogPath = '..'
43-
def JSCPath = '../jsc'
4443
def V8Path = 'packages/ReactNative.V8.Android.7.0.276.32-v1'
4544

46-
47-
// Set the value of JSEngineUsed as 'V8' or 'JSC' to enable the respective engine
48-
def JSEngineUsed = 'V8'
49-
5045
task createNativeDepsDirectories {
5146
downloadsDir.mkdirs()
5247
thirdPartyNdkDir.mkdirs()
@@ -130,34 +125,30 @@ task prepareGlog(dependsOn: createNativeDepsDirectories, type: Copy) {
130125

131126
// Create Android.mk library module based on jsc from npm
132127
task prepareJSC {
133-
if (JSEngineUsed=='JSC'){
134-
doLast {
135-
def jscPackageRoot = file("$projectDir/../node_modules/jsc-android/dist")
136-
if (!jscPackageRoot.exists()) {
137-
// For an app to build from RN source, the jsc-android is located at /path/to/app/node_modules
138-
// and $projectDir may located at /path/to/app/node_modules/react-native/ReactAndroid
139-
jscPackageRoot = file("$projectDir/../../jsc-android/dist")
140-
}
141-
def jscAAR = fileTree(jscPackageRoot).matching({ it.include "**/android-jsc/**/*.aar" }).singleFile
142-
def soFiles = zipTree(jscAAR).matching({ it.include "**/*.so" })
143-
144-
def headerFiles = fileTree(jscPackageRoot).matching({ it.include "**/include/*.h" })
145-
146-
copy {
147-
from(soFiles)
148-
from(headerFiles)
149-
from("src/main/jni/third-party/jsc/Android.mk")
150-
151-
filesMatching("**/*.h", { it.path = "JavaScriptCore/${it.name}" })
152-
153-
includeEmptyDirs(false)
154-
into("$thirdPartyNdkDir/jsc")
155-
156-
}
157-
}
158-
}
159-
}
128+
doLast {
129+
def jscPackageRoot = file("$projectDir/../node_modules/jsc-android/dist")
130+
if (!jscPackageRoot.exists()) {
131+
// For an app to build from RN source, the jsc-android is located at /path/to/app/node_modules
132+
// and $projectDir may located at /path/to/app/node_modules/react-native/ReactAndroid
133+
jscPackageRoot = file("$projectDir/../../jsc-android/dist")
134+
}
135+
def jscAAR = fileTree(jscPackageRoot).matching({ it.include "**/android-jsc/**/*.aar" }).singleFile
136+
def soFiles = zipTree(jscAAR).matching({ it.include "**/*.so" })
137+
138+
def headerFiles = fileTree(jscPackageRoot).matching({ it.include "**/include/*.h" })
160139

140+
copy {
141+
from(soFiles)
142+
from(headerFiles)
143+
from("src/main/jni/third-party/jsc/Android.mk")
144+
145+
filesMatching("**/*.h", { it.path = "JavaScriptCore/${it.name}" })
146+
147+
includeEmptyDirs(false)
148+
into("$thirdPartyNdkDir/jsc")
149+
}
150+
}
151+
}
161152
task downloadNdkBuildDependencies {
162153
if (!boostPath) {
163154
dependsOn(downloadBoost)
@@ -225,7 +216,7 @@ def getNdkBuildFullPath() {
225216
return ndkBuildFullPath
226217
}
227218

228-
task buildReactNdkLib(dependsOn: [prepareJSC, prepareBoost, prepareDoubleConversion, prepareFolly, prepareGlog], type: Exec) {
219+
task buildReactNdkLib(dependsOn: [prepareBoost, prepareDoubleConversion, prepareFolly, prepareGlog], type: Exec) {
229220
inputs.dir("$projectDir/../ReactCommon")
230221
inputs.dir("src/main/jni")
231222
outputs.dir("$buildDir/react-ndk/all")
@@ -239,9 +230,8 @@ task buildReactNdkLib(dependsOn: [prepareJSC, prepareBoost, prepareDoubleConvers
239230
"V8_NUGET_DIR=$projectDir/$V8Path",
240231
"REACT_COMMON_DIR=$projectDir/../ReactCommon",
241232
"REACT_SRC_DIR=$projectDir/src/main/java/com/facebook/react",
242-
"JS_ENGINE=$JSEngineUsed",
243-
'-C', file("src/main/jni/react/jni").absolutePath,
244-
'--jobs', project.findProperty("jobs") ?: Runtime.runtime.availableProcessors()
233+
"-C", file("src/main/jni/react/jni").absolutePath,
234+
"--jobs", project.findProperty("jobs") ?: Runtime.runtime.availableProcessors()
245235
)
246236
}
247237

@@ -302,7 +292,6 @@ android {
302292
}
303293

304294
buildConfigField("boolean", "IS_INTERNAL_BUILD", "false")
305-
buildConfigField("String", "JS_ENGINE_USED", "\"$JSEngineUsed\"")
306295
buildConfigField("int", "EXOPACKAGE_FLAGS", "0")
307296

308297
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()

ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import android.app.Application;
1212
import com.facebook.infer.annotation.Assertions;
1313
import com.facebook.react.bridge.JSBundleLoader;
14-
import com.facebook.react.bridge.JSCJavaScriptExecutorFactory;
1514
import com.facebook.react.bridge.JSIModulePackage;
1615
import com.facebook.react.bridge.JavaScriptExecutorFactory;
1716
import com.facebook.react.bridge.NativeModuleCallExceptionHandler;
@@ -22,6 +21,7 @@
2221
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
2322
import com.facebook.react.devsupport.interfaces.DevSupportManager;
2423
import com.facebook.react.jscexecutor.JSCExecutorFactory;
24+
import com.facebook.react.v8executor.V8ExecutorFactory;
2525
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
2626
import com.facebook.react.packagerconnection.RequestHandler;
2727
import com.facebook.react.uimanager.UIImplementationProvider;
@@ -276,7 +276,7 @@ public ReactInstanceManager build() {
276276
mCurrentActivity,
277277
mDefaultHardwareBackBtnHandler,
278278
mJavaScriptExecutorFactory == null
279-
? new JSCJavaScriptExecutorFactory(appName, deviceName)
279+
? new V8ExecutorFactory(appName, deviceName)
280280
: mJavaScriptExecutorFactory,
281281
(mJSBundleLoader == null && mJSBundleAssetUrl != null)
282282
? JSBundleLoader.createAssetLoader(

ReactAndroid/src/main/java/com/facebook/react/bridge/ReactBridge.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,45 +13,26 @@
1313
import com.facebook.soloader.SoLoader;
1414
import com.facebook.systrace.Systrace;
1515

16-
import com.facebook.react.BuildConfig;
17-
1816
public class ReactBridge {
1917
private static volatile long sLoadStartTime = 0;
2018
private static volatile long sLoadEndTime = 0;
2119

2220
private static boolean sDidInit = false;
23-
24-
// Office implementation of RN can work with two JS Engines: V8 and JSC.
25-
// There is a compile time flag to decide which one will be used and V8 is the default one.
26-
// We are exposing an API from ReactBridge so that consumer can choose JSC if required.
27-
private static boolean sUseJSC = false;
28-
29-
public static void staticInit() {
21+
public synchronized static void staticInit() {
3022
if (sDidInit) {
3123
return;
3224
}
3325
sDidInit = true;
3426

35-
if(BuildConfig.JS_ENGINE_USED.equals("JSC")){
36-
sUseJSC = true;
37-
}
38-
3927
sLoadStartTime = SystemClock.uptimeMillis();
4028
Systrace.beginSection(TRACE_TAG_REACT_JAVA_BRIDGE, "ReactBridge.staticInit::load:reactnativejni");
4129
ReactMarker.logMarker(ReactMarkerConstants.LOAD_REACT_NATIVE_SO_FILE_START);
4230

43-
if (sUseJSC) {
44-
SoLoader.loadLibrary("icu_common");
45-
SoLoader.loadLibrary("jsc");
46-
}
47-
else {
48-
SoLoader.loadLibrary("v8_libbase.cr");
49-
SoLoader.loadLibrary("v8_libplatform.cr");
50-
SoLoader.loadLibrary("v8.cr");
51-
}
31+
SoLoader.loadLibrary("v8_libbase.cr");
32+
SoLoader.loadLibrary("v8_libplatform.cr");
33+
SoLoader.loadLibrary("v8.cr");
5234

5335
SoLoader.loadLibrary("glog_init");
54-
SoLoader.loadLibrary("privatedata");
5536
SoLoader.loadLibrary("fb");
5637
SoLoader.loadLibrary("yoga");
5738
SoLoader.loadLibrary("reactnativejni");

ReactAndroid/src/main/jni/react/jni/Android.mk

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -17,57 +17,24 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)
1717
# ./../ == react
1818
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../..
1919

20-
2120
LOCAL_CFLAGS += -fexceptions -frtti -Wno-unused-lambda-capture
2221

2322
LOCAL_LDLIBS += -landroid
2423

2524
# The dynamic libraries (.so files) that this module depends on.
26-
27-
LOCAL_SHARED_LIBRARIES := libfolly_json libfb libglog_init libyoga libprivatedata
25+
LOCAL_SHARED_LIBRARIES := libfolly_json libfb libglog_init libyoga
2826

2927
# The static libraries (.a files) that this module depends on.
30-
LOCAL_STATIC_LIBRARIES := libreactnative jsi libjscallinvokerholder
28+
LOCAL_STATIC_LIBRARIES := libreactnative libjscallinvokerholder
3129

3230
# Name of this module.
3331
#
3432
# Other modules can depend on this one by adding libreactnativejni to their
3533
# LOCAL_SHARED_LIBRARIES variable.
3634
LOCAL_MODULE := reactnativejni
3735

38-
LOCAL_SRC_FILES := \
39-
CatalystInstanceImpl.cpp \
40-
CxxModuleWrapper.cpp \
41-
JavaModuleWrapper.cpp \
42-
JReactMarker.cpp \
43-
JSLogging.cpp \
44-
JMessageQueueThread.cpp \
45-
JSLoader.cpp \
46-
JniJSModulesUnbundle.cpp \
47-
MethodInvoker.cpp \
48-
ModuleRegistryBuilder.cpp \
49-
NativeArray.cpp \
50-
NativeCommon.cpp \
51-
NativeDeltaClient.cpp \
52-
NativeMap.cpp \
53-
OnLoad.cpp \
54-
ProxyExecutor.cpp \
55-
ReadableNativeArray.cpp \
56-
ReadableNativeMap.cpp \
57-
WritableNativeArray.cpp \
58-
WritableNativeMap.cpp \
59-
60-
LOCAL_V8_FILES := \
61-
InstanceManager.cpp \
62-
AndroidV8Factory.cpp
63-
64-
ifeq ($(JS_ENGINE), V8)
65-
LOCAL_SRC_FILES += $(LOCAL_V8_FILES)
66-
LOCAL_STATIC_LIBRARIES += v8runtime
67-
else ifeq ($(JS_ENGINE), JSC)
68-
LOCAL_SHARED_LIBRARIES += libjsc
69-
LOCAL_STATIC_LIBRARIES += jscruntime
70-
endif
36+
# Compile all local c++ files.
37+
LOCAL_SRC_FILES := $(wildcard *.cpp)
7138

7239
# Build the files in this directory as a shared library
7340
include $(BUILD_SHARED_LIBRARY)
@@ -84,16 +51,11 @@ include $(BUILD_SHARED_LIBRARY)
8451
# Whenever you encounter an include <dir>/<module-dir>/Android.mk, you
8552
# tell andorid-ndk to compile the module in <dir>/<module-dir> according
8653
# to the specification inside <dir>/<module-dir>/Android.mk.
87-
88-
$(call import-module,cxxreact)
89-
$(call import-module,privatedata)
54+
$(call import-module,folly)
9055
$(call import-module,fb)
9156
$(call import-module,fbgloginit)
92-
$(call import-module,folly)
93-
ifeq ($(JS_ENGINE), JSC)
94-
$(call import-module,jsc)
95-
endif
9657
$(call import-module,yogajni)
58+
$(call import-module,cxxreact)
9759
$(call import-module,jsi)
9860
$(call import-module,jsiexecutor)
9961
$(call import-module,jscallinvoker)
@@ -103,9 +65,4 @@ include $(REACT_SRC_DIR)/turbomodule/core/jni/Android.mk
10365
# TODO(ramanpreet):
10466
# Why doesn't this import-module call generate a jscexecutor.so file?
10567
# $(call import-module,jscexecutor)
106-
107-
ifeq ($(JS_ENGINE), JSC)
108-
include $(REACT_SRC_DIR)/jscexecutor/Android.mk
109-
else ifeq ($(JS_ENGINE), V8)
110-
include $(REACT_SRC_DIR)/v8executor/Android.mk
111-
endif
68+
include $(REACT_SRC_DIR)/v8executor/Android.mk

0 commit comments

Comments
 (0)