Skip to content

Commit 6c8ace9

Browse files
javachefacebook-github-bot
authored andcommitted
Simplify MapBuffer constructor (#49492)
Summary: Pull Request resolved: #49492 Was looking at more places we could be using `HybridClassBase`, and figured out how to simplify ReadableMapBuffer constructors to remove the need for explicit soloading. Changelog: [Android][Removed] `RuntimeExecutor` and `RuntimeScheduler` constructors are now private, `MapBufferSoLoader` was removed as no longer required. Reviewed By: cortinico Differential Revision: D69776110 fbshipit-source-id: 11eac4c59897a02283e021ac1457ef8299b6f480
1 parent ee90f2d commit 6c8ace9

File tree

11 files changed

+28
-125
lines changed

11 files changed

+28
-125
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,8 +1291,6 @@ public final class com/facebook/react/bridge/ReactMarkerConstants : java/lang/En
12911291
public static final field JAVASCRIPT_EXECUTOR_FACTORY_INJECT_START Lcom/facebook/react/bridge/ReactMarkerConstants;
12921292
public static final field LOAD_REACT_NATIVE_FABRIC_SO_FILE_END Lcom/facebook/react/bridge/ReactMarkerConstants;
12931293
public static final field LOAD_REACT_NATIVE_FABRIC_SO_FILE_START Lcom/facebook/react/bridge/ReactMarkerConstants;
1294-
public static final field LOAD_REACT_NATIVE_MAPBUFFER_SO_FILE_END Lcom/facebook/react/bridge/ReactMarkerConstants;
1295-
public static final field LOAD_REACT_NATIVE_MAPBUFFER_SO_FILE_START Lcom/facebook/react/bridge/ReactMarkerConstants;
12961294
public static final field LOAD_REACT_NATIVE_SO_FILE_END Lcom/facebook/react/bridge/ReactMarkerConstants;
12971295
public static final field LOAD_REACT_NATIVE_SO_FILE_START Lcom/facebook/react/bridge/ReactMarkerConstants;
12981296
public static final field NATIVE_MODULE_INITIALIZE_END Lcom/facebook/react/bridge/ReactMarkerConstants;
@@ -1487,12 +1485,10 @@ public final class com/facebook/react/bridge/RetryableMountingLayerException : j
14871485
public fun <init> (Ljava/lang/Throwable;)V
14881486
}
14891487

1490-
public final class com/facebook/react/bridge/RuntimeExecutor {
1491-
public fun <init> (Lcom/facebook/jni/HybridData;)V
1488+
public final class com/facebook/react/bridge/RuntimeExecutor : com/facebook/jni/HybridClassBase {
14921489
}
14931490

1494-
public final class com/facebook/react/bridge/RuntimeScheduler {
1495-
public fun <init> (Lcom/facebook/jni/HybridData;)V
1491+
public final class com/facebook/react/bridge/RuntimeScheduler : com/facebook/jni/HybridClassBase {
14961492
}
14971493

14981494
public final class com/facebook/react/bridge/SoftAssertions {
@@ -1898,12 +1894,7 @@ public abstract interface class com/facebook/react/common/mapbuffer/MapBuffer$En
18981894
public abstract fun getType ()Lcom/facebook/react/common/mapbuffer/MapBuffer$DataType;
18991895
}
19001896

1901-
public final class com/facebook/react/common/mapbuffer/MapBufferSoLoader {
1902-
public static final field INSTANCE Lcom/facebook/react/common/mapbuffer/MapBufferSoLoader;
1903-
public static final fun staticInit ()V
1904-
}
1905-
1906-
public final class com/facebook/react/common/mapbuffer/ReadableMapBuffer : com/facebook/react/common/mapbuffer/MapBuffer {
1897+
public final class com/facebook/react/common/mapbuffer/ReadableMapBuffer : com/facebook/jni/HybridClassBase, com/facebook/react/common/mapbuffer/MapBuffer {
19071898
public static final field Companion Lcom/facebook/react/common/mapbuffer/ReadableMapBuffer$Companion;
19081899
public fun contains (I)Z
19091900
public fun entryAt (I)Lcom/facebook/react/common/mapbuffer/MapBuffer$Entry;

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarkerConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,7 @@ public enum ReactMarkerConstants {
124124
REACT_BRIDGE_LOADING_START,
125125
REACT_BRIDGE_LOADING_END,
126126
REACT_BRIDGELESS_LOADING_START,
127-
REACT_BRIDGELESS_LOADING_END,
128-
LOAD_REACT_NATIVE_MAPBUFFER_SO_FILE_START,
129-
LOAD_REACT_NATIVE_MAPBUFFER_SO_FILE_END;
127+
REACT_BRIDGELESS_LOADING_END;
130128

131129
private boolean mHasMatchingNameMarker;
132130

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeExecutor.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
package com.facebook.react.bridge
99

10-
import com.facebook.jni.HybridData
10+
import com.facebook.jni.HybridClassBase
1111
import com.facebook.proguard.annotations.DoNotStrip
1212

1313
/** A Kotlin holder for a C++ RuntimeExecutor. */
14-
public class RuntimeExecutor(@DoNotStrip private val mHybridData: HybridData)
14+
@DoNotStrip public class RuntimeExecutor @DoNotStrip private constructor() : HybridClassBase()

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeScheduler.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
package com.facebook.react.bridge
99

10-
import com.facebook.jni.HybridData
10+
import com.facebook.jni.HybridClassBase
1111
import com.facebook.proguard.annotations.DoNotStrip
1212

1313
/** A Kotlin holder for a C++ RuntimeScheduler. */
14-
public class RuntimeScheduler(@DoNotStrip private val mHybridData: HybridData)
14+
@DoNotStrip public class RuntimeScheduler @DoNotStrip private constructor() : HybridClassBase()

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/MapBufferSoLoader.kt

Lines changed: 0 additions & 35 deletions
This file was deleted.

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.kt

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
package com.facebook.react.common.mapbuffer
99

10-
import com.facebook.jni.HybridData
10+
import com.facebook.jni.HybridClassBase
1111
import com.facebook.proguard.annotations.DoNotStrip
1212
import com.facebook.react.common.annotations.StableReactNativeAPI
1313
import com.facebook.react.common.mapbuffer.MapBuffer.Companion.KEY_RANGE
@@ -25,42 +25,25 @@ import javax.annotation.concurrent.NotThreadSafe
2525
@StableReactNativeAPI
2626
@NotThreadSafe
2727
@DoNotStrip
28-
public class ReadableMapBuffer : MapBuffer {
29-
30-
// Hybrid data must be kept in the `mHybridData` field for fbjni to work
31-
@field:DoNotStrip private val mHybridData: HybridData?
28+
public class ReadableMapBuffer
29+
@DoNotStrip
30+
private constructor(
31+
// Byte data of the mapBuffer
32+
private val buffer: ByteBuffer,
33+
// Offset to the start of the MapBuffer
34+
private val offsetToMapBuffer: Int
35+
) : HybridClassBase(), MapBuffer {
3236

33-
// Byte data of the mapBuffer
34-
private val buffer: ByteBuffer
35-
// Offset to the start of the MapBuffer
36-
private val offsetToMapBuffer: Int
3737
// Amount of items serialized on the ByteBuffer
3838
override var count: Int = 0
3939
private set
4040

41-
@DoNotStrip
42-
private constructor(hybridData: HybridData) {
43-
mHybridData = hybridData
44-
buffer = importByteBuffer()
45-
offsetToMapBuffer = 0
46-
readHeader()
47-
}
48-
49-
private constructor(buffer: ByteBuffer) {
50-
mHybridData = null
51-
this.buffer = buffer
52-
offsetToMapBuffer = 0
41+
init {
5342
readHeader()
5443
}
5544

56-
private constructor(buffer: ByteBuffer, offset: Int) {
57-
mHybridData = null
58-
this.buffer = buffer.duplicate().apply { position(offset) }
59-
offsetToMapBuffer = offset
60-
readHeader()
61-
}
62-
63-
private external fun importByteBuffer(): ByteBuffer
45+
private fun cloneWithOffset(offset: Int) =
46+
ReadableMapBuffer(buffer.duplicate().apply { position(offset) }, offset)
6447

6548
private fun readHeader() {
6649
// byte order
@@ -146,7 +129,7 @@ public class ReadableMapBuffer : MapBuffer {
146129

147130
private fun readMapBufferValue(position: Int): ReadableMapBuffer {
148131
val offset = offsetForDynamicData + buffer.getInt(position)
149-
return ReadableMapBuffer(buffer, offset + Int.SIZE_BYTES)
132+
return cloneWithOffset(offset + Int.SIZE_BYTES)
150133
}
151134

152135
private fun readMapBufferListValue(position: Int): List<ReadableMapBuffer> {
@@ -158,7 +141,7 @@ public class ReadableMapBuffer : MapBuffer {
158141
while (curLen < sizeMapBufferList) {
159142
val sizeMapBuffer = buffer.getInt(offset + curLen)
160143
curLen = curLen + Int.SIZE_BYTES
161-
readMapBufferList.add(ReadableMapBuffer(buffer, offset + curLen))
144+
readMapBufferList.add(cloneWithOffset(offset + curLen))
162145
curLen = curLen + sizeMapBuffer
163146
}
164147
return readMapBufferList
@@ -335,9 +318,5 @@ public class ReadableMapBuffer : MapBuffer {
335318

336319
// 4 bytes = 2 (key) + 2 (type)
337320
private const val VALUE_OFFSET = 4
338-
339-
init {
340-
MapBufferSoLoader.staticInit()
341-
}
342321
}
343322
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/WritableMapBuffer.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,4 @@ public class WritableMapBuffer : MapBuffer {
191191
@Suppress("UNUSED")
192192
/** JNI hook for MapBuffer to retrieve sorted values from this class. */
193193
private fun getValues(): Array<Any> = Array(values.size()) { values.valueAt(it) }
194-
195-
private companion object {
196-
init {
197-
MapBufferSoLoader.staticInit()
198-
}
199-
}
200194
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import com.facebook.proguard.annotations.DoNotStrip
1313
import com.facebook.react.bridge.NativeMap
1414
import com.facebook.react.bridge.RuntimeExecutor
1515
import com.facebook.react.bridge.RuntimeScheduler
16-
import com.facebook.react.common.mapbuffer.MapBufferSoLoader
1716
import com.facebook.react.fabric.events.EventBeatManager
1817
import com.facebook.react.uimanager.PixelUtil.getDisplayMetricDensity
1918

@@ -102,7 +101,6 @@ internal class FabricUIManagerBinding : HybridClassBase() {
102101
private companion object {
103102
init {
104103
FabricSoLoader.staticInit()
105-
MapBufferSoLoader.staticInit()
106104
}
107105
}
108106
}

packages/react-native/ReactAndroid/src/main/jni/react/mapbuffer/react/common/mapbuffer/JReadableMapBuffer.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@
99

1010
namespace facebook::react {
1111

12-
void JReadableMapBuffer::registerNatives() {
13-
registerHybrid({
14-
makeNativeMethod(
15-
"importByteBuffer", JReadableMapBuffer::importByteBuffer),
16-
});
17-
}
18-
1912
jni::local_ref<jni::JByteBuffer> JReadableMapBuffer::importByteBuffer() {
2013
// TODO T83483191: Reevaluate what's the best approach here (allocateDirect vs
2114
// DirectByteBuffer).
@@ -29,7 +22,10 @@ std::vector<uint8_t> JReadableMapBuffer::data() const {
2922

3023
jni::local_ref<JReadableMapBuffer::jhybridobject>
3124
JReadableMapBuffer::createWithContents(MapBuffer&& map) {
32-
return newObjectCxxArgs(std::move(map));
25+
auto cxxPart = std::make_unique<JReadableMapBuffer>(std::move(map));
26+
auto javaPart = newObjectJavaArgs(cxxPart->importByteBuffer(), 0);
27+
setNativePointer(javaPart, std::move(cxxPart));
28+
return javaPart;
3329
}
3430

3531
JReadableMapBuffer::JReadableMapBuffer(MapBuffer&& map)

packages/react-native/ReactAndroid/src/main/jni/react/mapbuffer/react/common/mapbuffer/JReadableMapBuffer.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,16 @@ class JReadableMapBuffer : public jni::HybridClass<JReadableMapBuffer> {
2020
static auto constexpr kJavaDescriptor =
2121
"Lcom/facebook/react/common/mapbuffer/ReadableMapBuffer;";
2222

23-
static void registerNatives();
24-
2523
static jni::local_ref<JReadableMapBuffer::jhybridobject> createWithContents(
2624
MapBuffer&& map);
2725

2826
explicit JReadableMapBuffer(MapBuffer&& map);
2927

30-
jni::local_ref<jni::JByteBuffer> importByteBuffer();
31-
3228
std::vector<uint8_t> data() const;
3329

3430
private:
31+
jni::local_ref<jni::JByteBuffer> importByteBuffer();
32+
3533
std::vector<uint8_t> serializedData_;
3634
};
3735

0 commit comments

Comments
 (0)