WebWorkers: Move web worker impl to JSCExecutor

Summary: Part of the plan to make web workers able to call native modules. We will reuse the infrastructure already present in JSCExecutor to allow web workers to call native modules via the Bridge.

Reviewed By: mhorowitz

Differential Revision: D2926896

fb-gh-sync-id: 259b766c46f79bbb5df9d1c648237b81fc1cc1f9
shipit-source-id: 259b766c46f79bbb5df9d1c648237b81fc1cc1f9
This commit is contained in:
Andy Street
2016-02-19 08:21:49 -08:00
committed by facebook-github-bot-5
parent b454d31ab8
commit febb1fbe13
7 changed files with 226 additions and 300 deletions

View File

@@ -27,6 +27,7 @@ import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec;
import com.facebook.react.bridge.queue.QueueThreadExceptionHandler;
import com.facebook.react.common.ReactConstants;
import com.facebook.react.common.annotations.VisibleForTesting;
import com.facebook.react.common.futures.SimpleSettableFuture;
import com.facebook.systrace.Systrace;
import com.facebook.systrace.TraceListener;
@@ -264,6 +265,10 @@ public class CatalystInstanceImpl implements CatalystInstance {
// TODO: tell all APIs to shut down
mDestroyed = true;
mJavaRegistry.notifyCatalystInstanceDestroy();
Systrace.unregisterListener(mTraceListener);
synchronouslyDisposeBridgeOnJSThread();
mReactQueueConfiguration.destroy();
boolean wasIdle = (mPendingJSCalls.getAndSet(0) == 0);
if (!wasIdle && !mBridgeIdleListeners.isEmpty()) {
@@ -271,12 +276,19 @@ public class CatalystInstanceImpl implements CatalystInstance {
listener.onTransitionToBridgeIdle();
}
}
}
Systrace.unregisterListener(mTraceListener);
// We can access the Bridge from any thread now because we know either we are on the JS thread
// or the JS thread has finished via ReactQueueConfiguration#destroy()
mBridge.dispose();
private void synchronouslyDisposeBridgeOnJSThread() {
final SimpleSettableFuture<Void> bridgeDisposeFuture = new SimpleSettableFuture<>();
mReactQueueConfiguration.getJSQueueThread().runOnQueue(
new Runnable() {
@Override
public void run() {
mBridge.dispose();
bridgeDisposeFuture.set(null);
}
});
bridgeDisposeFuture.getOrThrow();
}
@Override