diff --git a/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimersExecution.js b/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimersExecution.js index df1b60972..b118a28a6 100644 --- a/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimersExecution.js +++ b/Libraries/JavaScriptAppEngine/System/JSTimers/JSTimersExecution.js @@ -16,6 +16,8 @@ var performanceNow = require('fbjs/lib/performanceNow'); var warning = require('fbjs/lib/warning'); var Systrace = require('Systrace'); +let hasEmittedTimeDriftWarning = false; + /** * JS implementation of timer functions. Must be completely driven by an * external clock signal, all that's stored here is timerID, timer type, and @@ -147,6 +149,17 @@ var JSTimersExecution = { } }, + /** + * Called from native (in development) when environment times are out-of-sync. + */ + emitTimeDriftWarning: function(warningMessage) { + if (hasEmittedTimeDriftWarning) { + return; + } + hasEmittedTimeDriftWarning = true; + console.warn(warningMessage); + }, + _clearIndex: function(i) { JSTimersExecution.timerIDs[i] = null; JSTimersExecution.callbacks[i] = null; diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/core/JSTimersExecution.java b/ReactAndroid/src/main/java/com/facebook/react/modules/core/JSTimersExecution.java index 9e0ba2a3d..41b241fad 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/core/JSTimersExecution.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/core/JSTimersExecution.java @@ -17,4 +17,6 @@ import com.facebook.react.bridge.WritableArray; public interface JSTimersExecution extends JavaScriptModule { public void callTimers(WritableArray timerIDs); + + public void emitTimeDriftWarning(String warningMessage); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java b/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java index d0ee51cfc..8b88c05b4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/core/Timing.java @@ -226,11 +226,10 @@ public final class Timing extends ReactContextBaseJavaModule implements Lifecycl if (mDevSupportManager.getDevSupportEnabled()) { long driftTime = Math.abs(remoteTime - deviceTime); if (driftTime > 60000) { - throw new RuntimeException( - "Debugger and device times have drifted by more than 60s." + - "Please correct this by running adb shell " + - "\"date `date +%m%d%H%M%Y.%S`\" on your debugger machine." - ); + getReactApplicationContext().getJSModule(executorToken, JSTimersExecution.class) + .emitTimeDriftWarning( + "Debugger and device times have drifted by more than 60s. Please correct this by " + + "running adb shell \"date `date +%m%d%H%M%Y.%S`\" on your debugger machine."); } }