mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: This diff contains the code from the 35 diff stack - D27210587 This diff implement and integrates Mapbuffer into Fabric text measure system changelog: [internal] internal Reviewed By: JoshuaGross Differential Revision: D27241836 fbshipit-source-id: f40a780df0723f27da440f709a8676cfcca63953
86 lines
2.3 KiB
Java
86 lines
2.3 KiB
Java
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
package com.facebook.react.fabric;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import com.facebook.common.logging.FLog;
|
|
import com.facebook.jni.HybridData;
|
|
import com.facebook.proguard.annotations.DoNotStrip;
|
|
import com.facebook.react.bridge.NativeMap;
|
|
import com.facebook.react.bridge.ReadableNativeMap;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
import com.facebook.react.common.mapbuffer.ReadableMapBuffer;
|
|
import com.facebook.react.uimanager.StateWrapper;
|
|
|
|
/**
|
|
* This class holds reference to the C++ EventEmitter object. Instances of this class are created on
|
|
* the Bindings.cpp, where the pointer to the C++ event emitter is set.
|
|
*/
|
|
@SuppressLint("MissingNativeLoadLibrary")
|
|
public class StateWrapperImpl implements StateWrapper {
|
|
static {
|
|
FabricSoLoader.staticInit();
|
|
}
|
|
|
|
private static final String TAG = "StateWrapperImpl";
|
|
|
|
@DoNotStrip private final HybridData mHybridData;
|
|
private volatile boolean mDestroyed = false;
|
|
|
|
private static native HybridData initHybrid();
|
|
|
|
private StateWrapperImpl() {
|
|
mHybridData = initHybrid();
|
|
}
|
|
|
|
private native ReadableNativeMap getStateDataImpl();
|
|
|
|
private native ReadableMapBuffer getStateMapBufferDataImpl();
|
|
|
|
@Override
|
|
@Nullable
|
|
public ReadableMapBuffer getStatDataMapBuffer() {
|
|
if (mDestroyed) {
|
|
FLog.e(TAG, "Race between StateWrapperImpl destruction and getState");
|
|
return null;
|
|
}
|
|
return getStateMapBufferDataImpl();
|
|
}
|
|
|
|
@Override
|
|
@Nullable
|
|
public ReadableNativeMap getStateData() {
|
|
if (mDestroyed) {
|
|
FLog.e(TAG, "Race between StateWrapperImpl destruction and getState");
|
|
return null;
|
|
}
|
|
return getStateDataImpl();
|
|
}
|
|
|
|
public native void updateStateImpl(@NonNull NativeMap map);
|
|
|
|
@Override
|
|
public void updateState(@NonNull WritableMap map) {
|
|
if (mDestroyed) {
|
|
FLog.e(TAG, "Race between StateWrapperImpl destruction and updateState");
|
|
return;
|
|
}
|
|
updateStateImpl((NativeMap) map);
|
|
}
|
|
|
|
@Override
|
|
public void destroyState() {
|
|
if (!mDestroyed) {
|
|
mDestroyed = true;
|
|
mHybridData.resetNative();
|
|
}
|
|
}
|
|
}
|