From 2a8f6c3028feec7fc9a01cbdfad45955c4771bf8 Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Wed, 7 Nov 2018 09:33:33 -0800 Subject: [PATCH] Add Yoga JNI bindings to libcoldstart Summary: Yoga's JNI bindings are usually loaded during class loading, and can stall the UI thread. Here, we try to mitigate the problem by adding the bindings to libcoldstart. Reviewed By: michalgr Differential Revision: D12956818 fbshipit-source-id: 9dda5cb6d26c2bae64606bc2d7c98ab8f7c05a30 --- ReactAndroid/src/main/java/com/facebook/yoga/YogaJNI.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaJNI.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaJNI.java index deccbcf5d58f87..fb0138045dd713 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaJNI.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaJNI.java @@ -10,6 +10,7 @@ import com.facebook.soloader.SoLoader; public class YogaJNI { + private static boolean isInitialized = false; // Known constants. 1-3 used in previous experiments. Do not reuse. public static int JNI_FAST_CALLS = 4; @@ -19,12 +20,13 @@ public class YogaJNI { private static native void jni_bindNativeMethods(boolean useFastCall); - static boolean init() { - if (SoLoader.loadLibrary("yoga")) { + static synchronized boolean init() { + if (!isInitialized) { + isInitialized = true; + SoLoader.loadLibrary("yoga"); jni_bindNativeMethods(useFastCall); return true; } - return false; } }