mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-15 23:03:58 +08:00
Don't access ReadableNativeArray on UI thread
Summary: ReadableNativeArray initializes the ReactBridge which loads a bunch of c++ classes. Let's avoid doing this on the UI thread. Reviewed By: mdvacca Differential Revision: D10108380 fbshipit-source-id: ab4520535288ce450a865952e996b716d571df7f
This commit is contained in:
committed by
Facebook Github Bot
parent
b030fcbbf5
commit
4ac500a337
@@ -38,6 +38,7 @@ rn_android_library(
|
||||
react_native_target("java/com/facebook/debug/tags:tags"),
|
||||
react_native_target("java/com/facebook/debug/holder:holder"),
|
||||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_target("java/com/facebook/react/config:config"),
|
||||
react_native_target("java/com/facebook/react/module/model:model"),
|
||||
react_native_target("java/com/facebook/react/uimanager/common:common"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
|
||||
package com.facebook.react.bridge;
|
||||
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
@@ -34,9 +34,8 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
private @Nullable ReadableType[] mLocalTypeArray;
|
||||
|
||||
private static int jniPassCounter = 0;
|
||||
private static boolean mUseNativeAccessor = false;
|
||||
public static void setUseNativeAccessor(boolean useNativeAccessor) {
|
||||
mUseNativeAccessor = useNativeAccessor;
|
||||
ReactFeatureFlags.useArrayNativeAccessor = useNativeAccessor;
|
||||
}
|
||||
public static int getJNIPassCounter() {
|
||||
return jniPassCounter;
|
||||
@@ -77,7 +76,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return sizeNative();
|
||||
}
|
||||
@@ -87,7 +86,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public boolean isNull(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return isNullNative(index);
|
||||
}
|
||||
@@ -97,7 +96,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public boolean getBoolean(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getBooleanNative(index);
|
||||
}
|
||||
@@ -107,7 +106,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public double getDouble(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getDoubleNative(index);
|
||||
}
|
||||
@@ -117,7 +116,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public int getInt(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getIntNative(index);
|
||||
}
|
||||
@@ -127,7 +126,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public String getString(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getStringNative(index);
|
||||
}
|
||||
@@ -137,7 +136,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public ReadableNativeArray getArray(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getArrayNative(index);
|
||||
}
|
||||
@@ -147,7 +146,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public ReadableNativeMap getMap(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getMapNative(index);
|
||||
}
|
||||
@@ -157,7 +156,7 @@ public class ReadableNativeArray extends NativeArray implements ReadableArray {
|
||||
|
||||
@Override
|
||||
public ReadableType getType(int index) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useArrayNativeAccessor) {
|
||||
jniPassCounter++;
|
||||
return getTypeNative(index);
|
||||
}
|
||||
|
||||
@@ -7,13 +7,12 @@
|
||||
|
||||
package com.facebook.react.bridge;
|
||||
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
|
||||
import com.facebook.react.config.ReactFeatureFlags;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
@@ -33,10 +32,9 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
private @Nullable String[] mKeys;
|
||||
private @Nullable HashMap<String,Object> mLocalMap;
|
||||
private @Nullable HashMap<String,ReadableType> mLocalTypeMap;
|
||||
private static boolean mUseNativeAccessor;
|
||||
private static int mJniCallCounter;
|
||||
public static void setUseNativeAccessor(boolean useNativeAccessor) {
|
||||
mUseNativeAccessor = useNativeAccessor;
|
||||
ReactFeatureFlags.useMapNativeAccessor = useNativeAccessor;
|
||||
}
|
||||
public static int getJNIPassCounter() {
|
||||
return mJniCallCounter;
|
||||
@@ -94,7 +92,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public boolean hasKey(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return hasKeyNative(name);
|
||||
}
|
||||
@@ -104,7 +102,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public boolean isNull(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return isNullNative(name);
|
||||
}
|
||||
@@ -151,7 +149,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public boolean getBoolean(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getBooleanNative(name);
|
||||
}
|
||||
@@ -161,7 +159,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public double getDouble(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getDoubleNative(name);
|
||||
}
|
||||
@@ -171,7 +169,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public int getInt(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getIntNative(name);
|
||||
}
|
||||
@@ -183,7 +181,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public @Nullable String getString(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getStringNative(name);
|
||||
}
|
||||
@@ -193,7 +191,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public @Nullable ReadableArray getArray(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getArrayNative(name);
|
||||
}
|
||||
@@ -203,7 +201,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public @Nullable ReadableNativeMap getMap(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getMapNative(name);
|
||||
}
|
||||
@@ -213,7 +211,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public ReadableType getType(String name) {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
mJniCallCounter++;
|
||||
return getTypeNative(name);
|
||||
}
|
||||
@@ -236,7 +234,7 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public HashMap<String, Object> toHashMap() {
|
||||
if (mUseNativeAccessor) {
|
||||
if (ReactFeatureFlags.useMapNativeAccessor) {
|
||||
ReadableMapKeySetIterator iterator = keySetIterator();
|
||||
HashMap<String, Object> hashMap = new HashMap<>();
|
||||
|
||||
|
||||
@@ -14,4 +14,13 @@ public class ReactFeatureFlags {
|
||||
*/
|
||||
public static boolean lazilyLoadViewManagers = false;
|
||||
|
||||
/**
|
||||
* Reduce the number of Java-JS interops while accessing native arrays
|
||||
*/
|
||||
public static boolean useArrayNativeAccessor = false;
|
||||
|
||||
/**
|
||||
* Reduce the number of Java-JS interops while accessing native maps
|
||||
*/
|
||||
public static boolean useMapNativeAccessor = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user