diff --git a/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/BUCK b/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/BUCK similarity index 88% rename from ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/BUCK rename to ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/BUCK index 82f2df70405..b2114fa6918 100644 --- a/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/BUCK @@ -1,7 +1,7 @@ include_defs("//ReactAndroid/DEFS") android_library( - name = "debugoverlay", + name = "model", srcs = glob(["*.java"]), visibility = [ "PUBLIC", diff --git a/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/DebugOverlayTag.java b/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/DebugOverlayTag.java similarity index 92% rename from ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/DebugOverlayTag.java rename to ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/DebugOverlayTag.java index 7b54322fabf..c0a1790d886 100644 --- a/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/DebugOverlayTag.java +++ b/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/DebugOverlayTag.java @@ -1,6 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. -package com.facebook.debug.debugoverlay; +package com.facebook.debug.debugoverlay.model; import javax.annotation.concurrent.Immutable; diff --git a/ReactAndroid/src/main/java/com/facebook/debug/holder/BUCK b/ReactAndroid/src/main/java/com/facebook/debug/holder/BUCK new file mode 100644 index 00000000000..6aee2b52ef4 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/debug/holder/BUCK @@ -0,0 +1,15 @@ +include_defs("//ReactAndroid/DEFS") + +android_library( + name = "holder", + srcs = glob(["*.java"]), + exported_deps = [ + react_native_dep("java/com/facebook/debug/debugoverlay/model:model"), + ], + visibility = [ + "PUBLIC", + ], + deps = [ + react_native_dep("third-party/java/jsr-305:jsr-305"), + ], +) diff --git a/ReactAndroid/src/main/java/com/facebook/debug/holder/NoopPrinter.java b/ReactAndroid/src/main/java/com/facebook/debug/holder/NoopPrinter.java new file mode 100644 index 00000000000..4e880e270fb --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/debug/holder/NoopPrinter.java @@ -0,0 +1,19 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +package com.facebook.debug.holder; + +import com.facebook.debug.debugoverlay.model.DebugOverlayTag; + +/** No-op implementation of {@link Printer}. */ +public class NoopPrinter implements Printer { + + public static final NoopPrinter INSTANCE = new NoopPrinter(); + + private NoopPrinter() {} + + @Override + public void logMessage(DebugOverlayTag tag, String message, Object... args) {} + + @Override + public void logMessage(DebugOverlayTag tag, String message) {} +} diff --git a/ReactAndroid/src/main/java/com/facebook/debug/holder/Printer.java b/ReactAndroid/src/main/java/com/facebook/debug/holder/Printer.java new file mode 100644 index 00000000000..5b78632984a --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/debug/holder/Printer.java @@ -0,0 +1,13 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +package com.facebook.debug.holder; + +import com.facebook.debug.debugoverlay.model.DebugOverlayTag; + +/** Interface to pass data to debugging tools. */ +public interface Printer { + + void logMessage(final DebugOverlayTag tag, final String message, Object... args); + + void logMessage(final DebugOverlayTag tag, final String message); +} diff --git a/ReactAndroid/src/main/java/com/facebook/debug/holder/PrinterHolder.java b/ReactAndroid/src/main/java/com/facebook/debug/holder/PrinterHolder.java new file mode 100644 index 00000000000..3634646333c --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/debug/holder/PrinterHolder.java @@ -0,0 +1,21 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +package com.facebook.debug.holder; + +/** Holder for debugging tool instance. */ +public class PrinterHolder { + + private static Printer sPrinter = NoopPrinter.INSTANCE; + + public static void setPrinter(Printer printer) { + if (printer == null) { + sPrinter = NoopPrinter.INSTANCE; + } else { + sPrinter = printer; + } + } + + public static Printer getPrinter() { + return sPrinter; + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/debug/tags/BUCK b/ReactAndroid/src/main/java/com/facebook/debug/tags/BUCK index e60249992b6..b36ae88f2fe 100644 --- a/ReactAndroid/src/main/java/com/facebook/debug/tags/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/debug/tags/BUCK @@ -3,11 +3,13 @@ include_defs("//ReactAndroid/DEFS") android_library( name = "tags", srcs = glob(["*.java"]), + exported_deps = [ + react_native_dep("java/com/facebook/debug/debugoverlay/model:model"), + ], visibility = [ "PUBLIC", ], deps = [ - react_native_dep("java/com/facebook/debug/debugoverlay:debugoverlay"), react_native_dep("third-party/java/jsr-305:jsr-305"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.java b/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.java index f7596b31d65..f44fce56ac1 100644 --- a/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.java +++ b/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.java @@ -3,7 +3,7 @@ package com.facebook.debug.tags; import android.graphics.Color; -import com.facebook.debug.debugoverlay.DebugOverlayTag; +import com.facebook.debug.debugoverlay.model.DebugOverlayTag; /** Category for debug overlays. */ public class ReactDebugOverlayTags { @@ -12,4 +12,6 @@ public class ReactDebugOverlayTags { new DebugOverlayTag("Performance", "Markers for Performance", Color.GREEN); public static final DebugOverlayTag NAVIGATION = new DebugOverlayTag("Navigation", "Tag for navigation", Color.rgb(0x9C, 0x27, 0xB0)); + public static final DebugOverlayTag RN_CORE = + new DebugOverlayTag("RN Core", "Tag for React Native Core", Color.BLACK); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/BUCK b/ReactAndroid/src/main/java/com/facebook/react/BUCK index 2d34a98bca4..533d8aedb20 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/BUCK @@ -15,6 +15,8 @@ android_library( react_native_dep("libraries/soloader/java/com/facebook/soloader:soloader"), react_native_dep("third-party/java/infer-annotations:infer-annotations"), react_native_dep("third-party/java/jsr-305:jsr-305"), + react_native_target("java/com/facebook/debug/holder:holder"), + react_native_target("java/com/facebook/debug/tags:tags"), react_native_target("java/com/facebook/react/bridge:bridge"), react_native_target("java/com/facebook/react/common:common"), react_native_target("java/com/facebook/react/devsupport:devsupport"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 29c9394d5b5..ef378232229 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -37,6 +37,8 @@ import android.os.Process; import android.util.Log; import android.view.View; import com.facebook.common.logging.FLog; +import com.facebook.debug.holder.PrinterHolder; +import com.facebook.debug.tags.ReactDebugOverlayTags; import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.ThreadConfined; import com.facebook.infer.annotation.ThreadSafe; @@ -270,6 +272,8 @@ public class ReactInstanceManager { mMinTimeLeftInFrameForNonBatchedOperationMs); mPackages.add(coreModulesPackage); } else { + PrinterHolder.getPrinter() + .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: Use Split Packages"); mPackages.add(new BridgeCorePackage(this, mBackBtnHandler)); if (mUseDeveloperSupport) { mPackages.add(new DebugCorePackage()); @@ -401,6 +405,8 @@ public class ReactInstanceManager { @ThreadConfined(UI) private void recreateReactContextInBackgroundInner() { Log.d(ReactConstants.TAG, "ReactInstanceManager.recreateReactContextInBackgroundInner()"); + PrinterHolder.getPrinter() + .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: recreateReactContextInBackground"); UiThreadUtil.assertOnUiThread(); if (mUseDeveloperSupport && mJSMainModulePath != null && @@ -447,6 +453,8 @@ public class ReactInstanceManager { Log.d( ReactConstants.TAG, "ReactInstanceManager.recreateReactContextInBackgroundFromBundleLoader()"); + PrinterHolder.getPrinter() + .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: load from BundleLoader"); recreateReactContextInBackground(mJavaScriptExecutorFactory, mBundleLoader); } @@ -613,6 +621,7 @@ public class ReactInstanceManager { @ThreadConfined(UI) public void destroy() { UiThreadUtil.assertOnUiThread(); + PrinterHolder.getPrinter().logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: Destroy"); if (mUseDeveloperSupport) { mDevSupportManager.setDevSupportEnabled(false); diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK index 8526eba41a1..e64e27de3f5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK @@ -13,6 +13,8 @@ android_library( react_native_dep("third-party/java/jsr-305:jsr-305"), react_native_dep("third-party/java/okhttp:okhttp3"), react_native_dep("third-party/java/okio:okio"), + react_native_target("java/com/facebook/debug/holder:holder"), + react_native_target("java/com/facebook/debug/tags:tags"), react_native_target("java/com/facebook/react/bridge:bridge"), react_native_target("java/com/facebook/react/common:common"), react_native_target("java/com/facebook/react/common/network:network"), diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java index a3953fef80f..ecd3f9bab18 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -9,21 +9,6 @@ package com.facebook.react.devsupport; -import com.facebook.react.bridge.ReactMarker; -import com.facebook.react.bridge.ReactMarkerConstants; -import javax.annotation.Nullable; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - import android.app.ActivityManager; import android.app.AlertDialog; import android.content.BroadcastReceiver; @@ -37,14 +22,17 @@ import android.hardware.SensorManager; import android.net.Uri; import android.os.AsyncTask; import android.widget.Toast; - import com.facebook.common.logging.FLog; +import com.facebook.debug.holder.PrinterHolder; +import com.facebook.debug.tags.ReactDebugOverlayTags; import com.facebook.infer.annotation.Assertions; import com.facebook.react.R; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.DefaultNativeModuleCallExceptionHandler; import com.facebook.react.bridge.JavaJSExecutor; import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReactMarker; +import com.facebook.react.bridge.ReactMarkerConstants; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.DebugServerException; @@ -60,7 +48,17 @@ import com.facebook.react.devsupport.interfaces.StackFrame; import com.facebook.react.modules.debug.interfaces.DeveloperSettings; import com.facebook.react.packagerconnection.RequestHandler; import com.facebook.react.packagerconnection.Responder; - +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import javax.annotation.Nullable; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -624,6 +622,7 @@ public class DevSupportManagerImpl implements @Override public void handleReloadJS() { + UiThreadUtil.assertOnUiThread(); ReactMarker.logMarker(ReactMarkerConstants.RELOAD); @@ -634,10 +633,14 @@ public class DevSupportManagerImpl implements } if (mDevSettings.isRemoteJSDebugEnabled()) { + PrinterHolder.getPrinter() + .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: load from Proxy"); mDevLoadingViewController.showForRemoteJSEnabled(); mDevLoadingViewVisible = true; reloadJSInProxyMode(); } else { + PrinterHolder.getPrinter() + .logMessage(ReactDebugOverlayTags.RN_CORE, "RNCore: load from Server"); String bundleURL = mDevServerHelper.getDevServerBundleURL(Assertions.assertNotNull(mJSAppBundleName)); reloadJSFromServer(bundleURL);