mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Ship optimization of ReadableNativeMaps
Summary: Ship optimization of ReadableNativeMaps - see D25361169 (https://github.com/facebook/react-native/commit/503a6f4463f5d2f7576b33158c18d8d8e99f3291) QE showed neutral metrics changelog: [internal] Reviewed By: JoshuaGross Differential Revision: D25776019 fbshipit-source-id: 7fd32087bf2ca81236fe0aebe082be01330de2fa
This commit is contained in:
committed by
Facebook GitHub Bot
parent
a4526bcc3f
commit
08eacf8acd
@@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
|
||||
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 java.util.Map;
|
||||
@@ -89,64 +88,6 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
return mLocalTypeMap;
|
||||
}
|
||||
|
||||
private Iterator<Map.Entry<String, Object>> createExperimentalIterator() {
|
||||
if (mKeys == null) {
|
||||
mKeys = Assertions.assertNotNull(importKeys());
|
||||
}
|
||||
final String[] iteratorKeys = mKeys;
|
||||
final Object[] iteratorValues = Assertions.assertNotNull(importValues());
|
||||
return new Iterator<Map.Entry<String, Object>>() {
|
||||
int currentIndex = 0;
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return currentIndex < iteratorKeys.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map.Entry<String, Object> next() {
|
||||
final int index = currentIndex++;
|
||||
return new Map.Entry<String, Object>() {
|
||||
@Override
|
||||
public String getKey() {
|
||||
return iteratorKeys[index];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValue() {
|
||||
return iteratorValues[index];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object setValue(Object value) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Can't set a value while iterating over a ReadableNativeMap");
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private ReadableMapKeySetIterator createExperimentalKeySetIterator() {
|
||||
if (mKeys == null) {
|
||||
mKeys = Assertions.assertNotNull(importKeys());
|
||||
}
|
||||
final String[] iteratorKeys = mKeys;
|
||||
return new ReadableMapKeySetIterator() {
|
||||
int currentIndex = 0;
|
||||
|
||||
@Override
|
||||
public boolean hasNextKey() {
|
||||
return currentIndex < iteratorKeys.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String nextKey() {
|
||||
return iteratorKeys[currentIndex++];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private native Object[] importTypes();
|
||||
|
||||
@Override
|
||||
@@ -246,16 +187,62 @@ public class ReadableNativeMap extends NativeMap implements ReadableMap {
|
||||
|
||||
@Override
|
||||
public @NonNull Iterator<Map.Entry<String, Object>> getEntryIterator() {
|
||||
return ReactFeatureFlags.enableExperimentalReadableNativeMapIterator
|
||||
? createExperimentalIterator()
|
||||
: getLocalMap().entrySet().iterator();
|
||||
if (mKeys == null) {
|
||||
mKeys = Assertions.assertNotNull(importKeys());
|
||||
}
|
||||
final String[] iteratorKeys = mKeys;
|
||||
final Object[] iteratorValues = Assertions.assertNotNull(importValues());
|
||||
return new Iterator<Map.Entry<String, Object>>() {
|
||||
int currentIndex = 0;
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return currentIndex < iteratorKeys.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map.Entry<String, Object> next() {
|
||||
final int index = currentIndex++;
|
||||
return new Map.Entry<String, Object>() {
|
||||
@Override
|
||||
public String getKey() {
|
||||
return iteratorKeys[index];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValue() {
|
||||
return iteratorValues[index];
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object setValue(Object value) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Can't set a value while iterating over a ReadableNativeMap");
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull ReadableMapKeySetIterator keySetIterator() {
|
||||
return ReactFeatureFlags.enableExperimentalReadableNativeMapIterator
|
||||
? createExperimentalKeySetIterator()
|
||||
: new ReadableNativeMapKeySetIterator(this);
|
||||
if (mKeys == null) {
|
||||
mKeys = Assertions.assertNotNull(importKeys());
|
||||
}
|
||||
final String[] iteratorKeys = mKeys;
|
||||
return new ReadableMapKeySetIterator() {
|
||||
int currentIndex = 0;
|
||||
|
||||
@Override
|
||||
public boolean hasNextKey() {
|
||||
return currentIndex < iteratorKeys.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String nextKey() {
|
||||
return iteratorKeys[currentIndex++];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -66,9 +66,6 @@ public class ReactFeatureFlags {
|
||||
*/
|
||||
public static boolean enableStartSurfaceRaceConditionFix = false;
|
||||
|
||||
/** Enables the usage of an experimental optimized iterator for ReadableNativeMaps. */
|
||||
public static boolean enableExperimentalReadableNativeMapIterator = false;
|
||||
|
||||
/** Enables Static ViewConfig in RN Android native code. */
|
||||
public static boolean enableExperimentalStaticViewConfigs = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user