From a78654c0bd8a9f1138a0fa6880b5cadac212730d Mon Sep 17 00:00:00 2001 From: yk3372 Date: Tue, 23 May 2017 18:06:25 +0800 Subject: [PATCH 1/3] fix memory leak Signed-off-by: yk3372 --- .../com/facebook/react/bridge/CatalystInstanceImpl.java | 5 +++++ .../react/bridge/queue/MessageQueueThreadRegistry.java | 4 ++++ .../react/uimanager/ViewManagerPropertyUpdater.java | 6 ++++++ .../facebook/react/uimanager/ViewManagersPropertyCache.java | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index d3a312b886a38a..5f94ce7ba2aa18 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -24,12 +24,14 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.queue.MessageQueueThread; +import com.facebook.react.bridge.queue.MessageQueueThreadRegistry; import com.facebook.react.bridge.queue.QueueThreadExceptionHandler; import com.facebook.react.bridge.queue.ReactQueueConfiguration; import com.facebook.react.bridge.queue.ReactQueueConfigurationImpl; import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.annotations.VisibleForTesting; +import com.facebook.react.uimanager.ViewManagerPropertyUpdater; import com.facebook.soloader.SoLoader; import com.facebook.systrace.Systrace; import com.facebook.systrace.TraceListener; @@ -297,6 +299,9 @@ public void run() { } }); + MessageQueueThreadRegistry.clear(); + ViewManagerPropertyUpdater.clear(); + // This is a noop if the listener was not yet registered. Systrace.unregisterListener(mTraceListener); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java index fd0602a9375119..0e8478bffa5fbe 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java @@ -35,5 +35,9 @@ public static MessageQueueThread myMessageQueueThread() { sMyMessageQueueThread.get(), "This thread doesn't have a MessageQueueThread registered to it!"); } + + public static void clear() { + sMyMessageQueueThread.remove(); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java index 363c50a0aaeb00..47d9ecf1cd078d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java @@ -30,6 +30,12 @@ public interface ShadowNodeSetter extends Settable { new HashMap<>(); private static final Map, ShadowNodeSetter> SHADOW_NODE_SETTER_MAP = new HashMap<>(); + public static void clear() { + ViewManagersPropertyCache.clear(); + VIEW_MANAGER_SETTER_MAP.clear(); + SHADOW_NODE_SETTER_MAP.clear(); + } + public static void updateProps( T manager, V v, diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java index 43d2509dee0ad2..cfdd34be265fff 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java @@ -28,6 +28,11 @@ private static final Map> CLASS_PROPS_CACHE = new HashMap<>(); private static final Map EMPTY_PROPS_MAP = new HashMap<>(); + public static void clear() { + CLASS_PROPS_CACHE.clear(); + EMPTY_PROPS_MAP.clear(); + } + /*package*/ static abstract class PropSetter { protected final String mPropName; From 692fb94a6e9e20c9f4d6867db2647d401ecb1387 Mon Sep 17 00:00:00 2001 From: James Pearce Date: Wed, 24 May 2017 02:39:27 -0700 Subject: [PATCH 2/3] Rogue apostrophe Summary: English :) Closes https://github.com/facebook/react-native/pull/14138 Differential Revision: D5114337 Pulled By: javache fbshipit-source-id: 73cfc4d3b31b4a86ac6fec0293a4f1246c911414 --- .../src/main/java/com/facebook/react/ReactRootView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 93b149b6c4bba9..654e6b770fd2bd 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -52,7 +52,7 @@ * It delegates handling touch events for itself and child views and sending those events to JS by * using JSTouchDispatcher. * This view is overriding {@link ViewGroup#onInterceptTouchEvent} method in order to be notified - * about the events for all of it's children and it's also overriding + * about the events for all of its children and it's also overriding * {@link ViewGroup#requestDisallowInterceptTouchEvent} to make sure that * {@link ViewGroup#onInterceptTouchEvent} will get events even when some child view start * intercepting it. In case when no child view is interested in handling some particular From d10d6de9597413688ac215c6949b6a17510c2493 Mon Sep 17 00:00:00 2001 From: yk3372 Date: Tue, 23 May 2017 18:06:25 +0800 Subject: [PATCH 3/3] fix memory leak Signed-off-by: yk3372 --- .../com/facebook/react/bridge/CatalystInstanceImpl.java | 5 +++++ .../react/bridge/queue/MessageQueueThreadRegistry.java | 4 ++++ .../react/uimanager/ViewManagerPropertyUpdater.java | 6 ++++++ .../facebook/react/uimanager/ViewManagersPropertyCache.java | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java index d3a312b886a38a..5f94ce7ba2aa18 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java @@ -24,12 +24,14 @@ import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.react.bridge.queue.MessageQueueThread; +import com.facebook.react.bridge.queue.MessageQueueThreadRegistry; import com.facebook.react.bridge.queue.QueueThreadExceptionHandler; import com.facebook.react.bridge.queue.ReactQueueConfiguration; import com.facebook.react.bridge.queue.ReactQueueConfigurationImpl; import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.annotations.VisibleForTesting; +import com.facebook.react.uimanager.ViewManagerPropertyUpdater; import com.facebook.soloader.SoLoader; import com.facebook.systrace.Systrace; import com.facebook.systrace.TraceListener; @@ -297,6 +299,9 @@ public void run() { } }); + MessageQueueThreadRegistry.clear(); + ViewManagerPropertyUpdater.clear(); + // This is a noop if the listener was not yet registered. Systrace.unregisterListener(mTraceListener); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java index fd0602a9375119..0e8478bffa5fbe 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadRegistry.java @@ -35,5 +35,9 @@ public static MessageQueueThread myMessageQueueThread() { sMyMessageQueueThread.get(), "This thread doesn't have a MessageQueueThread registered to it!"); } + + public static void clear() { + sMyMessageQueueThread.remove(); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java index 363c50a0aaeb00..47d9ecf1cd078d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerPropertyUpdater.java @@ -30,6 +30,12 @@ public interface ShadowNodeSetter extends Settable { new HashMap<>(); private static final Map, ShadowNodeSetter> SHADOW_NODE_SETTER_MAP = new HashMap<>(); + public static void clear() { + ViewManagersPropertyCache.clear(); + VIEW_MANAGER_SETTER_MAP.clear(); + SHADOW_NODE_SETTER_MAP.clear(); + } + public static void updateProps( T manager, V v, diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java index 43d2509dee0ad2..cfdd34be265fff 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java @@ -28,6 +28,11 @@ private static final Map> CLASS_PROPS_CACHE = new HashMap<>(); private static final Map EMPTY_PROPS_MAP = new HashMap<>(); + public static void clear() { + CLASS_PROPS_CACHE.clear(); + EMPTY_PROPS_MAP.clear(); + } + /*package*/ static abstract class PropSetter { protected final String mPropName;