From f44e78df55a3b4b794c32fc6682130160ed1d6f2 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 24 Apr 2018 12:37:08 -0700 Subject: [PATCH] Add InstanceHandle parameter into FabricJSC/JSI Reviewed By: achen1 Differential Revision: D7644487 fbshipit-source-id: b49381a58a791043bf61b8ac5f065817caff7c95 --- .../react/fabric/FabricUIManager.java | 2 +- .../react/fabric/jsc/jni/FabricJSCBinding.cpp | 7 +++--- .../react/fabric/FabricUIManagerTest.java | 22 +++++++++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 191d463ab..cd6045f00 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -67,7 +67,7 @@ public class FabricUIManager implements UIManager { /** Creates a new {@link ReactShadowNode} */ @Nullable public ReactShadowNode createNode( - int reactTag, String viewName, int rootTag, ReadableNativeMap props) { + int reactTag, String viewName, int rootTag, ReadableNativeMap props, int instanceHandle) { if (DEBUG) { Log.d(TAG, "createNode \n\ttag: " + reactTag + "\n\tviewName: " + viewName + diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp index 6ce8b9976..83023f488 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/jsc/jni/FabricJSCBinding.cpp @@ -83,17 +83,16 @@ JSValueRef createNode(JSContextRef ctx, JSObjectRef function, JSObjectRef thisOb static auto createNode = jni::findClassStatic("com/facebook/react/fabric/FabricUIManager") - ->getMethod(jint, jstring, jint, ReadableNativeMap::javaobject)>("createNode"); + ->getMethod(jint, jstring, jint, ReadableNativeMap::javaobject, jint)>("createNode"); int reactTag = (int)JSC_JSValueToNumber(ctx, arguments[0], NULL); auto viewName = JSValueToJString(ctx, arguments[1]); int rootTag = (int)JSC_JSValueToNumber(ctx, arguments[2], NULL); auto props = JSC_JSValueIsNull(ctx, arguments[3]) ? local_ref(nullptr) : JSValueToReadableMapViaJSON(ctx, arguments[3]);; + int instanceHandle = (int)JSC_JSValueToNumber(ctx, arguments[4], NULL); - // TODO: Retain object in arguments[4] using a weak ref. - - auto node = createNode(manager, reactTag, viewName.get(), rootTag, props.get()); + auto node = createNode(manager, reactTag, viewName.get(), rootTag, props.get(), instanceHandle); return JSC_JSObjectMake(ctx, classRef, makePlainGlobalRef(node.get())); } diff --git a/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java b/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java index 441003004..32a0bbb40 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/fabric/FabricUIManagerTest.java @@ -47,6 +47,7 @@ public class FabricUIManagerTest { private FabricUIManager mFabricUIManager; private ThemedReactContext mThemedReactContext; private int mNextReactTag; + private int mNextInstanceHandle; @Before public void setUp() throws Exception { @@ -70,8 +71,10 @@ public class FabricUIManagerTest { new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); int reactTag = mNextReactTag++; + int instanceHandle = mNextInstanceHandle++; String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode node = mFabricUIManager.createNode(reactTag, viewClass, rootTag, null); + ReactShadowNode node = + mFabricUIManager.createNode(reactTag, viewClass, rootTag, null, instanceHandle); assertThat(reactTag).isEqualTo(node.getReactTag()); assertThat(viewClass).isEqualTo(node.getViewClass()); @@ -89,8 +92,10 @@ public class FabricUIManagerTest { new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); int reactTag = mNextReactTag++; + int instanceHandle = mNextInstanceHandle++; String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode node = mFabricUIManager.createNode(reactTag, viewClass, rootTag, null); + ReactShadowNode node = + mFabricUIManager.createNode(reactTag, viewClass, rootTag, null, instanceHandle); List childSet = mFabricUIManager.createChildSet(rootTag); mFabricUIManager.appendChildToSet(childSet, node); @@ -220,9 +225,8 @@ public class FabricUIManagerTest { ReactRootView rootView = new ReactRootView(RuntimeEnvironment.application.getApplicationContext()); int rootTag = mFabricUIManager.addRootView(rootView); - ReactShadowNode text = - mFabricUIManager.createNode(0, ReactTextViewManager.REACT_CLASS, rootTag, null); + mFabricUIManager.createNode(0, ReactTextViewManager.REACT_CLASS, rootTag, null, mNextInstanceHandle++); assertThat(text.isMeasureDefined()).isTrue(); ReactShadowNode textCopy = text.mutableCopy(); @@ -248,13 +252,13 @@ public class FabricUIManagerTest { int rootTag = mFabricUIManager.addRootView(rootView); String viewClass = ReactViewManager.REACT_CLASS; - ReactShadowNode aa = mFabricUIManager.createNode(2, viewClass, rootTag, null); - ReactShadowNode a = mFabricUIManager.createNode(3, viewClass, rootTag, null); + ReactShadowNode aa = mFabricUIManager.createNode(2, viewClass, rootTag, null, mNextInstanceHandle++); + ReactShadowNode a = mFabricUIManager.createNode(3, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(a, aa); - ReactShadowNode bb = mFabricUIManager.createNode(4, viewClass, rootTag, null); - ReactShadowNode b = mFabricUIManager.createNode(5, viewClass, rootTag, null); + ReactShadowNode bb = mFabricUIManager.createNode(4, viewClass, rootTag, null, mNextInstanceHandle++); + ReactShadowNode b = mFabricUIManager.createNode(5, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(b, bb); - ReactShadowNode container = mFabricUIManager.createNode(6, viewClass, rootTag, null); + ReactShadowNode container = mFabricUIManager.createNode(6, viewClass, rootTag, null, mNextInstanceHandle++); mFabricUIManager.appendChild(container, a); mFabricUIManager.appendChild(container, b); List childSet = mFabricUIManager.createChildSet(rootTag);